Пакетный скрипт для воссоздания базы данных из системы управления версиями

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

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

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

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

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

Мартин.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
4
0
1 402
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

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

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

На самом деле у нас было 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+.

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