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/