Sql Server 2016 无法删除数据库(真的,真的,真的卡住了)

use*_*505 4 sql-server

我有一个参与镜像会话的数据库,有些东西严重崩溃,数据库卡在“恢复中”,不允许我删除它,因为它认为数据库正在使用中,尽管我看不到什么。

我运行它,但未列出受影响的数据库:

SELECT DB_NAME(dbid) as 'DBName'
     , loginame as 'Login'
     , COUNT(dbid) as 'Connections' 
FROM sys.sysprocesses 
WHERE dbid > 0 
GROUP BY dbid, loginame
Run Code Online (Sandbox Code Playgroud)

我也运行EXEC sp_who2,数据库也没有列出

我跑

ALTER database careplans set offline with ROLLBACK IMMEDIATE; DROP database careplans;

我收到错误消息“ALTER DATABASE 失败,因为无法在数据库‘careplans’上放置锁。稍后再试。”

这不会带来任何结果:

select * from sys.sysprocesses where dbid = DB_ID( 'careplans')
Run Code Online (Sandbox Code Playgroud)

这给了我“无法放置锁”错误:

ALTER DATABASE careplans
SET SINGLE_USER 
WITH ROLLBACK IMMEDIATE;
Run Code Online (Sandbox Code Playgroud)

这给了我“无法获得独占访问权限,因为数据库正在使用中”。错误:

RESTORE DATABASE CarePlans WITH RECOVERY
Run Code Online (Sandbox Code Playgroud)

以下任何一项都会给我“无法放置锁”错误:

ALTER DATABASE careplans SET  SINGLE_USER WITH NO_WAIT 
ALTER DATABASE careplans SET EMERGENCY; 
DBCC CHECKDB (careplans, REPAIR_ALLOW_DATA_LOSS) 
ALTER DATABASE careplans SET online; 
ALTER DATABASE careplans SET  Multi_USER WITH NO_WAIT
Run Code Online (Sandbox Code Playgroud)

我不知道我还能尝试什么......?

Grz*_*rzO 10

这个问题很难重现,所以我建议再尝试两个解决方案,但都需要重新启动 SQL Server:

  1. 以单用户模式启动 SQL Server(https://docs.microsoft.com/en-us/sql/database-engine/configure-windows/start-sql-server-in-single-user-mode)(只需添加 SQL服务器服务启动参数 -m 并重新启动服务)。然后使用 SQL CMD 使用本地管理员帐户连接到 SQL 实例,并尝试使用 DROP DATABASE 语句删除数据库。或许这一次您不会收到与独占访问获取相关的错误。

  2. 另一种方法(我知道非常原始!但它也可能有效!)是停止 SQL 服务并删除(或更改位置)数据库文件。然后,当您重新启动 SQL Server 时,该数据库应该处于“恢复挂起”状态,您应该能够将其删除。