Каков простой способ развертывания изменений базы данных с помощью SQL Server?

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

Вопрос

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

Я читал статью "12 Шагов к улучшению кода" и в Тесте Джоэла № 2 говорится:Можете ли вы создать сборку за один шаг?

Теперь мне было интересно, означает ли это сборку развертывания (чтобы клиент мог обновить свое развертывание).

Теперь основная проблема, с которой я сталкиваюсь, заключается в том, как выполнить одноэтапное обновление базы данных?

В настоящее время, когда мы вносим изменения в базу данных, все изменения записываются и добавляются в сценарий обновления базы данных, который получает номер версии, прикрепленный к нему при создании сборки deploy to customer.

Есть ли более простой способ сделать это?Какой-нибудь скрипт или приложение, которое просматривает схему базы данных "до и после" и создает сценарий обновления, как я упоминал?

Или это просто то, как все это делают, в что мне было бы трудно поверить, но правдоподобно.

Автоматизированная система уменьшила бы количество ошибок и значительно ускорила бы время сборки развертывания, и мне было бы интересно узнать, как это сделать.

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

Решение

Существуют различные уровни сложности, которые вы можете пройти:

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

  • если вы склонны больше использовать подход, основанный на различии баз данных, то Red Gate Сравнение SQL (уже упоминалось) и SQL - упаковщик получится отличное сочетание.Вы можете разделить базу данных между старой и новой, а затем применить изменения в удобном пакете - в виде EXE-файла или проекта на C #

  • если вам нужен реальный, сквозной, хорошо продуманный подход (с небольшим обучением), ознакомьтесь DBGhost от Innovartis'DBGhost от Innovartis подходите.Это целая методология / техника, как обрабатывать разработку базы данных и инкрементные обновления.Это очень мощно и выглядит очень многообещающе, но это своего рода подход "все или ничего":либо вы покупаетесь на это и используете его от начала до конца, либо вы этого не делаете

Надеюсь, это немного поможет!

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

у редгейта есть инструмент Сравнение SQL сравнить базы данных и сгенерировать скрипт для синхронизации.Раньше мы использовали его, но совсем недавно перешли на ручные скрипты, используя тот же процесс, который вы описываете.Использование ручных, мелкозернистых скриптов с уникальным номером версии хорошо зарекомендовало себя.

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

Взгляните на этот пост в блоге.Я использовал этот тип одиночного скрипта обновления из любой версии БД в паре проектов, и он работает довольно хорошо.

http://blogs.msdn.com/danhardan/archive/2007/03/30/database-change-scripts-mambo-style.aspx

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

Редактировать:Просто чтобы подробнее рассказать о том, как я использовал эту технику.По сути, все мои сценарии пересмотра БД передаются в систему управления версиями.Затем, в качестве шага после сборки в окне сборки, этот инструмент Mambo запускается в каталоге scripts для объединения сценариев в единый скрипт, охватываемый транзакцией, чтобы обеспечить откат, если что-то пойдет не так.Затем установщик достаточно умен, чтобы искать sql-скрипт для запуска в существующей базе данных.

Причина, по которой это работает, заключается в том, что свернутый скрипт проверяет, что каждая часть, которая была отдельным скриптом, уже была запущена с нужной базой данных.В результате запускаются только самые последние скрипты.Предостережение к этому заключается в том, что после того, как скрипт возвращен в систему управления версиями и был развернут, вы не можете редактировать его, поскольку таблица отслеживания уже считает, что скрипт был запущен.Это нормально для проектов, над которыми я работал, потому что мы просто добавляем другой скрипт в папку scripts .

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

Ответ на первый вопрос: "Теперь мне было интересно, означает ли это сборку развертывания (чтобы клиент мог обновить свое развертывание)?"

Я полагаю, что тест Джоэла № 2 предназначен не для перехода к развертыванию prod, а для непрерывной интеграции во время разработки.

Что касается изменений базы данных в prod, все они должны выполняться с помощью скрипта как часть развертывания транзакции или после создания резервной копии базы данных.Вы всегда хотите иметь возможность вернуться назад, если что-то не сработает при развертывании.

Разработайте свою базу данных в виде набора исправлений, которые зависят друг от друга.Затем используйте такой инструмент, как https://github.com/LuvDaSun/sqlpatch (мной) для создания sql-файла для развертывания.

sqlpatch отсортирует исправления в правильном порядке и убедится, что каждое исправление выполняется ровно один раз, даже если один и тот же скрипт выполняется дважды.

Эта стратегия может быть использована для развертывания вашей базы данных в среде ci / cd.Это упрощает развертывание так же, как переход к ветке.

Есть приложения, которые синхронизируют базы данных, но я думаю, вам лучше делать то, что вы делаете.Написание сценария для обновления базы данных дает вам возможность обрабатывать ошибки и запускать транзакции.Это считается наилучшей практикой.

Сами Microsoft представили Приложения уровня данных в SQL 2012 в качестве бесплатной опции для развертывания и обновления баз данных.

Я использую этот инструмент, и мне он нравится, в том числе для производственных развертываний.

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