【问题标题】:Exclusive access could not be obtained because the database is in use - but the database is deleted无法获得独占访问权限,因为数据库正在使用中 - 但数据库已被删除
【发布时间】:2018-02-27 18:43:37
【问题描述】:

即使删除数据库,是否有人遇到此错误?我删除了数据库并在删除之前选中了“关闭现有连接”框。

我有一个 Live db 和一个 Test Db。我已经备份了Live。当我尝试将 Live.bak 恢复到名为 Test 的数据库时,我收到了独占访问错误。我需要通过 Test 复制 Live db。

有趣的是,如果需要,我可以恢复 Test 的备份。

【问题讨论】:

  • 您能分享您的恢复声明吗?您是否包含了 MOVE 子句,以免试图覆盖现有的 Live 文件?
  • 我只是在使用 GUI。我有一个 Live.bak,我将它恢复到测试。据我所知,我没有覆盖 Live db 中的任何内容。
  • 如果您不更改数据和日志文件的文件路径,那么它们仍可能指向实时文件的位置(即使您已更改数据库名称),您可以检查这在还原 GUI 的“文件”选项卡上,或通过编写还原语句脚本并检查 MOVE 子句。
  • 谢谢!通过编写脚本,我发现我试图在恢复之前备份实时日志,这导致了失败:) 我未选中尾日志备份,它工作了
  • 哈,是的,那也行。编写脚本总是一个好主意,这样您就可以准确地检查 GUI 认为它在做什么。

标签: sql sql-server sql-server-2016


【解决方案1】:

在删除之前关闭现有连接总是更好

ALTER DATABASE MyDB
SET SINGLE_USER
WITH ROLLBACK IMMEDIATE;

用相同的名称重新附加它并重命名数据库。或者使用norecovery恢复

RESTORE DATABASE TEST FROM DISK = 'C:\Live.BAK' WITH NORECOVERY
RESTORE LOG TEST FROM DISK = 'C:\LIVELOG.trn'

-- 移动文件位置

WITH MOVE 'MDFLogicalName' TO 'C:\test.mdf',
MOVE 'LDFLogicalname' TO 'D:\Test.ldf'

【讨论】:

  • 谢谢。看到您的陈述帮助我意识到我正在尝试在 Live db 上执行日志备份。这就是失败的原因:)
  • :) 无论如何,如果您需要按照@GarethLyons 的建议移动 mdf 和 ldf 文件名,我已经添加了 Move 命令
  • 我建议最后将其改回 SET MULTI_USER。
猜你喜欢
  • 2011-05-02
  • 2014-04-08
  • 2020-05-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-20
  • 1970-01-01
相关资源
最近更新 更多