Как сравнить/проверить схему sql

Я ищу способ проверки схемы SQL в производственной БД после обновления версии приложения. Если приложение не соответствует версии схемы БД, должен быть способ предупредить пользователя и указать необходимые изменения.

Есть ли инструмент или инфраструктура (для использования программно) со встроенными функциями для этого? Или есть какой-то простой алгоритм для выполнения этого сравнения?

Обновление: Красные списки ворот "от $395". Что-нибудь бесплатное? Или более надежным, чем просто сохранить номер версии?

Ответы

Ответ 1

Попробуйте этот SQL.
- Запустите его для каждой базы данных.
- Сохранить вывод в текстовые файлы.
- Разверните текстовые файлы.

/* get list of objects in the database */
SELECT name, 
       type 
FROM  sysobjects
ORDER BY type, name

/* get list of columns in each table / parameters for each stored procedure */
SELECT so.name, 
       so.type, 
       sc.name, 
       sc.number, 
       sc.colid, 
       sc.status, 
       sc.type, 
       sc.length, 
       sc.usertype , 
       sc.scale 
FROM   sysobjects  so , 
       syscolumns  sc 
WHERE  so.id = sc.id 
ORDER BY so.type, so.name, sc.name

/* get definition of each stored procedure */
SELECT so.name, 
       so.type, 
       sc.number, 
       sc.text 
FROM   sysobjects  so , 
       syscomments sc 
WHERE  so.id = sc.id 
ORDER BY so.type, so.name, sc.number 

Ответ 2

Я надеюсь, что смогу помочь - это статья, которую я предлагаю прочитать:

Автоматически сравнивать схемы базы данных SQL Server

В нем описывается, как вы можете автоматизировать процесс сравнения и синхронизации схемы SQL Server с помощью T-SQL, SSMS или стороннего инструмента.

Ответ 3

Вы можете сделать это программно, посмотрев в словаре данных (sys.objects, sys.columns и т.д.) обеих баз данных и сравнив их. Однако есть также такие инструменты, как Redgate SQL Compare Pro, которые делают это за вас. Я уже несколько раз указывал это как часть инструментария QA на системах хранилищ данных, в том числе тот, над которым я сейчас работаю. На моем текущем концерте это не было проблемой, поскольку DBA здесь уже использовал его.

Основная методология использования этих инструментов - поддерживать ссылку script, которая создает базу данных и сохраняет ее в управлении версиями. Запустите script в базу данных царапин и сравните ее с вашей целью, чтобы увидеть различия. Он также будет генерировать патч-скрипты, если вы так наклонены.

Насколько я знаю, нет ничего свободного, что бы это делало, если вы не хотите писать свои собственные. Redgate достаточно дешев, чтобы он мог быть бесплатным. Даже в качестве инструмента обеспечения качества, чтобы доказать, что производственная БД не находится в конфигурации, она должна была бы сэкономить вам покупную цену после одного инцидента.

Ответ 4

Теперь вы можете использовать мою SQL Admin Studio для запуска Сравнить схемы, Сравнить данные и синхронизировать изменения. Больше не требуется скачать лицензионный ключ здесь http://www.simego.com/Products/SQL-Admin-Studio

Также работает против SQL Azure.

[ОБНОВЛЕНИЕ: Да, я являюсь автором вышеупомянутой программы, так как теперь это бесплатно. Я просто хотел поделиться ею с сообществом]

Ответ 5

Если вы ищете инструмент, который может сравнивать две базы данных и показывать вам разницу, Red Gate делает SQL Compare

Ответ 6

Вы не указали, какие RDMBS вы используете: если в вашей СУБД доступны представления SCHEMA, и если вы можете ссылаться на обе схемы с одного и того же хоста, вы можете запросить представления SCHEMA для определения различий в: -tables -columns -колонковые типы -контракты (например, первичные ключи, уникальные ограничения, внешние ключи и т.д.)

Я написал набор запросов для этой цели на SQL Server для прошлой работы - он работал хорошо, чтобы определить различия. Многие из запросов использовали LEFT JOINs с IS NULL для проверки отсутствия ожидаемых элементов, другие сравнивали такие вещи, как типы столбцов или имена ограничений.

Это немного утомительно, но возможно.

Ответ 7

Я нашел этот маленький и бесплатный инструмент, который подходит для большинства моих потребностей. http://www.wintestgear.com/products/MSSQLSchemaDiff/MSSQLSchemaDiff.html

Это очень просто, но он показывает разницу в схемах двух баз данных. У этого нет никаких причудливых вещей, таких как автогенерированные скрипты, чтобы отличия не исчезли, и он не сравнивает данные.

Это просто небольшая бесплатная утилита, которая показывает отличия в схеме:)

Ответ 8

Сделайте таблицу и сохраните свой номер версии там. Просто убедитесь, что вы обновили его по мере необходимости.

CREATE TABLE version (
    version VARCHAR(255) NOT NULL
)
INSERT INTO version VALUES ('v1.0');

Затем вы можете проверить, что номер версии, хранящейся в базе данных, соответствует коду приложения во время настройки вашего приложения или там, где это удобно.

Ответ 10

Какие РСУБД это и насколько сложны потенциальные изменения?

Возможно, это просто вопрос сравнения подсчетов строк и подсчетов индексов для каждой таблицы - если у вас есть версии триггеров и хранимых процедур, о которых нужно беспокоиться, тогда вам понадобится нечто более промышленное

Ответ 11

Попробуйте dbForge Data Compare для SQL Server. Он может сравнивать и синхронизировать любые базы данных, даже очень большие. Быстрый, легкий, всегда обеспечивает правильный результат. Попробуйте в своей базе данных и прокомментируйте продукт.

Мы можем рекомендовать вам надежный инструмент сравнения SQL, который предлагает в 3 раза более быстрое сравнение и синхронизацию табличных данных в ваших базах данных SQL Server. Это dbForge Data Compare для SQL Server.

Основные преимущества:

  • Сравнение ускорения и синхронизации больших баз данных
  • Поддержка собственных резервных копий SQL Server
  • Пользовательское сопоставление таблиц, столбцов и схем
  • Несколько опций для настройки сравнения и синхронизации.
  • Создание отчетов о сравнении и синхронизации

Плюс бесплатная 30-дневная пробная и безрисковая покупка с 30-дневной гарантией возврата денег.