設置數據庫單用戶模式后, 發現用系統管理員賬號無法連接數據庫, 用sa賬號也不行.
首先, 馬上去查了一下有什么進程比這個連接給占用了
SELECT [Spid] = session_Id , ecid , [Database] = DB_NAME(sp.dbid) , [User] = nt_username , [Status] = er.status , [Wait] = wait_type , [Individual Query] = SUBSTRING (qt.text, er.statement_start_offset/2, (CASE WHEN er.statement_end_offset = -1 THEN LEN(CONVERT(NVARCHAR(MAX), qt.text)) * 2 ELSE er.statement_end_offset END - er.statement_start_offset)/2) ,[Parent Query] = qt.text , Program = program_name , Hostname , nt_domain , start_time FROM sys.dm_exec_requests er INNER JOIN sys.sysprocesses sp ON er.session_id = sp.spid CROSS APPLY sys.dm_exec_sql_text(er.sql_handle)as qt WHERE session_Id > 50 -- Ignore system spids. AND session_Id NOT IN (@@SPID) -- Ignore this current statement. ORDER BY 1, 2
但查不到有任何用戶進程正在進行, 於是又單獨查詢系統進程
select * from sys.sysprocesses where dbid=DB_ID('DBName')
看到有3~5個系統進程在不斷運行, 用戶是sa, program_name 是 task manager
第一反應先把MSSQL的代理給關閉掉, 然而並沒有任何作用.
然后再官網中找到這么一段東西, 設置數據庫為單用戶模式前必須先檢查選項AUTO_UPDATE_STATISTICS_ASYNC 是否關閉...

現在連接被這個后台進程自動占用了, 只能想辦法把進程關掉, 再把數據庫切換回多用戶模式重新操作
辦法是把數據庫設置為離線再重新設置為上線並切換多用戶模式, 設置前需把DEADLOCK_PRIORITY設置為HIGH, 不然命令可能不成功
代碼如下:
SET DEADLOCK_PRIORITY HIGH ALTER DATABASE [DBName] SET OFFLINE WITH ROLLBACK IMMEDIATE SET DEADLOCK_PRIORITY HIGH ALTER DATABASE [DBName] SET ONLINE WITH ROLLBACK IMMEDIATE SET DEADLOCK_PRIORITY HIGH ALTER DATABASE [DBName] SET MULTI_USER WITH ROLLBACK IMMEDIATE
務必三段放在一起執行, 執行后數據庫返回到多用戶模式, 重新設置AUTO_UPDATE_STATISTICS_ASYNC OFF之后再做其它操作.
