2011-10-18 39 views
10

所以我试图找出看起来像死锁问题​​here。我使用DBCC TRACEON(1222,-1)和DBCC TRACEON(1204,-1)启用了死锁记录。我想测试以确保日志记录捕捉到死锁,那么如何在MS SQL 2005中导致发生死锁?谢谢,如何故意造成死锁?

+0

如果你的其他文章中的问题是死锁而不是阻塞,你应该得到一个死锁错误而不是超时错误。 –

回答

30

下面是一些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 sta并执行以下代码:

UPDATE dbo.DeadLockTest2 SET col1 = 1 

Voila!这是一个僵局。

5

这应该工作:

  • 将两个记录,A和B.
  • 打开两笔交易。
  • 在第一个事务中更新记录A,在第二个事务中更新记录B.
  • 当你肯定知道这些更新完成后:
    • 更新记录B在第二交易的第一交易和A。