将MSSQL数据库备份还原到新数据库

时间:2013-04-26 12:50:32

标签: sql-server backup restore

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

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"

它适用于相同的数据库名称。 但是,如果我备份数据库'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'.
....

3 个答案:

答案 0 :(得分:2)

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

this MSDN article,例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;

答案 1 :(得分:1)

您还可以使用SSMS避免这个难题。在“选项”选项卡下,在为恢复选择了源之后,将数据和日志文件指向要覆盖的文件,或将它们指向您需要的目录并对其进行适当命名。

答案 2 :(得分:0)

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