我想找到一种基于 T-SQL 脚本的方法将我的“PROD”数据库(只读且由几个文件组组成)复制到可读/写的“EDIT”数据库,以便我可以在其中使用和编辑数据。
我知道复制数据库向导,并且现在正在使用它 - 但是,我更愿意自动执行此操作,以便单个脚本可以从备份中恢复 PROD 数据库并将其复制到 EDIT 数据库。
似乎 T-SQL 中没有“COPY DATABASE”命令,我也找不到任何其他方法来实现这一点 - 除了恢复备份两次。真的吗?没有更好的方法吗?
我想要做的是这样的:
- 开始从磁盘恢复到“MyPROD_Database”
- 完成后,我想将刚刚恢复的数据库复制到“MyEDIT_Database”
- 最后一步,我想将 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 数据库脱机以进行复制。如果这不是一个选项,那么多次恢复可能是你唯一的选择。