Назад | Перейти на главную страницу

Скрипт T-SQL для копирования базы данных

Я хотел бы найти способ на основе сценария T-SQL скопировать мою базу данных "PROD" (которая предназначена только для чтения и состоит из нескольких файловых групп) в базу данных "EDIT" с возможностью чтения и записи, которую я могу использовать и редактировать в .

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

Похоже, что в T-SQL нет команды «КОПИРОВАТЬ БАЗУ ДАННЫХ», и я не могу найти другого способа добиться этого - кроме восстановления резервной копии дважды. В самом деле? Нет лучшего способа сделать это ??

Я бы хотел сделать следующее:

  1. начать восстановление с диска в "MyPROD_Database"
  2. после того, как я закончу, я хотел бы скопировать только что восстановленную БД в «MyEDIT_Database»
  3. в качестве последнего шага я хотел бы установить файловые группы моей базы данных PROD только для чтения

Желательно все в одном сценарии T-SQL, который я могу запускать из SSMS и / или sqlcmd.

Система - это SQL Server 2005 (откуда берется резервная копия) и SQL Server 2008 (где я восстанавливаю).

Перчатка там - кто ее поднимет? :-)

Марк

В Мастер публикации SQL Server можно автоматизировать с помощью аргументов командной строки.

Из страница помощи

Следующая команда создаст сценарий для базы данных FooDB из экземпляра по умолчанию на машине с именем MYSERVER с использованием аутентификации SQL Server с именем пользователя «Алиса» и паролем «7h92-v6k3» в файл C: \ FooDB.sql:

sqlpubwiz script -d FooDB -S MYSERVER -U Alice -P 7h92-v6k3 C:\FooDB.sql

Итак, как только у вас будет этот сценарий, вы сможете запустить его в другом экземпляре базы данных, используя SQLCMD.

sqlcmd -S MYSERVER -U Alice -P 7h92-v6k3 -i C:\FooDB.sql -o 

SSIS имеет функцию копирования базы данных, поэтому вам нужно будет выполнить свой T-SQL через SSIS, а затем у вас может быть база данных для копирования в качестве шага в этом процессе.

Если логин, запускающий сценарий, имеет права системного администратора, вы можете сделать это:

  • восстановить базу данных PROD
  • отсоединить базу данных PROD
  • скопируйте файлы базы данных PROD с помощью xp_cmdshell
  • прикрепить базу данных PROD, используя исходные файлы
  • прикрепите базу данных EDIT, используя скопированные файлы

Если вы можете использовать режим SQLCMD или SQLCMD Management Studio для запуска сценария, вы также можете воспользоваться преимуществами SQLCMD !! синтаксис для выполнения команды ОС для копирования файлов.

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

Может ли это помочь: http://www.codeproject.com/KB/database/ScriptDatabase.aspx

Создайте сценарий всей вашей базы данных, включая операторы SQL Insert для импорта данных в базу данных.

Это может быть полезно:

SQL Multiscript

Сделать резервное копирование / восстановление намного быстрее и проще:

SqlCmd -E -S localhost -Q "BACKUP DATABASE mydb TO DISK='c:\temp\mydb.bak'"
REM Make Sure connections are closed
SqlCmd -E -S localhost -Q "ALTER DATABASE PIDataCopy SET SINGLE_USER WITH ROLLBACK AFTER 60"
SqlCmd -E -S localhost -Q "RESTORE DATABASE PIDataCopy FROM DISK='c:\temp\mydb.bak WITH MOVE  'mydb_Data' TO 'C:\SQLData\PIDataCopy_Data', MOVE 'mydb_Log' TO 'C:\SQLData\PIDataCopy_Log', RECOVERY,REPLACE"
SqlCmd -E -S localhost -Q "ALTER DATABASE PIDataCopy SET MULTI_USER"