需要幫助尋找 sys.sysprocesses 的替代品
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 項目以獲取更多詳細資訊:
將系統表映射到系統視圖: https ://msdn.microsoft.com/en-us/library/ms187997.aspx
sys.dm_exec_sessions 和 sys.dm_exec_requests 的組合可能包含您需要的大部分內容。
如果您發布查詢,我們應該能夠幫助您編寫符合 SQL2016 的版本。