SQL Server中查看未释放的游标
SQL Server中查看未释放的游标SQL SERVER提供了一个动态管理函数sys.dm_exec_cursors,返回有关在数据库中打开的游标的信息。
一、语法
dm_exec_cursors (session_id | 0 )
二、参数说明
session_id | 0:会话的 ID。
1、如果指定了 session_id,则此函数返回有关指定会话中游标的信息。
2、如果指定了 0,则此函数返回有关所有会话的所有游标的信息。
三、返回的字段名说明
|
|
|
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
四、查询没有关闭的游标
需要对字段is_open进行过滤(指定游标是否处于打开状态。1为打开,0表示关闭)
SELECT session_id ,
cursor_id ,
name ,
creation_time ,
is_open
FROM sys.dm_exec_cursors(0)
WHERE is_open = 1;
结果如图
五、已经关闭,但是没有释放的游标
SELECT session_id ,
cursor_id ,
name ,
creation_time ,
is_open
FROM sys.dm_exec_cursors(0)
WHERE is_open = 0;
六、查看服务器上打开时间超过指定时间(1 小时)的游标的信息
SELECT creation_time
,cursor_id
,name
,c.session_id
,login_name
,c.creation_time
,c.is_open
FROM sys.dm_exec_cursors (0) AS c
JOIN sys.dm_exec_sessions AS s ON c.session_id = s.session_id
WHERE DATEDIFF(hh, c.creation_time, GETDATE()) > 1;
GO