错误说,使用脚本还原数据库时,备份集保留了现有数据库以外的数据库备份

时间:2019-01-16 18:49:32

标签: sql sql-server database-administration

我正在编写一个脚本,以使用另一个数据库的.bak文件自动执行恢复一个数据库的过程。我收到错误消息:

  

备份集保存除现有数据库以外的数据库备份   “ add_BackupDev”数据库。

我在网上找到的答案似乎都具有一种解决方案,该解决方案涉及手动而不是通过脚本完成还原,这对我来说不是一个选择。

这是我的代码。变量@LastDatabaseRestore正在为我的.bak文件传递适当的文件路径。

RESTORE DATABASE add_BackupDev
FILE = N'FILENAME'
FROM DISK = @LastDatabaseRestore
WITH FILE = 1,
MOVE 'add_backupDev' TO 'R:\DATA\add_BackupDev.mdf',
MOVE 'add_BackupDev_log' TO 'L:\LOG\add_BackupDev.ldf',
NOUNLOAD,
REPLACE;
GO

1 个答案:

答案 0 :(得分:1)

评论太久

使用WITH REPLACE选项(如您所列出的)将用备份中包含的数据库覆盖数据库。在脚本中出现该错误的原因可能是因为您使用了FILE选项。

  

备份设备名称前面的FILE选项指定逻辑   要从数据库还原的数据库文件的文件名   备份集;例如FILE ='FILENAME'

出现错误的原因可能是因为备份集不是介质集中的第一个数据库备份。您需要在FILE子句中的WITH选项中添加正确的数字。

....
WITH FILE = 1,  --this may not need to be 1
....

如果不必显式指定文件名,则删除两个FILE选项。

RESTORE DATABASE add_BackupDev
FROM DISK = @LastDatabaseRestore
WITH
MOVE 'add_backupDev' TO 'R:\DATA\add_BackupDev.mdf',
MOVE 'add_BackupDev_log' TO 'L:\LOG\add_BackupDev.ldf',
NOUNLOAD,
REPLACE;
GO

那应该还原您的数据库。