sqlServer数据库表无法查询,无法删除。“表发生死锁”。“已超过了锁请求超时时段。”

  • 如下图所示,对数据库表的操作查询和数据删除一直在运行中,无法返回结果。
  • 对表直接删除,发生:“已超过了锁请求超时时段。”
    sqlServer数据库表无法查询,无法删除。“表发生死锁”。“已超过了锁请求超时时段。”_第1张图片

分析解决

  • 查询进程和表被锁住情况
SELECT request_session_id spid,OBJECT_NAME
(resource_associated_entity_id)tableName 
FROM sys.dm_tran_locks 
WHERE resource_type='OBJECT';

参考来源dm_tran_locks

sqlServer数据库表无法查询,无法删除。“表发生死锁”。“已超过了锁请求超时时段。”_第2张图片

  • 杀死进程
exec ('Kill 80') 
  • 查询所有锁
exec sp_lock;
-- 查询指定进程的锁
exec sp_lock 55;

sqlServer数据库表无法查询,无法删除。“表发生死锁”。“已超过了锁请求超时时段。”_第3张图片
Type值(锁的类型):
RID = 表中单个行的锁,由行标识符 (RID) 标识。
KEY = 索引内保护可串行事务中一系列键的锁。
PAG = 数据页或索引页的锁。
EXT = 对某区的锁。
TAB = 整个表(包括所有数据和索引)的锁。
DB = 数据库的锁。
FIL = 数据库文件的锁。
APP = 指定的应用程序资源的锁。
MD = 元数据或目录信息的锁。
HBT = 堆或 B 树(HoBT)上的锁。 在 SQL Server 中此信息不完整。
AU = 分配单元的锁。 在 SQL Server 中此信息不完整。
参考来源sp_lock

声明:参考博客

锁表原因

  • 表不存在,往表中插入数据,报错导致意外中止,事务没有进行提交处理。
    sqlServer数据库表无法查询,无法删除。“表发生死锁”。“已超过了锁请求超时时段。”_第4张图片
    sqlServer数据库表无法查询,无法删除。“表发生死锁”。“已超过了锁请求超时时段。”_第5张图片

你可能感兴趣的:(SQL,sqlserver,表锁住,sp_lock,dm_tran_locks)