“任务管理器”过程正在接管单用户模式的数据库。它是什么?


13

这是我对stackoverflow提出的问题的重复,但是我被告知,这里的某个人可能会对发生的事情有更好的了解。

我有一个零星的问题,当使用.NET SqlConnection在单用户模式下升级SQL Server时,某些其他应用程序在执行SQL代码时以某种方式登录到数据库中,并把我的过程踢了出去。SqlConnection不会以任何方式关闭或处置。但是某些其他应用程序最终以某种方式最终连接到数据库,这将我踢出连接。

运行sp_who时,我可以看到控制数据库的进程是Command =“ TASK MANAGER”。

任何人都可以告诉我这个过程是什么,它的目的是什么,以及它如何进入一个单用户模式且有活动连接的数据库?


您是否在此过程中关闭了SQL Agent?名为“ TASK MANAGER”(任务号低)的任务是内部过程。
乔恩·塞格尔

@JonSeigel不,我没有。您是说SQL Agent是运行TASK MANAGER的实际过程吗?
galets 2012年

我不确定100%。我所知道的是,SQL Agent在实例运行时会连接到该实例,这会阻止您在服务器处于单用户模式下登录。昨天我遇到了这个问题,并且停止SQL Agent修复了它。
乔恩·塞格尔

2
需要明确的是,这与Windows中用来查看进程和系统性能的任务管理器不同。
亚伦·伯特兰

Answers:


10

今天也遇到了同样的问题,如果您尚未关闭AUTO_UPDATE_STATISTICS ASYNC,则将无法输入数据库,可以通过使数据库脱机来解决此问题。要知道的重要一点是,您需要将死锁优先级设​​置为高,否则您将被死锁在命令之外。使用以下命令退出单用户模式

SET DEADLOCK_PRIORITY HIGH

ALTER DATABASE [YourDBName] SET OFFLINE WITH ROLLBACK IMMEDIATE

其次是

SET DEADLOCK_PRIORITY HIGH

ALTER DATABASE [YourDBName] SET ONLINE WITH ROLLBACK IMMEDIATE

其次是

SET DEADLOCK_PRIORITY HIGH

ALTER DATABASE [YourDBName] SET MULTI_USER WITH ROLLBACK IMMEDIATE

3
非常感谢你。但是我发现不需要OFFLINE / ONLINE步骤。在SET MULTIUSER WITH ROLLBACK IMMEDIATE通过自身只是工作时,SET DEADLOCK_PRIORITY HIGH第一次完成
罗斯压

6

我认为这个谜团终于解决了

在将数据库设置为SINGLE_USER之前,请验证AUTO_UPDATE_STATISTICS_ASYNC选项是否设置为OFF。设置为ON时,用于更新统计信息的后台线程将与数据库建立连接,并且您将无法以单用户模式访问数据库。


6

停止“ system_health”扩展事件跟踪。它将列在

SQL Server Management Studio
-> [ServerName]
-> Management
-> Extended Events
-> Right-Click on 'System_health'
-> Hit Stop Session

修复阻止程序后,重新启动会话。


尽管另一个答案解释了为什么会发生这种情况,但这个答案解释了如何解决它。
鲍里斯·卡伦斯

对我来说是完美的解决方案。它按预期方式工作
Im88 '18

0

您必须在开始单次使用模式之前“禁用” SQL Agent。由于代理权限将抢占单个用户访问权限。记住单个用户不是您第一个连接的用户/进程。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.