用于复制数据库的 T-SQL 脚本

用于复制数据库的 T-SQL 脚本

我想找到一种基于 T-SQL 脚本的方法将我的“PROD”数据库(只读且由几个文件组组成)复制到可读/写的“EDIT”数据库,以便我可以在其中使用和编辑数据。

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

似乎 T-SQL 中没有“COPY DATABASE”命令,我也找不到任何其他方法来实现这一点 - 除了恢复备份两次。真的吗?没有更好的方法吗?

我想要做的是这样的:

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

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

系统是 SQL Server 2005(备份来自这里)和 SQL Server 2008(我恢复到这里)。

挑战就在那里——谁来接受它?:-)

马克

答案1

SSIS 具有复制数据库功能,因此您必须通过 SSIS 执行 T-SQL,然后才能将复制数据库作为该过程中的一个步骤。

答案2

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

来自帮助页面

以下命令将从名为 MYSERVER 的计算机上的默认实例编写 FooDB 数据库脚本,使用 SQL Server 身份验证,用户名“Alice”和密码“7h92-v6k3”到文件 C:\FooDB.sql:

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

因此,一旦你有了这个脚本,你将能够使用以下命令在其他数据库实例上运行它SQL命令

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

答案3

如果运行脚本的登录具有 sysadmin 权限,您可以执行以下操作:

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

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

但无论如何,这(以及复制数据库向导)都涉及将 PROD 数据库脱机以进行复制。如果这不是一个选项,那么多次恢复可能是你唯一的选择。

答案4

相关内容