MsSql

关注公众号 jb51net

关闭
首页 > 数据库 > MsSql > SQL Server表被锁了

SQL Server表被锁了怎么办?快速查看和解锁的实用方法

作者:代码小侦探

你的SQL Server查询突然卡住不返回数据?可能是表被锁了,本文教你如何查看锁表的会话ID,并手工杀掉死锁进程,快速恢复访问,还会介绍WITH(NOLOCK)的用法和风险,帮你避免锁表问题

某些情况下,sqlserver的表会被锁住,比如某个会话窗口有数据一直没提交,窗口又没关闭,这时表就会被锁住

其他任何连接查询表数据时都不会返回

这时需要手工杀掉产生死锁的会话ID,才能恢复正常

一、查看表锁

select   request_session_id   spid,OBJECT_NAME(resource_associated_entity_id) tableName from sys.dm_tran_locks where resource_type='OBJECT'

假设查询执行时,系统中有两个会话分别在不同的表上持有对象锁,返回的结果可能如下所示:

在这个示例中:

二、解锁

declare @spid  int 
Set @spid  = 57 --锁表进程
declare @sql varchar(1000)
set @sql='kill '+cast(@spid  as varchar)
exec(@sql)

sql server在执行查询语句时会锁表。在锁表期间禁止增删改操作。

如果不想锁表,那就再表名或别名后面加上WITH(NOLOCK)(这种操作会出现脏的,慎用!)

如下所示:

SELECT Id FROM dbo.T_Table WITH(NOLOCK) WHERE Id = 1

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文