В прошлом я контролировал источник изменений базы данных таким образом, что для каждого выпуска продукта любые изменения базы данных всегда записывались в сценарий и сохранялись в выпуске, над которым мы работаем. Процесс сборки на месте автоматически приведет базу данных к текущей версии на основе таблицы в базе данных, в которой хранится текущая версия для каждого «приложения». Пользовательское служебное приложение .net, которое мы написали, затем запустит и определит текущую версию базы данных и запустит любые новые сценарии для нее в порядке номеров префиксов этих сценариев. Затем мы запустили модульные тесты, чтобы убедиться, что все было хорошо.
Мы сохраним сценарии в управлении исходным кодом следующим образом (структура папок ниже):
Я немного устал от существующих соглашений о присвоении имен таблицам и хранимым процедурам, поэтому мне не хватает моего примера ...
[корень]
[Применение]
[Версия]
[скрипт]
\ скрипты
MyApplication \
1.2.1 \
001.MyTable.Create.sql
002.MyOtherTable.Create.sql
100.dbo.usp.MyTable.GetAllNewStuff.sql
При использовании таблицы «Версии», которая будет учитывать приложение и версию, приложение будет восстанавливать еженедельное производственное резервное копирование и запускать все сценарии, необходимые для базы данных, начиная с текущей версии. Используя .net, мы легко смогли упаковать это в транзакцию, и если что-то не получится, мы откатимся и отправим электронные письма, поэтому мы знали, что в выпуске были плохие сценарии.
Таким образом, все разработчики должны поддерживать это в системе контроля версий, чтобы скоординированный выпуск обеспечивал успешную работу всех сценариев, которые мы планируем запустить для базы данных.
Это, вероятно, больше информации, чем вы искали, но она очень хорошо сработала для нас, и, учитывая структуру, было легко привлечь всех разработчиков на борт.
Когда наступает день релиза, операционная команда следит за примечаниями к выпуску, выбирает сценарии из системы контроля версий и запускает пакет для базы данных с помощью приложения .net, которое мы использовали во время ночного процесса сборки, который автоматически упаковывает сценарии в транзакции, поэтому, если что-то не получится, оно автоматически откатится и не окажет влияния на базу данных.