Управление изменениями базы данных с использованием сценариев, созданных вручную

StackOverflow https://stackoverflow.com/questions/1723523

Вопрос

Мои потребности довольно просты, и я не хочу переделывать колесо.Мне нравится создавать сценарии для моей базы данных, и я написал сценарии для ее обновления с одной версии на другую, например 001-create-tables.sql, 002-alter-column.sql и т. д.

Мне нужна простая командная строка инструмента или MsBuild, которая будет проверять базу данных, определять ее версию (с использованием некоторого соглашения о таблицах) и запускать все сценарии в папке, номер которой больше, чем текущая версия базы данных.Я также хотел бы, чтобы инструмент откатил сценарий, если он дает сбой/выдает ошибку, и остановился на этом этапе.

Это то, чего мне хотелось бы, но я не против изменить свои соглашения, хотя я хочу написать свои собственные сценарии sql.Я также хочу, чтобы этот инструмент был бесплатным или с открытым исходным кодом, поскольку мне не нужно слишком много.Поскольку мои проекты написаны на C#, я бы предпочел, чтобы инструмент был встроен в .Net.

Это было полезно?

Решение 7

Хорошо, мне не понравился ни один из вариантов, которые я там нашел.Я нашел несколько хороших инструментов для создания сценариев, но не нашел ничего, что позволяло бы отслеживать версию в базе данных и запускать новые сценарии.В любом случае я пошел дальше и разработал свой собственный инструмент с открытым исходным кодом, чтобы выполнить свою работу.Если вы хотите его использовать, вы можете скачать его с CodePlex. ПоцелуйДБ.Я также разместил сообщение об этом в своем блоге. блог.RunXc

Другие советы

Вы посмотрели Открыть DBDiff еще?Возможно, это хорошее место для начала.

если вы передумаете об открытом исходном коде, SQL-сравнение Red Gate это путь, ИМО.

Попробуйте dbdeploy.NET.

http://sourceforge.net/projects/dbdeploy-net/

Есть довольно интересный проект под названием SQLRunner на SourceForge - это C#, это .NET, это уже "пре-альфа" :-)

Сам не пользовался, но все равно - выглядит неплохо, ИМХО.

Марк

Это сложная проблема, простая и понятная.Инструменты, упомянутые в других ответах, определенно могут помочь, но вам все равно придется многое делать самостоятельно.

На самом деле в моей схеме есть таблица, в которой хранится идентификатор для каждого сценария изменения (который соответствует номеру обращения в моей системе отслеживания проблем/ошибок).В конце каждого сценария изменения я вставляю идентификатор в эту таблицу.У меня есть отдельный скрипт, который проверяет, что было сделано в каждом конкретном экземпляре базы данных.Было бы возможно автоматизировать запуск каждого из еще не запущенных сценариев, но мне нравится запускать сценарии изменений вручную на случай, если что-то пойдет не так.

Откат может быть практически невозможен, тем более что многие изменения схемы требуют определенного рода миграции данных.Я обнаружил, что лучший способ внесения любых изменений в схему — сделать их обратно совместимыми.Никогда не переименовывайте столбец или таблицу (по крайней мере, поначалу).Добавляйте только вещи и делайте все новые добавления обнуляемыми.Сценарий отката просто удаляет новые данные, если вы понимаете, что что-то не так.Конечно, в конечном итоге вы получаете старые, неиспользуемые столбцы и таблицы, поэтому вы пишете второй скрипт, который запускается после того, как ваша текущая версия считается стабильной, и который избавляется от старого материала.

Если вы хотите написать все сценарии самостоятельно, вы можете воспользоваться Утилита SQL Server 2005 TableDiff это даст вам большую гибкость.Некоторые примеры использования можно найти здесь

Если у вас есть все ваши сценарии для данной версии в папке, вы можете запустить их как пакетный файл, если поместите его в эту папку:

for %%X in (*.SQL) do SQLCMD -S <SERVER_NAME> -d <DATABASE_NAME> -E -I -i "%%X"  >> ResultBatch.txt

Извините, я не помню, откуда я это взял, иначе я бы отдал должное.

У нас есть наши разработчики проверить сценарии изменения базы данных в Subversion. Все сценарии повторяются, так что вы можете запускать их несколько раз без ошибок. Мы также связать сценарии изменения выдать предметы или идентификаторы ошибок, чтобы мы могли сдержать изменение набора, если это необходимо. Затем мы имеем автоматизированный процесс сборки, который выгоняет один файл SQL скрипт со всеми изменениями, упорядоченные соответствующим образом. Этот единственный файл затем используется для продвижения изменений к испытанию, контролю качества и производственных условиях. Мы считаем, что это лучший подход с корпоративными разработчиками. Более подробную информацию о том, как мы делаем это ЗДЕСЬ Ваш отзыв будет оценен.

Используйте жидкость.Хотя это Java.

Да, вы можете написать сценарии миграции на выбранном вами варианте SQL.

Он хорошо протестирован и используется многими людьми.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top