【问题标题】:Using scripts to restore database, error says backup set holds a backup of a database other than existing使用脚本恢复数据库,错误说备份集包含数据库的备份而不是现有的
【发布时间】:2019-01-16 18:49:31
【问题描述】:

我正在编写一个脚本来自动化使用另一个数据库的 .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

【问题讨论】:

    标签: sql sql-server database-administration


    【解决方案1】:

    评论太长了

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

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

    您收到错误的原因可能是备份集不是媒体集中的第一个数据库备份。您需要在WITH 子句中的FILE 选项中添加正确的数字。

    ....
    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
    

    这应该会恢复您的数据库。

    【讨论】:

    • 当我删除两个文件选项时,我在第一个 MOVE 选项下得到一个错误,说“语法不正确”。当我删除 FILE = N'FILENAME' 时,它告诉我它正在尝试替换创建 .bak 文件的数据库的 .mdf 和 .ldf 文件,这对我来说真的没有意义。
    • 对不起,我忘了加回WITH 子句。我刚刚修复了它,它现在应该可以工作了。是的,它会将它们替换为 .bak 中的那些,因为您使用的是REPLACE。最后的代码 sn-p 现在应该可以工作了。
    • 在为移动获取正确的文件名时遇到了一些麻烦,但现在可以了!谢谢!
    • 完全不用担心!请记住,您也可以在 MOVE 时使用 MOVE 重命名它们。
    猜你喜欢
    • 1970-01-01
    • 2012-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多