MSSQL的表锁

时间:2023-03-09 07:48:56
MSSQL的表锁
DECLARE @PlanId INT;
BEGIN TRAN;
INSERT INTO TbName(col,col2) VALUES  ('sss','2016/11/8 18:25:12');
SET @PlanId= @@IDENTITY;
   BEGIN ROLLBACK TRAN;
GOTO EndTran;END;

BEGIN TRAN; -- 这儿新开了一个事务,上一个事务还没有提交,导致表被锁
    );
           BEGIN ROLLBACK TRAN;    GOTO EndTran;  END; 
EndTran:
BEGIN

   BEGIN COMMIT TRAN;  SELECT @PlanId;END
ELSE
   ;END
END

执行命令查看被锁的信息,

dbcc OPENTRAN --需要特定权限的账户才能执行

 获知进程ID:

数据库 '数据库名字' 的事务信息。

最早的活动事务:
    SPID (服务器进程 ID):
    UID (用户 ID):
    名称          : user_transaction
    LSN           : (::)
    开始时间    :      :::717AM
    SID           : 0x01
DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。

解决方法:

“当资源被锁定, 无法被访问时, 可以终止访问DB的那个session来达到解锁的目的(即 Kill掉造成锁的那个进程).”

KILL 59 --服务器进程 ID

参考文章:

SQL Server中的事务与锁 - 张龙豪 - 博客园
http://www.cnblogs.com/knowledgesea/p/3714417.html

SQL Server数据库表锁定原理以及如何解除表的锁定_知识库_博客园
http://kb.cnblogs.com/page/77283/

SqlServer表死锁的解决方法 | 冯威的个人博客
http://fwhyy.com/2011/08/essentially-a-table-of-deadlock-solution/