如何永久修复此“数据库 AdventureWorks2014 还原失败”?

问题描述

当我尝试恢复 AdventureWorks2014 时,我得到了这个

'无法获得独占访问,因为数据库在 使用.(Microsoft.sqlServer.SmoExtended)'

当然没有打开查询窗口。我在其他数据库上没有这个问题。我发现 AdventureWorks2014 和其他数据库间的唯一区别是兼容级别,分别是 2014 和 2019。但这不是解决方案。我检查了 Microsoft 提供的错误消息链接,该链接将我带到了 Microsoft 主页。我在文档中找不到我要找的东西。因此,我通过将数据库设置为离线或选中“关闭与目标数据库的现有连接”选项来解决问题。它们都有效,但我想找到一个永久的解决方案。有吗?

解决方法

在 RESTOE 之前将数据库设置为 SINGLE_USER:

USE master
ALTER DATABASE AdventureWorks2014 SET SINGLE_USER WITH ROLLBACK IMMEDIATE
RESTORE AdventureWorks2014.....
,

有些东西阻止了您的数据库恢复。要找出什么,请在一个窗口中以 T-SQL 的形式发出恢复(即使您正在通过某种 UI,编写脚本以便您可以手动运行它)并记下该窗口的 SPID。如果您不知道在您选择的 UI 中的何处找到它(我的猜测是您正在使用 SSMS,但也许不是!),您可以发出 SELECT @@SPID 查询来找到它。在开始还原之前,打开另一个窗口/会话并准备好运行此查询:

select *
from sys.dm_os_waiting_tasks
where session_id = «spid from your restore session»;

开始恢复,然后运行上面的查询以查看阻塞的内容。