我们尝试恢复数据库,但由于某种原因失败了。现在它卡在单用户模式。以下是我尝试的:
select d.name, d.dbid, spid, login_time, nt_domain, nt_username, loginame
from sysprocesses p inner join sysdatabases d on p.dbid = d.dbid
where d.name = 'mydb'
它返回了一个结果,我使用 终止了它kill 77
。我从某处读到,您还应该终止 id 加一,以便更好地衡量,因此我们也运行了kill 78
。此时,再次运行查询返回 0 个连接。
我已经尝试过所有这些:
exec sp_dboption 'mydb', 'single user', 'FALSE';
SET DEADLOCK_PRIORITY HIGH
exec sp_dboption 'mydb', 'single user', 'FALSE';
ALTER DATABASE [mydb] SET MULTI_USER WITH NO_WAIT
ALTER DATABASE [mydb] SET MULTI_USER WITH ROLLBACK IMMEDIATE
他们都给了我
消息 5064,级别 16,状态 1,第 1 行
此时无法更改数据库“mydb”的状态或选项。该数据库处于单用户模式,当前有用户连接到该数据库。
我意识到我可能可以通过重新启动 SQL 服务或重新启动服务器来解决问题。但是,这是一台生产服务器,所以我宁愿避免这样做。
有什么建议么?
答案1
快速查看 SPID
USE master
EXEC sp_who
从那里找出数据库并杀死相应的锁。
从单用户模式切换到多用户模式
更改数据库'数据库名称'设置 MULTI_USER 并立即回滚