как сравнить / проверить схему sql
Вопрос
Я ищу способ проверить схему SQL в рабочей базе данных после обновления версии приложения.Если приложение не соответствует версии схемы базы данных, должен быть способ предупредить пользователя и перечислить необходимые изменения.
Есть ли инструмент или фреймворк (для программного использования) со встроенными функциями для этого?Или есть какой-то простой алгоритм для выполнения этого сравнения?
Обновить: В списке Red gate указано "от 395 долларов".Есть что-нибудь бесплатное?Или более надежный вариант, чем просто сохранение номера версии?
Решение
Попробуйте этот 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
Другие советы
Я надеюсь, что смогу помочь - эту статью я предлагаю прочитать:
Автоматическое сравнение схем баз данных SQL Server
В нем описывается, как можно автоматизировать процесс сравнения и синхронизации схем SQL Server с помощью T-SQL, SSMS или стороннего инструмента.
Вы можете сделать это программно, заглянув в словарь данных (sys.objects, sys.columns и т. д.) обеих баз данных и сравнив их. Однако есть и такие инструменты, как Redgate SQL Compare Pro , которые делают это для вы. Я несколько раз указывал это как часть инструментария для обеспечения качества в системах хранилищ данных, включая тот, над которым я сейчас работаю. На моем нынешнем концерте это не было проблемой, так как администраторы здесь уже использовали его.
Основная методология использования этих инструментов - поддерживать эталонный скрипт, который создает базу данных, и поддерживать его в управлении версиями. Запустите скрипт в базу данных с нуля и сравните его с вашей целью, чтобы увидеть различия. Он также сгенерирует патч-сценарии, если вы так склонны.
Насколько я знаю, нет ничего свободного, что делает это, если вы не хотите писать свои собственные. Redgate достаточно дешев, поэтому он может быть бесплатным. Даже в качестве инструмента контроля качества, позволяющего доказать, что производственная база данных не находится в конфигурации, она должна была сохранить вашу цену покупки после одного инцидента.
Теперь вы можете бесплатно использовать мою SQL Admin Studio , чтобы запускать Сравнение схем , Сравнение данных и синхронизировать изменения. Больше не требуется загружать лицензионный ключ здесь http://www.simego.com/Products/ SQL-Admin-Studio
Также работает с SQL Azure.
[ОБНОВЛЕНИЕ: Да, я являюсь автором вышеуказанной программы, поскольку она теперь бесплатна. Я просто хотел поделиться ею с сообществом]
Если вы ищете инструмент, который может сравнить две базы данных и показать разницу между ними, Red Gate делает Сравнение SQL
Вы не упомянули, какую RDMBS вы используете: если в вашей RDBMS доступны представления INFORMATION SCHEMA и если вы можете ссылаться на обе схемы с одного хоста, вы можете запросить представления INFORMATION SCHEMA, чтобы определить различия в: -tables -columns типы столбцов ограничения (например, первичные ключи, уникальные ограничения, внешние ключи и т. д.)
Я написал набор запросов именно для этой цели на SQL Server для прошлой работы - он хорошо работал для выявления различий. Многие из запросов использовали LEFT JOINs с IS NULL для проверки отсутствия ожидаемых элементов, другие сравнивали такие вещи, как типы столбцов или имена ограничений.
Это немного утомительно, но это возможно.
Я нашел этот маленький и бесплатный инструмент, который соответствует большинству моих потребностей. http://www.wintestgear.com/products/MSSQLSchemaDiff/MSSQLSchemaDiff.html р>
Это очень просто, но показывает различия в схемах двух баз данных. У него нет таких причудливых вещей, как автоматически сгенерированные скрипты, чтобы можно было пропустить различия, и он не сравнивает никакие данные.
Это небольшая бесплатная утилита, которая показывает различия в схемах:)
Составьте таблицу и сохраните там номер вашей версии. Просто убедитесь, что вы обновляете его по мере необходимости. Р>
CREATE TABLE version (
version VARCHAR(255) NOT NULL
)
INSERT INTO version VALUES ('v1.0');
Затем вы можете проверить, что номер версии, хранящийся в базе данных, соответствует коду приложения во время установки вашего приложения или там, где это удобно.
Что это за СУРБД и насколько сложны потенциальные изменения?
Может быть, это просто вопрос сравнения количества строк и индексов для каждой таблицы - если у вас есть версии триггеров и хранимых процедур, о которых нужно также беспокоиться, вам нужно что-то более промышленное
Попробуй Сравнение данных dbForge для SQL Server.Он может сравнивать и синхронизировать любые базы данных, даже очень большие.Быстро, легко, всегда дает правильный результат.Попробуйте его в своей базе данных и прокомментируйте продукт.
Мы можем порекомендовать вам надежный инструмент сравнения SQL, который обеспечивает в 3 раза более быстрое сравнение и синхронизацию табличных данных в ваших базах данных SQL Server.Это сравнение данных dbForge для SQL Server.
Основные преимущества:
- Более быстрое сравнение и синхронизация больших баз данных
- Поддержка собственных резервных копий SQL Server
- Пользовательское сопоставление таблиц, столбцов и схем
- Множество опций для настройки вашего сравнения и синхронизации
- Создание отчетов о сравнении и синхронизации
Плюс бесплатная 30-дневная пробная версия и безрисковая покупка с 30-дневной гарантией возврата денег.