SqlServer表死锁的解决方法

前些天写一个存储过程,存储过程中使用了事务,后来我把一些代码注释掉来进行调试找错,突然发现一张表被锁住了,原来是创建事务的代码忘记注释掉。本文表锁住了的解决方法。
还有很多种场景会使表放生死锁,解锁其实很简单,下面用一个示例来讲解:

1 首先创建一个测试用的表:

CREATE TABLE Test
(
TID INT
IDENTITY(1,1)
)

2 执行下面的SQL语句将此表锁住:

SELECT * FROM Test WITH (TABLOCKX)

3 通过下面的语句可以查看当前库中有哪些表是发生死锁的:
SELECT request_session_id
spid,OBJECT_NAME(resource_associated_entity_id)tableName
FROM
sys.dm_tran_locks
WHERE resource_type='OBJECT '

4 上面语句执行结果如下:


spid :被锁进程ID。
tableName:发生死锁的表名。

5 只需要使用kill关键字来杀掉被锁的进程ID就可以对表进行解锁:

时间: 2024-09-20 15:07:07

SqlServer表死锁的解决方法的相关文章

SqlServer表死锁的解决方法分享_MsSql

其实不光是上面描述的情况会锁住表,还有很多种场景会使表放生死锁,解锁其实很简单,下面用一个示例来讲解: 1 首先创建一个测试用的表: 复制代码 代码如下: CREATE TABLE Test ( TID INT IDENTITY(1,1) ) 2 执行下面的SQL语句将此表锁住: 复制代码 代码如下: SELECT * FROM Test WITH (TABLOCKX) 3 通过下面的语句可以查看当前库中有哪些表是发生死锁的: 复制代码 代码如下: SELECT request_session_

SqlServer表死锁的解决方法分享

其实不光是上面描述的情况会锁住表,还有很多种场景会使表放生死锁,解锁其实很简单,下面用一个示例来讲解: 1 首先创建一个测试用的表: 复制代码 代码如下: CREATE TABLE Test ( TID INT IDENTITY(1,1) ) 2 执行下面的SQL语句将此表锁住: 复制代码 代码如下: SELECT * FROM Test WITH (TABLOCKX) 3 通过下面的语句可以查看当前库中有哪些表是发生死锁的: 复制代码 代码如下: SELECT request_session_

MYSQL锁表问题的解决方法_Mysql

本文实例讲述了MYSQL锁表问题的解决方法.分享给大家供大家参考,具体如下: 很多时候!一不小心就锁表!这里讲解决锁表终极方法! 案例一 mysql>show processlist; 参看sql语句 一般少的话 mysql>kill thread_id; 就可以解决了 kill掉第一个锁表的进程, 依然没有改善. 既然不改善, 咱们就想办法将所有锁表的进程kill掉吧, 简单的脚本如下. #!/bin/bash mysql - u root - e " show processli

sqlserver进程死锁关闭的方法_MsSql

1.首先我们需要判断是哪个用户锁住了哪张表. --查询被锁表 select request_session_id spid,OBJECT_NAME(resource_associated_entity_id) tableName from sys.dm_tran_locks where resource_type='OBJECT' 查询后会返回一个包含spid和tableName列的表. 其中spid是进程名,tableName是表名. 2.了解到了究竟是哪个进程锁了哪张表后,需要通过进程找到锁

sqlserver进程死锁关闭的方法

1.首先我们需要判断是哪个用户锁住了哪张表. --查询被锁表 select request_session_id spid,OBJECT_NAME(resource_associated_entity_id) tableName from sys.dm_tran_locks where resource_type='OBJECT' 查询后会返回一个包含spid和tableName列的表. 其中spid是进程名,tableName是表名. 2.了解到了究竟是哪个进程锁了哪张表后,需要通过进程找到锁

Oracle数据表中的死锁情况解决方法_oracle

在进行数据库管理的过程中,经常会出现数据表被用户的一些不合理操作而导致表被锁定的情况,以下主要介绍如何查找哪些表被哪个用户所锁定,以及如何解除锁定: 1.查找被锁定的表: select object_name,session_id,os_user_name,oracle_username,process,locked_mode,status from v$locked_object l, all_objects a where l.object_id=a.object_id; 如果想知道具体是哪

win2008 r2 安装sqlserver 2000问题的解决方法_win服务器

windows 2008 R2 64 系统安装SQL2000 32位数据库 安装成功关键: 1.点击安装,提示兼容问题,然后没有然后了··· 没有反应了 解决方法:直接运行 光盘\Microsoft SQL Server 2000 四合一\ENTERPRISE\X86\SETUP\SETUPSQL.EXE 选择\ENTERPRISE\X86\SETUP\setupsql.exe 属于-兼容模式(勾选兼容性windows 2003 SP1,管理员),4合1的版本,找到需安装版本下setupsql.

快速掌握查看数据库表死锁的实用方法

问:如何查看数据库的表死锁? 答:具体方法如下: 1,打开监控窗口 db2 update monitor switches using lock on 2.运行程序一段时间后 db2 get snapshot for locks on 数据库名称 至此,即可查看到当前所有连接到该数据库的应用程序句柄和每一个连接下锁定的情况.

SQLServer 连接异常与解决方法小结_MsSql

一:[MICROSOFT][ODBC SQL SERVER DRIVER][SQL SERVER]用户'(null)'登陆失败,未与信任SQL SERVER连接相关联处理 原因是由于SQL Server使用了"仅 Windows"的身份验证方式, 因此用户无法使用SQL Server的登录帐户(如 sa )进行连接 (方法一)改成:Windows"的身份验证方式 二.SQL Server不存在或访问被拒绝 一般情况下,有几种可能性: 1.SQL Server名称或IP地址拼写