SQL Server檢查未釋放游標的辦法。本站提示廣大學習愛好者:(SQL Server檢查未釋放游標的辦法)文章只能為提供參考,不一定能成為您想要的結果。以下是SQL Server檢查未釋放游標的辦法正文
一向以來對SQL SERVER的游標都不怎樣傷風,也很少應用SQL Server外面的游標,頭幾天有一名網友問若何檢討數據庫外面沒有釋放的游標,認為有點意思,就測實驗證了一下,趁便整頓於此。
會話1:我們模仿一個運用法式或劇本,在翻開游標後,忘卻封閉、釋放游標。
DECLARE Cursor_Test CURSOR FORSELECT * FROM dbo.TEST;OPEN Cursor_Test;
此時假如我們若何檢討數據庫外面沒有釋放的游標?其實SQL SERVER供給了一個靜態治理函數sys.dm_exec_cursors,它前往有關在各類數據庫中翻開的游標的信息。
SELECT * FROM sys.dm_exec_cursors(0)
關於該靜態治理函數前往的表的各個字段的說明,可以參考MSDN文檔。分歧數據庫版有所差別。假如要查詢沒有封閉的游標,則須要對字段is_open停止過濾(指定游標能否處於翻開狀況。1為翻開,0表現封閉)
會話2:檢查沒有封閉的游標
SELECT session_id , cursor_id , name , creation_time , is_openFROM sys.dm_exec_cursors(0)WHERE is_open = 1;
假如想檢查曾經封閉,然則沒有釋放的游標,可以在會話1履行封閉游標敕令CLOSE Cursor_Test;然則不釋放游標,以下截圖所示
別的,可以用上面SQL檢查辦事器上翻開時光跨越指准時間(1 小時)的游標的信息,依據須要自行調劑查詢前提。
SELECT creation_time ,cursor_id ,name ,c.session_id ,login_name ,c.creation_time ,c.is_openFROM sys.dm_exec_cursors (0) AS c JOIN sys.dm_exec_sessions AS s ON c.session_id = s.session_idWHERE DATEDIFF(hh, c.creation_time, GETDATE()) > 1;GO
以上所述是小編給年夜家引見的SQL Server檢查未釋放游標的辦法,願望對年夜家有所贊助!