2

我需要进行干净的数据库模板备份,然后使用另一个名称生成一个新的数据库,但具有备份的内容。备份脚本是:

sqlcmd -S %DB_HOST% -Q "BACKUP DATABASE %DB_NAME% TO DISK = '%BACKUP_FILE%'"

恢复脚本是:

sqlcmd -S %DB_HOST% -Q "RESTORE DATABASE %DB_NAME% FROM DISK = '%BACKUP_FILE%' WITH REPLACE"

它适用于相同的数据库名称。但是,如果我备份 DB 'ORIGINAL_DB_NAME' 然后将其恢复到 'NEW_DB_NAME' 它将引发异常:

Msg 1834, Level 16, State 1, Server <HOST>, Line 1
The file '.....\MSSQL\Data\ORIGINAL_DB_NAME.mdf' cannot be overwritten.  It is being used by database 'ORIGINAL_DB_NAME'.
....
4

3 回答 3

3

您需要为数据/日志文件指定一个新位置。

请参阅此 MSDN 文章,示例 D

RESTORE DATABASE AdventureWorks2012
FROM AdventureWorksBackups
   WITH NORECOVERY, 
      MOVE 'AdventureWorks2012_Data' TO 
'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Data\NewAdvWorks.mdf', 
      MOVE 'AdventureWorks2012_Log' 
TO 'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Data\NewAdvWorks.ldf';
RESTORE LOG AdventureWorks2012
   FROM AdventureWorksBackups
   WITH RECOVERY;
于 2013-04-26T12:53:45.730 回答
1

您还可以使用 SSMS 来避免这个难题。在选项选项卡下,选择还原源后,将数据和日志文件定向到要覆盖的文件,或将它们指向您需要的目录并适当命名。

于 2013-04-26T14:19:17.490 回答
1

如果您转到“还原配置”上的“文件”,请确保原始文件名与“还原为”不同,这应该可以解决您的问题。

于 2017-10-19T13:47:12.130 回答