Как сравнить/проверить схему 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');
Затем вы можете проверить, что номер версии, хранящейся в базе данных, соответствует коду приложения во время настройки вашего приложения или там, где это удобно.
Ответ 9
SQL Compare by Red Gate.
Ответ 10
Какие РСУБД это и насколько сложны потенциальные изменения?
Возможно, это просто вопрос сравнения подсчетов строк и подсчетов индексов для каждой таблицы - если у вас есть версии триггеров и хранимых процедур, о которых нужно беспокоиться, тогда вам понадобится нечто более промышленное
Ответ 11
Попробуйте dbForge Data Compare для SQL Server. Он может сравнивать и синхронизировать любые базы данных, даже очень большие. Быстрый, легкий, всегда обеспечивает правильный результат.
Попробуйте в своей базе данных и прокомментируйте продукт.
Мы можем рекомендовать вам надежный инструмент сравнения SQL, который предлагает в 3 раза более быстрое сравнение и синхронизацию табличных данных в ваших базах данных SQL Server. Это dbForge Data Compare для SQL Server.
Основные преимущества:
- Сравнение ускорения и синхронизации больших баз данных
- Поддержка собственных резервных копий SQL Server
- Пользовательское сопоставление таблиц, столбцов и схем
- Несколько опций для настройки сравнения и синхронизации.
- Создание отчетов о сравнении и синхронизации
Плюс бесплатная 30-дневная пробная и безрисковая покупка с 30-дневной гарантией возврата денег.