SQL Server查看未释放游标的方法_MsSql

一直以来对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查看未释放游标的方法,希望对大家有所帮助!

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索sqlserver游标
sql释放游标
mssql 强行释放的游标、oracle查看未释放游标、mssql 游标、mssql 游标循环、mssql 强行关闭游标,以便于您获取更多的相关知识。

时间: 2025-01-30 05:33:07

SQL Server查看未释放游标的方法_MsSql的相关文章

SQL Server查看未释放游标的方法

一直以来对SQL SERVER的游标都不怎么感冒,也很少使用SQL Server里面的游标,前几天有一位网友问如何检查数据库里面没有释放的游标,觉得有点意思,就测试验证了一下,顺便整理于此. 会话1:我们模拟一个应用程序或脚本,在打开游标后,忘记关闭.释放游标. DECLARE Cursor_Test CURSOR FORSELECT * FROM dbo.TEST;OPEN Cursor_Test; 此时如果我们如何检查数据库里面没有释放的游标?其实SQL SERVER提供了一个动态管理函数s

SQL Server使用row_number分页的实现方法_MsSql

本文为大家分享了SQL Server使用row_number分页的实现方法,供大家参考,具体内容如下 1.首先是 select ROW_NUMBER() over(order by id asc) as 'rowNumber', * from table1 生成带序号的集合 2.再查询该集合的 第 1  到第 5条数据 select * from (select ROW_NUMBER() over(order by id asc) as 'rowNumber', * from table1) a

获取SQL Server数据库元数据的几种方法_MsSql

元数据简介 元数据 (metadata) 最常见的定义为"有关数据的结构数据",或者再简单一点就是"关于数据的信息",日常生活中的图例.图书馆目录卡和名片等都可以看作是元数据.在关系型数据库管理系统 (DBMS) 中,元数据描述了数据的结构和意义.比如在管理.维护 SQL Server 或者是开发数据库应用程序的时候,我们经常要获取一些涉及到数据库架构的信息: ◆某个数据库中的表和视图的个数以及名称: ◆某个表或者视图中列的个数以及每一列的名称.数据类型.长度.精度

查询SQL Server Index上次Rebuild时间的方法_MsSql

朋友有一个Rebuild Index的Job执行一般停掉了,问我是否可以查看哪些Index已经被Rebuild过了.本来以为Sys.index或者Sys.objects会存储类似的信息,结果没有找到.   从网上查了一下,SQL Server没有存储类似的信息.但是因为Rebuild Index会自动更新统计信息,而统计信息的更新时间是可以获得的.所以我们可以大致根据统计信息的时间来估计. 因为统计信息的更新也有可能是达到更新的阀值所做的更新,所以不是非常的准确.   具体的脚本如下: SELE

远程连接局域网内的sql server 无法连接 错误与解决方法_MsSql

第一个错误"SQL Server 不存在或访问被拒绝"通常是最复杂的,错误发生的原因比较多,需要检查的方面也比较多 .一般说来,有以下几种可能性: 1.SQL Server名称或IP地址拼写有误: 2.服务器端网络配置有误: 3.客户端网络配置有误. 要解决这个问题,我们一般要遵循以下的步骤来一步步找出导致错误的原因. 首先,检查网络物理连接: ping <服务器IP地址> 或者 ping <服务器名称> 如果 ping <服务器IP地址> 失败,说

配置SQL Server数据库恢复模式(2种方法)_MsSql

下面主要介绍配置SQL Server数据库恢复模式的两种方法. 用T-SQL设置恢复模式你可以使用"ALTER DATABASE"命令加"SET RECOVERY"语句来修改数据库的恢复模式.例如,下面的查询语句把"AdventureWorks"数据库的恢复模式设置为完全恢复模式. ALTER DATABASE AdventureWorks SET RECOVERY FULL ; 你可以查询"sys.databases"的目录

使用SQL Server数据库嵌套子查询的方法_MsSql

很多SQL Server程序员对子查询(subqueries)的使用感到困惑,尤其对于嵌套子查询(即子查询中包含一个子查询).现在,就让我们追本溯源地探究这个问题.  有两种子查询类型:标准和相关.标准子查询执行一次,结果反馈给父查询.相关子查询每行执行一次,由父查询找回.在本文中,我将重点讨论嵌套子查询(nested subqueries)(我将在以后介绍相关子查询).  试想这个问题:你想生成一个卖平垫圈的销售人员列表.你需要的数据分散在四个表格中:人员.联系方式(Person.Contac

SQL Server 2005 还原数据库错误解决方法_MsSql

在还源数据库时出现以下错误(详情参见下图): System.Data.SqlClient.SqlError: 在对 'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\BusinessDB.mdf' 尝试 'RestoreContainer::ValidateTargetForCreation' 时,操作系统返回了错误 '5(拒绝访问.)'. (Microsoft.SqlServer.Express.Smo)     原因分析: 没有对"C:

sql server 2000 数据库自动备份设置方法_MsSql

1.打开MS SQL Server 企业管理器,SqlServer组 - 管理 - 数据库维护计划 - 右键新建维护计划 如下图: 下一步:选择需要备份的数据库 下一步: 继续下一步: 下一步:点击更改修改数据备份时间 下一步: 下一步: 下一步: 下一步: .在企业管理器中,找到管理 – SQL Server代理,如果它没有启动,红色方框而不是绿色三角,点击右键,选择启动. 小技巧:在SQL Server 服务管理器 – 服务选择 SQL Server Agent 启动,在"当启动OS时自动启