2016-09-14 3 views
1

Для каждой версии в текущих проектах создаются два сценария sql (update/rollback). Мы хотели бы перейти на решение DACPAC.ssdt dacpac: как структурировать разные версии

Каждый проект DACPAC создает 1 файл dacpac на en, поэтому для каждой версии я создаю 2 проекта (1 для обновления и 1 для отката). Изменения схемы будут в самом dacpac, тогда как предварительный сценарий и пост-скрипт предназначены для переноса данных.

Чтобы добавить новую версию, я копирую текущий проект обновления в новый проект обновления и новый проект отката. Затем измените оттуда.

Любые мысли, пожалуйста?

ответ

3

Я думаю, это сводится к тому, нужно ли вам на самом деле выполнять всю эту работу, как я работаю с SSDT, - это определить, что я хочу, чтобы текущая версия выглядела в коде схемы +, и любые сценарии обновления, которые мне нужны в файлы после развертывания в виде перезапускаемых сценариев (idempotent).

Если db находится на версии 1 или 100, они по-прежнему получают один и тот же пост-развертывающий скрипт, но либо скрипт проверяет данные, либо флаг, который хранится в базе данных, чтобы сказать, что данный скрипт уже запущен - это должен быть довольно прост в настройке, но зависит от ваших точных требований.

Чтобы сохранить это управление, рекомендуется знать, когда отдельные сценарии перешли во все ваши среды, а затем удалите их, чтобы на самом деле у вас были только сценарии после развертывания, которые вам когда-либо понадобятся.

Это, как говорится, иногда есть определенные ограничения, которые, как правило:

  • Клиенты управления базами данных, так что вы не можете быть уверены, что у них есть версия
  • регулирования (мнимые или иным образом) требования требуют обновления/откат сценарии

во-первых, выяснить, как установить в камне ваши требования, цель SSDT, чтобы не придется беспокоиться о модернизации скриптов/даунгрейд (конечно, для схемы) - вопросы, которые я бы спросить, являются:

  • достаточно ли сделать резервную копию или моментальный снимок перед развертыванием?
  • Можете ли вы оставить сценарии понижения и написать их, если вам когда-нибудь понадобится?
  • как часто Откат сценарии когда-либо использовали (и зная, первые два могут помочь здесь)

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

Каковы ваши ограничения?

Ed

+0

Thanks Ed. «Если db находится на версии 1 или 100, они все равно получают один и тот же пост-развертывающий скрипт, но либо скрипт проверяет данные, либо флаг, который хранится в базе данных, чтобы сказать, что определенный скрипт уже запущен - это должно быть довольно легко настраивается, но зависит от ваших точных требований ». это именно то, что я хочу, но не знаю, что такое лучшая практика. Из вашего объяснения, похоже, мне нужно управлять 1 проектом SSDT и выполнять управление версиями кода внутри сценариев pre/post с учетом текущей версии на целевом db. Можете ли вы поделиться мне кратким примером того, как вы это сделали? – beewest

+1

Конечно, проще всего использовать таблицу «version_deployed», которая содержит идентификатор версии и дату, чтобы ваш сценарий обновления становился (если не существует (выберите * из версий_deployed, где name = id) начните blah insert into version_deployed id) - если вы поместите каждое обновление версии в свой собственный скрипт и ссылаетесь на него из сценария после развертывания, используя «: r filename», тогда проще просмотреть, что у вас есть в explorer - это также отслеживает, когда все было развернуто, что приятно для некоторых сценарии. –

+0

Дано 3 версии: v1 (pre1, schema1, post1), v2, v3. Ваше решение (pre1 pre2 pre3, schema, post1 post2 post3). Он работает хорошо Если прес не зависит от предыдущего сообщения. Однако если post1 вставляет новую строку, pre2 изменяет, то post2 перемещается где-то в другом месте. Есть предположения? – beewest

2

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

Примеры: DBUp (с открытым исходным кодом), ReadyRoll (это коммерческий и тот, который мы разрабатываем здесь, в Redgate - имеет дополнительные функции, такие как автоматическое создание интеграции скриптов с VS и т. Д.).

Инструменты, основанные на миграции, управляют версиями (включая таблицу Ed), от вашего имени.

+1

спасибо Дэвиду. нужно убедить начальника, что ssdt не подходит перед тестированием на других :) – beewest

+0

Достаточно честный. Но дайте нам знать, если у вас есть какие-либо вопросы, особенно если вы столкнетесь с дополнительными ограничениями проекта базы данных SSDT. –

Смежные вопросы