0

我有一个 ELMAH 数据库,我想使用以下脚本进行还原:

RESTORE DATABASE [Elmah] 
FROM DISK = N'E:\Elmah_backup_2012_11_02_030003_1700702.bak' 
WITH FILE = 1,  
MOVE N'Elmah' TO N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\Elmah.mdf',  
MOVE N'Elmah_log' TO N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\Elmah.ldf',  
NOUNLOAD, STATS = 10
GO

即使我不包括WITH REPLACE每次执行此语句时,它都会恢复现有数据库。

在此操作之前,我将始终删除所有数据库,并且我不希望此代码在生产环境中意外恢复数据库。

如何更改此代码以使其永远不会覆盖现有数据库?

我实际上是通过 SMO 对象执行此操作,但原理和结果是相同的,因此我希望将其简化为仅必要的 TSQL,希望我可以将该信息概括为需要在适当的 SMO.Restore 上设置的内容目的。

4

1 回答 1

1

您需要 (a) 给恢复的数据库一个新的逻辑名称,并且 (b) 您需要定义新的物理文件名,这样现有的文件名就不会被覆盖。尝试这样的事情:

RESTORE DATABASE [Elmah_Restored]       <== new (and unique) logical database name
FROM DISK = N'E:\Elmah_backup_2012_11_02_030003_1700702.bak' 
WITH FILE = 1,  
MOVE N'Elmah' TO 
     N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\Elmah_restored.mdf',   <== new (and unique) physical file name
MOVE N'Elmah_log' TO 
     N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\Elmah_restored_log.ldf',   <== new (and unique) physical file name
NOUNLOAD, STATS = 10
GO
于 2012-11-02T17:57:06.460 回答