我有一个 SQL Server 2008,想要复制一个数据库,以便我获得该数据库的第二个版本以在同一台服务器上进行测试。
数据库复制向导无法复制数据库,它总是发送有关缺少对象的奇怪错误消息(使用 SMO 复制)。
当我尝试进行备份并以不同的数据库名称恢复它时,它仍会保留原始数据库的文件名并覆盖它(导致原始数据库崩溃)。
那么如何复制 SQL 数据库?关闭 SQL Server,复制物理文件并附加它们?也许有一个用于数据库复制的命令行工具?难道不应该有一种简单的方法来进行复制吗?
答案1
首先,您需要通过执行 sp_helpdb 'DBNAME' 并查看 [Name] 列来确定数据库文件的逻辑名称。您需要识别数据和日志文件。接下来,您需要执行完整的 copy_only 数据库备份。copy only 选项不是绝对必要的,但它可以防止原始数据库上的日志链中断。接下来,您需要使用 MOVE 选项执行数据库还原,为实际物理文件赋予新名称,以免它们与原始数据库冲突。
以下是将 [Scratch] 数据库复制到 [Scratch_New] 数据库的示例。您需要根据您的 SQL 安装调整实际的备份和数据路径。
sp_helpdb 'Scratch'
-- From the resultset of this procedure I learned that the logical
-- data file name is 'Scratch' and the logical log file name is 'Scratch_log'.
BACKUP DATABASE [Scratch]
TO DISK='C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Backup\Scratch_Full_Copy.bak' WITH COPY_ONLY
RESTORE DATABASE [Scratch_New]
FROM DISK='C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Backup\Scratch_Full_Copy.bak'
WITH MOVE 'Scratch' TO 'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Data\ScratchNew.mdf',
MOVE 'Scratch_log' TO 'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Data\ScratchNew_Log.ldf';
答案2
我使用 SSMS 来克隆数据库。
- 创建要复制的数据库的备份,并将其命名为 OriginalDB
- 右键单击 OriginalDB,选择
task
,然后选择Restore DB
。 - 在选项中
Destination for restore
,输入数据库的新名称(例如 NewDB),然后在选项中Source for restore
选择 OriginalDB。
这将创建一个与 OriginalDB 完全相同的 NewDB。