我有一个数据库 A。它里面有一些数据。我为 A 创建了一个备份,如下所示巴克文件。然后我创建一个新的空数据库 B。然后我尝试从巴克。但是 SQL Serve 告诉我以下错误:
无法覆盖文件“C:\SQL Directory\DATA\A.mdf”。它正被数据库“A”使用。
但是如果我从 SQL Server 中删除 A,恢复就可以了。
我不明白为什么 SQL 需要写入原来的数据库文件恢复时分开备份文件?
谢谢〜
答案1
如果您还原数据库,SQL Server 默认会尝试将所有数据和日志文件还原到其原始位置。由于原始数据库(“A”)仍在使用这些原始位置,因此还原会失败。您需要使用 WITH MOVE 子句为数据库中的所有文件指定新位置。
RESTORE DATABASE B FROM DISK = 'A.bak'
WITH MOVE 'DataFileLogicalName' TO 'C:\SQL Directory\DATA\B.mdf',
MOVE 'LogFileLogicalName' TO 'C:\SQL Directory\DATA\B.ldf',
REPLACE --Needed if database B already exists
无论如何都是这样的。如有必要,请使用 RESTORE FILELISTONLY FROM DISK... 查看备份中的逻辑文件名。
答案2
答案3
Options
如果有人在使用该页面并激活选项后在 Management Studio 的 GUI 中搜索解决方案Overwrite the existing database (WITH REPLACE)
:
只需单击该列并更改文件和文件Restore As
的文件名。*.mdf
*.ldf
答案4
您是否在 TSQL 命令中使用 REPLACE 选项,或者将其作为选中的复选框?或者,您可以重命名文件,并将数据库命名为其他名称。
您还会发现,在正在使用的数据库上进行恢复有点困难.....您需要终止使用数据库的进程;或者先删除数据库,关闭连接(这可能是最简单的);或者将您想要覆盖的数据库设置为类似带有立即回滚的受限用户模式,这样希望只有 DBA 可以使用;或者甚至停止 SQL Server,然后重新启动它 - 希望在任何人/任何东西使用该数据库之前完成恢复。
PS,请备份您要覆盖的数据库,以防万一。