程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> 其他數據庫知識 >> MSSQL >> SQL Server檢查未釋放游標的辦法

SQL Server檢查未釋放游標的辦法

編輯:MSSQL

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檢查未釋放游標的辦法,願望對年夜家有所贊助!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved