SQL作业代理数据库还原失败,错误#6107:只能杀死用户进程

Hot*_*ger 3 sql-server database-restore single-user

我们有一个SQL作业代理,它在"凌晨"运行,从生产备份中恢复本地数据库(FooData).

首先,数据库设置为SINGLE_USER模式,任何打开的进程都将被终止.其次,恢复数据库.

但第3步偶尔会失败,错误6107:"只有用户进程才能被杀死"

这种情况在看似随机的时间间隔内每周发生一次或两次.以下是偶尔发生故障的步骤3的代码:

USE master;
go
exec msdb.dbo.KillSpids FooData;
go
ALTER DATABASE FooData SET MULTI_USER;
go
Run Code Online (Sandbox Code Playgroud)

有没有人有任何想法可能导致此错误?我想在步骤3中可能会启动一些自动化过程,或者某些用户可能在此期间尝试登录?我不是DBA,所以我猜这一点,虽然我认为用户不应该在DB处于SINGLE_USER模式时登录.

Bac*_*its 5

用户可能尚未登录.系统可能正在执行某项任务.输出exec sp_whosp_who2将显示哪些会话是打开的.任何低于50的SPID都是系统进程,不能被杀死KILL.阻止它们的唯一方法是停止SQL Server服务或发出SHUTDOWN命令(它做同样的事情).