MSSQL數據庫設置單用戶模式后無法連上解決辦法


設置數據庫單用戶模式后, 發現用系統管理員賬號無法連接數據庫, 用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之后再做其它操作.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM