我需要进行干净的数据库模板备份,然后生成一个具有其他名称但具有备份内容的新数据库。 备份脚本是:
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'.
....
答案 0 :(得分:2)
您需要为数据/日志文件指定新位置。
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)
如果您转到还原配置上的文件,请确保原始文件名与还原为不同,这应该可以解决您的问题。