как сравнить / проверить схему SQL - PullRequest
15 голосов
/ 03 октября 2008

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

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

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

Ответы [ 11 ]

22 голосов
/ 03 октября 2008

Попробуйте этот 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 
9 голосов
/ 04 февраля 2014

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

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

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

8 голосов
/ 03 октября 2008

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

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

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

4 голосов
/ 11 июля 2011

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

Также работает с SQL Azure.

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

1 голос
/ 01 декабря 2011

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

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

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

1 голос
/ 03 октября 2008

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

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

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

1 голос
/ 03 октября 2008

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

0 голосов
/ 09 апреля 2010

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

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

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

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

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

0 голосов
/ 03 октября 2008

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

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

0 голосов
/ 03 октября 2008
...