SQL Server查看未釋放游標(biāo)的方法
一直以來(lái)對(duì)SQL SERVER的游標(biāo)都不怎么感冒,也很少使用SQL Server里面的游標(biāo),前幾天有一位網(wǎng)友問(wèn)如何檢查數(shù)據(jù)庫(kù)里面沒(méi)有釋放的游標(biāo),覺(jué)得有點(diǎn)意思,就測(cè)試驗(yàn)證了一下,順便整理于此。
會(huì)話1:我們模擬一個(gè)應(yīng)用程序或腳本,在打開(kāi)游標(biāo)后,忘記關(guān)閉、釋放游標(biāo)。
DECLARE Cursor_Test CURSOR FORSELECT * FROM dbo.TEST;OPEN Cursor_Test;
此時(shí)如果我們?nèi)绾螜z查數(shù)據(jù)庫(kù)里面沒(méi)有釋放的游標(biāo)?其實(shí)SQL SERVER提供了一個(gè)動(dòng)態(tài)管理函數(shù)sys.dm_exec_cursors,它返回有關(guān)在各種數(shù)據(jù)庫(kù)中打開(kāi)的游標(biāo)的信息。
SELECT * FROM sys.dm_exec_cursors(0)
關(guān)于該動(dòng)態(tài)管理函數(shù)返回的表的各個(gè)字段的解釋?zhuān)梢詤⒖糓SDN文檔。不同數(shù)據(jù)庫(kù)版有所區(qū)別。如果要查詢(xún)沒(méi)有關(guān)閉的游標(biāo),則需要對(duì)字段is_open進(jìn)行過(guò)濾(指定游標(biāo)是否處于打開(kāi)狀態(tài)。1為打開(kāi),0表示關(guān)閉)
會(huì)話2:查看沒(méi)有關(guān)閉的游標(biāo)
SELECT session_id , cursor_id , name , creation_time , is_openFROM sys.dm_exec_cursors(0)WHERE is_open = 1;
如果想查看已經(jīng)關(guān)閉,但是沒(méi)有釋放的游標(biāo),可以在會(huì)話1執(zhí)行關(guān)閉游標(biāo)命令CLOSE Cursor_Test;但是不釋放游標(biāo),如下截圖所示
另外,可以用下面SQL查看服務(wù)器上打開(kāi)時(shí)間超過(guò)指定時(shí)間(1 小時(shí))的游標(biāo)的信息,根據(jù)需要自行調(diào)整查詢(xún)條件。
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查看未釋放游標(biāo)的方法,希望對(duì)大家有所幫助!
- Sql Server臨時(shí)表和游標(biāo)的使用小結(jié)
- SQL Server使用游標(biāo)處理Tempdb究極競(jìng)爭(zhēng)-DBA問(wèn)題-程序員必知
- MS SQL Server游標(biāo)(CURSOR)的學(xué)習(xí)使用
- sqlserver游標(biāo)使用步驟示例(創(chuàng)建游標(biāo) 關(guān)閉游標(biāo))
- SQLServer用t-sql命令批量刪除數(shù)據(jù)庫(kù)中指定表(游標(biāo)循環(huán)刪除)
- SQL Server 游標(biāo)語(yǔ)句 聲明/打開(kāi)/循環(huán)實(shí)例
- SQL Server游標(biāo)的使用/關(guān)閉/釋放/優(yōu)化小結(jié)
- SQL Server遍歷表中記錄的2種方法(使用表變量和游標(biāo))
- sqlserver中觸發(fā)器+游標(biāo)操作實(shí)現(xiàn)
- SQL Server游標(biāo)的介紹與使用
相關(guān)文章
數(shù)據(jù)庫(kù)SQL中having和where的用法區(qū)別
這篇文章主要介紹了數(shù)據(jù)庫(kù)SQL中having和where的用法區(qū)別的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-11-11SQLSERVER數(shù)據(jù)備份文件的分割備份方法
這篇文章主要介紹了SQLSERVER數(shù)據(jù)備份文件的分割備份方法 ,需要的朋友可以參考下2014-12-12sql將一個(gè)表中的數(shù)據(jù)插入到另一個(gè)表中的方法
這篇文章主要介紹了sql將一個(gè)表中的數(shù)據(jù)插入到另一個(gè)表中的方法,需要的朋友可以參考下2014-03-03SQL Server 創(chuàng)建約束圖解(唯一 主鍵)
SQLServer中有五種約束,Primary Key約束、Foreign Key約束、Unique約束、Default約束和Check約束,今天使用SQL Server2008來(lái)演示下這幾種約束的創(chuàng)建和使用的方法2016-07-07SQL?Server中元數(shù)據(jù)函數(shù)的用法
這篇文章介紹了SQL?Server中元數(shù)據(jù)函數(shù)的用法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-05-05按日期選擇最晚日期與最早日期對(duì)應(yīng)的數(shù)的差值
想得到當(dāng)天的最早時(shí)間與最晚時(shí)間的number的差值,需要的朋友可以參考下。2009-11-11如何區(qū)分SQL數(shù)據(jù)庫(kù)中的主鍵與外鍵
這篇文章主要介紹了如何分清SQL數(shù)據(jù)庫(kù)中的主鍵與外鍵,這里簡(jiǎn)單介紹下,方便需要的朋友2013-06-06用SQL語(yǔ)句實(shí)現(xiàn)隨機(jī)查詢(xún)數(shù)據(jù)并不顯示錯(cuò)誤數(shù)據(jù)的方法
用SQL語(yǔ)句實(shí)現(xiàn)隨機(jī)查詢(xún)數(shù)據(jù)并不顯示錯(cuò)誤數(shù)據(jù)的方法...2007-11-11