如何故意造成僵局



所以我试图追踪这里的死锁问题。我使用DBCC TRACEON(1222,-1)和DBCC TRACEON(1204,-1)启用了死锁日志记录。我想测试,以确保日志捕获死锁,所以我怎么能导致一个发生在MS SQL 2005?谢谢你,

下面是一些故意导致死锁的T-SQL。

创建对象:

CREATE TABLE dbo.DeadLockTest (col1 INT)
INSERT dbo.DeadLockTest SELECT 1
CREATE TABLE dbo.DeadLockTest2 (col1 INT)
INSERT dbo.DeadLockTest2 SELECT 1

打开一个新的查询窗口,粘贴以下代码并执行:

BEGIN TRAN
UPDATE dbo.DeadLockTest SET col1 = 1

打开另一个新的查询窗口,粘贴并执行以下代码:

BEGIN TRAN
UPDATE dbo.DeadLockTest2 SET col1 = 1
UPDATE dbo.DeadLockTest SET col1 = 1

返回到第一个查询窗口(使用第一个BEGIN TRAN语句)并执行以下代码:

UPDATE dbo.DeadLockTest2 SET col1 = 1

瞧!这是死锁

应该可以:




  • 在第一个事务中更新记录A,在第二个事务中更新记录B。
  • 当你确定这些更新已经完成时:
    • 在第一个事务中更新记录B,在第二个事务中更新记录A。

最新更新