Sql-Server

需要幫助尋找 sys.sysprocesses 的替代品

  • October 15, 2018

SQL 2016 數據遷移助手(升級顧問)說我需要停止使用舊的系統表引用。也就是說,它希望我停止使用 sysdatabases 和 sysprocesses。

我有一些程式碼根據來自 sysprocesses 的數據記錄會話資訊。該日誌中包含 spid (session_id) 的數據庫 ID。

我一直在網上搜尋,發現只有兩個可能的替代品,由於下面解釋的原因,這兩個都不能完全工作。

選項 1 (sys.dm_tran_locks) - 如果我連結回 sys.dm_exec_sessions,此選項似乎工作得相當可靠,但我注意到如果 session_id 的數據庫上下文是 master 或 tempdb,它永遠不會返回結果。這意味著我將無法可靠地獲取使用 master 或 tempdb 的任何 session_id 的 resource_database_id。我也不能只是假設它,因為至少有兩種可能的上下文可供選擇。

選項 2 (sys.dm_exec_requests) - 此選項僅適用於正在執行的 session_id。空閒/暫停的 session_id 不會出現在列表中。

如果我無法獲得已掛起和/或正在使用主數據庫上下文的 session_id 的 dbid,那麼我的日誌中就會出現空白。

有沒有其他方法可以在不使用 sys.sysprocesses 的情況下可靠地獲取此資訊?

不幸的是,微軟意識到缺乏替代品。您可以投票並觀看這些 Connect 項目以獲取更多詳細資訊:

sysprocesses 的棄用 - DMV 並未完全替換所有列 - Tony Rogerson SQL

master.dbo.sysprocesses 沒有真正的替代品 - GV1973

將系統表映射到系統視圖: https ://msdn.microsoft.com/en-us/library/ms187997.aspx

sys.dm_exec_sessions 和 sys.dm_exec_requests 的組合可能包含您需要的大部分內容。

如果您發布查詢,我們應該能夠幫助您編寫符合 SQL2016 的版本。

引用自:https://dba.stackexchange.com/questions/163625