SQL Change Master — II

Работа в консольном режиме

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

Changecontroller.exe alias=dev log=”c:\temp\log.txt” showlog

Данная запись говорит, что надо найти и запустить обновление для окружения dev, лог выполнения записать в файл log.txt в папке c:\temp и после выполнения обновления показать лог. На мой взгляд, все достаточно просто и применимо в различных ситуациях, как для Continuous Integration, так и для работы в студии. Можно и просто вставлять в батнички для обновления многих настроек окружения.

Так же можно задать обновления определенной базы данных из указанного окружения.

Changecontroller.exe alias=dev base=testbasea

Данная запись говорит, что надо найти обновление для окружения dev, для базы testbasea и запустить скрипты обновлений.

Если вы что-то указали неверно, или же программа не может найти указанное окружение или базу данных, то SQL Change Master запуститься в графическом режиме.

Работа в студии

Для того, чтобы настроить работу программу из студии, все равно нужен графический режим, где вы зададите все необходимые настройки по окружению и адреса до папок со скриптами. Только саму программу надо будет поместить недалеко от проекта, чтобы можно было указать относительный пункт до скриптов.

Итак, для работы нам понадобится SQL Change Master и датабазный проект от МS.

Настройка датабазного проекта

Создаем новый проект. File > New Project…

В появившемся окне выбираем шаблоны для баз данных для SQL Server и в них находим, к примеру, SQL Server 2008 Database Project.

Обратите внимание, что название проекта должно в точности совпадать с названием базы данных, которое было указано в SQL Change Master.

Подробнее

SQL Change Master — I

Из истории вопроса

Прежде чем приступить к описанию программы, я бы хотел осветить сам вопрос работы с базой данных по гибким методологиям. Или лучше сказать итеративное развитие базы данных, когда изменения в базу вносятся тогда, когда они нужны. Когда база развивается одновременно с приложением и, по сути, идет модель Code First, тогда база отвечает потребностям кода, а не код старается подстроиться под базу.

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

Итак, в начальных условиях у нас в идеале новый проект, green field, или как минимум еще не выпущенный в релиз (разработчики любят начинать все с нуля). Но ничто по большому счету не мешает применить практики итеративного обновления данных и для выпущенного проекта. Если вы используете у себя итеративную поставку, то почему база должна отличаться?

На тему подходов к разработке БД и хранению ее скриптов в системе контроля версий сломано немало копий. Многие крупные разработчики предлагают свои решения, как программные, так и организаторского плана. Хороший обзор получился у  Outcoldman’а, описываются основные подходы к решению обновления БД и хранению истории с помощью проектов от Microsoft, Red Gate, еще каких-то разработчиков. Есть у всех свои слабые и сильные стороны. Я, так же как и Outcoldman, придерживаюсь мнения, что надо писать собственные скрипты обновления и использовать либо готовые решения, либо самому написать простейшие управляющие вещи, по выполнению этих скриптов.

Я лично пробовал только итеративный подход с ручным написанием/генерацией скриптов и датабазные проекты от Микрософт в студии. Датабазные проекты меня не впечатлили, так как там отсутствуют очень важные в жизни вещи, как-то:

  • Миграция данных
  • Переименование через drop\create
  • Атомарность обновлений
  • Однозначное определение текущего состояния базы

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

Подробнее