Пакетный скрипт для повторного создания базы данных из системы контроля версий - PullRequest
4 голосов
/ 11 ноября 2008

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

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

У меня вопрос, кто делал это раньше, и есть ли у вас совет, как лучше всего этого добиться? Является ли способ, которым я собираюсь сделать это лучшим способом или есть лучший способ?

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

Заранее спасибо,

Martin.

Ответы [ 5 ]

3 голосов
/ 11 ноября 2008

Я разработал небольшую утилиту, которая помогает мне создавать версии моих таблиц, SP, триггеров и видов, экспортируя их в текстовые файлы: Sjl Exporter gljakal . Он имеет режим графического интерфейса и режим командной строки (поэтому я могу использовать его в пакетных файлах).

Работает на SQL 2005 +.

3 голосов
/ 11 ноября 2008

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

Это довольно простой способ иметь подходящую версию БД для каждой ревизии.

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

Я недавно писал об этом: http://www.tigraine.at/2008/10/30/sourcecontrol-and-databases-when-orm-comes-in-handy/

У меня также когда-то был проект, в котором были скрипты обновления Sql, и у нас был только небольшой встроенный вспомогательный инструмент (очень простой), который открывал папку, сортировал все скрипты (мы называли их 1 - foo.sql, 2 - bar.sql) и выполнил их по порядку в отношении БД.

Если у разработчика был новый скрипт, он просто добавлял его в конец (34 - bla bla.sql).

0 голосов
/ 11 ноября 2008

Интересен тот факт, что среда сопоставления OR может создавать схему - я об этом не думал. Я на самом деле использую LINQ To SQL, но я считаю, что схему и БД все еще можно создать заново с помощью вызова CreateDatabase ().

Кто-нибудь еще использовал этот подход к управлению исходным кодом базы данных через LINQ To SQL?

0 голосов
/ 11 ноября 2008

Если ваша компания готова инвестировать в некоторые хорошие инструменты, стоит проверить SQL Compare Pro . Он хорошо подходит для автоматизации / упрощения задач, которые вы описали. У них есть 14-дневная бесплатная полнофункциональная пробная версия, так что вы можете проверить ее, прежде чем вкладывать деньги.

0 голосов
/ 11 ноября 2008

Следует помнить, что вам нужно создавать объекты в порядке зависимости. Поэтому вы не можете просто перебирать файлы.

В итоге мы получили пакетный файл, который бы перечислял все объекты в порядке зависимости

На самом деле у нас было 2 пакетных файла, один из которых назывался createDBObject.bat:

:: Parameters Required:
:: %1 UserID
:: %2 Password
:: %3 Server
:: %4 Database
:: %5 file with scripted object
::
echo. >> CreateDBObjectsLog.txt
echo  %5 >> CreateDBObjectsLog.txt
osql -U%1 -P%2 -S%3 -i%5 -d%4 -n >> CreateDBObjectsLog.txt
echo * %5

, а затем другой со списком всех объектов БД:

:: Parameters Required:
:: %1 UserID
:: %2 Password
:: %3 Server
:: %4 Database
::
echo object  in %4 database on %3 server
echo Please Wait ...

if exist CreateDBObjectsLog.txt del CreateDBObjectsLog.txt


call createDBObject.bat %1, %2, %3, %4, ScriptedTable1
call createDBObject.bat %1, %2, %3, %4, ScriptedTable2
...
call createDBObject.bat %1, %2, %3, %4, ScriptedTableN

call createDBObject.bat %1, %2, %3, %4, ScriptedView1

call createDBObject.bat %1, %2, %3, %4, ScriptedSP1

etc

Теперь мы используем SQL Compare Pro , который автоматизирует все эти задачи

Вы также можете проверить связанный вопрос: Существует ли альтернатива RedGate для «бедняков» для сценариев всей схемы базы данных?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...