Восстановление dev db с производства: запуск набора сценариев SQL на основе списка, хранящегося в таблице? - PullRequest
0 голосов
/ 14 апреля 2010

Мне нужно восстановить резервную копию из производственной базы данных, а затем автоматически повторно применить сценарии SQL (например, ALTER TABLE, INSERT и т. Д.), Чтобы вернуть эту схему БД к тому, что разрабатывалось.

Будет много сценариев от нескольких разных разработчиков. Они не будут все в одном каталоге.

Мой текущий план состоит в том, чтобы перечислить сценарии с полным путем к файловой системе в таблице в базе данных psuedo-system. Затем создайте хранимую процедуру в этой базе данных, которая сначала запустит RESTORE DATABASE, а затем наведет курсор на список сценариев, создав для каждого сценария строку команды для SQLCMD, а затем выполнив эту строку SQLCMD для каждого сценария, используя xp_cmdshell.

Последовательность курсора-> sqlstring-> xp_cmdshell-> sqlcmd мне кажется неуклюжей. Также требуется включение xp_cmdshell.

Я не могу быть единственным, кто сделал что-то подобное. Есть ли более чистый способ запуска набора сценариев, разбросанных по файловой системе на сервере? Особенно, способ, который не требует xp_cmdshell?

Ответы [ 2 ]

1 голос
/ 14 апреля 2010

Прежде всего, A-number-one, соберите все скрипты базы данных в одном центральном месте. Лучше всего использовать какую-либо форму контроля версий или контроля версий, так как вы можете увидеть, кто что изменил, когда и (с помощью инструментов сравнения, если ничего больше) почему. Оставление кода, используемого для создания ваших баз данных, может привести к катастрофе.

Во-вторых, вам нужно запускать скрипты для вашей базы данных. Это означает, что вам нужен кто-то или что-то для их запуска, что означает выполнение кода. Если вы выполняете это выполнение кода из SQL Server, вы в конечном итоге будете использовать xp_cmdshell. Альтернатива? Используйте что-то еще, что может запускать сценарии для баз данных.

Мое текущее решение этой проблемы состоит в том, чтобы хранить сценарии в текстовых (.sql) файлах, сохранять файлы в системе управления версиями и тщательно отслеживать порядок их выполнения (например, CREATE ТАБЛИЦЫ запускаются перед ALTER TABLE, которые добавляют последующие столбцы). Затем у меня есть пакетный файл - да, я был здесь некоторое время, вы можете сделать это практически на любом языке - чтобы вызвать SQLCMD (мы работаем на SQL 2005, я использовал osql) и запустить эти сценарии в отношении необходимой базы данных.

Если вы не хотите пытаться «раскрутить свое», возможно, существуют более формальные инструменты для управления этим процессом.

0 голосов
/ 14 апреля 2010

Помимо предложений по централизации и управлению источниками, сделанных Филиппом Келли, если вы знакомы с .NET, вы можете подумать о написании небольшого приложения WinForms или WebForms, которое использует SQL Server SMO (объекты управления SQL Server). С его помощью вы можете передать весь сценарий в базу данных так же, как если бы вы сбросили его в Management Studio. Это устраняет необходимость в xp_cmdshell и sqlcmd. Другой вариант - создать пакет DTS / SSIS, который будет читать файлы и использовать задачу «Выполнение T-SQL» в цикле.

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