T-SQL脚本来复制数据库

我想find一个基于T-SQL脚本的方式来复制我的“PROD”数据库(这是只读的,由几个文件组组成)到一个可读写的“编辑”数据库,我可以使用和编辑数据。

我知道复制数据库向导,现在正在使用它 – 但是,我更愿意自动执行此操作,以便单个脚本可以从备份恢复PROD数据库并将其复制到EDIT数据库。

似乎在T-SQL中没有“COPY DATABASE”命令,我也找不到任何其他的方法来实现这一点 – 两次还原备份。 真? 有没有更好的办法做到这一点?

我想要做的是这样的:

  1. 从磁盘启动还原到“MyPROD_Database”
  2. 完成之后,我想将刚刚恢复的数据库复制到“MyEDIT_Database”
  3. 作为最后一步,我想将我的PROD数据库的文件组设置为只读

最好在一个T-SQL脚本中,我可以从SSMS和/或sqlcmd运行。

系统是SQL Server 2005(从备份来的地方)和SQL Server 2008(我还原到)。

战书在外面 – 谁来捡起来? 🙂

渣子

SSIS有一个复制数据库function,所以你将不得不通过SSIS执行你的T-SQL,然后你可以有一个复制数据库作为这个过程中的一个步骤。

SQL Server发布向导可以通过命令行参数自动执行。

从帮助页面

以下命令将使用名为“Alice”的SQL Server身份validation和密码为“7h92-v6k3”的名为MYSERVER的计算机上的默认实例将FooDB数据库编写到文件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 

如果运行脚本的login具有sysadmin权限,则可以这样做:

  • 恢复PROD数据库
  • 分离PROD数据库
  • 使用xp_cmdshell复制PROD数据库的文件
  • 使用原始文件附加PROD数据库
  • 使用复制的文件附加编辑数据库

如果您可以使用SQLCMD或Management Studio的SQLCMD模式运行脚本,则还可以利用SQLCMD的! 语法来执行操作系统命令来复制文件。

然而,在任何情况下,这个(和复制数据库向导,就此而言)涉及使PROD数据库离线执行复制。 如果这不是一个选项,多个恢复可能是你唯一的select。

这可以帮助: 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"