SQL Server中怎么查看未释放游标

53次阅读
没有评论

共计 966 个字符,预计需要花费 3 分钟才能阅读完成。

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 中怎么查看未释放游标问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注丸趣 TV 行业资讯频道了解更多相关知识。

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-03发表,共计966字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)