如何在同一台服务器上复制 SQL Server 数据库

如何在同一台服务器上复制 SQL Server 数据库

我有一个 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 来克隆数据库。

  1. 创建要复制的数据库的备份,并将其命名为 OriginalDB
  2. 右键单击 OriginalDB,选择task,然后选择Restore DB
  3. 在选项中Destination for restore,输入数据库的新名称(例如 NewDB),然后在选项中Source for restore选择 OriginalDB。

这将创建一个与 OriginalDB 完全相同的 NewDB。

相关内容