Насколько я понимаю, если я хочу, чтобы моя база данных находилась под контролем источника, мне нужно проверять сценарии изменений для каждого изменения, а затем запускать их из какой-либо версии, чтобы получить правильную БД.
Я пытаюсь создать командный файл, который тоже будет проверен, что позволяет другим разработчикам в команде без особых проблем воссоздавать БД локально. Я считаю, что sqlcmd - это способ добиться этого. У меня есть настройка для перечисления всех файлов в каталоге файлов .sql и запуска sqlcmd для каждого.
У меня вопрос: кто это делал раньше, и есть ли у вас совет, как лучше всего этого добиться? Я собираюсь сделать это наилучшим образом или есть способ лучше?
Надеюсь, это не слишком расплывчато.
Заранее спасибо,
Мартин.
Следует помнить, что вам нужно создавать объекты в порядке зависимости. Таким образом, вы не можете просто перебирать файлы.
В итоге у нас появился командный файл, в котором будут перечислены все объекты в порядке зависимости.
На самом деле у нас было 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
а затем другой со списком всех объектов db:
:: 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 «для бедняков» для написания всей схемы базы данных?
Если вы используете инструмент 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).
Если ваша компания желает инвестировать в хорошие инструменты, стоит проверить SQL Compare Pro. Он хорошо подходит для автоматизации / упрощения описанных вами задач. У них есть 14-дневная бесплатная полнофункциональная пробная версия, поэтому вы можете протестировать ее, прежде чем вкладывать деньги.
Это интересный момент, касающийся того, что фреймворк OR mapping может создавать схему - я об этом не думал. На самом деле я использую LINQ To SQL, но считаю, что схему и БД можно воссоздать с помощью вызова CreateDatabase ().
Кто-нибудь еще использовал этот подход к управлению исходным кодом базы данных через LINQ To SQL?
Я разработал небольшую утилиту, которая помогает мне редактировать мои таблицы, SP, триггеры и представления, экспортируя их в текстовые файлы: Sql Exporter gljakal. У него есть режим графического интерфейса и режим командной строки (поэтому я могу использовать его в пакетных файлах).
Работает на SQL 2005+.