我有一个参与镜像会话的数据库,有些东西严重崩溃,数据库卡在“恢复中”,不允许我删除它,因为它认为数据库正在使用中,尽管我看不到什么。
我运行它,但未列出受影响的数据库:
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:
以单用户模式启动 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 语句删除数据库。或许这一次您不会收到与独占访问获取相关的错误。
另一种方法(我知道非常原始!但它也可能有效!)是停止 SQL 服务并删除(或更改位置)数据库文件。然后,当您重新启动 SQL Server 时,该数据库应该处于“恢复挂起”状态,您应该能够将其删除。