如何故意造成僵局?

Nul*_*nce 14 sql-server performance sql-server-2005

所以我想追查什么样子了死锁问题在这里.我使用DBCC TRACEON(1222,-1)和DBCC TRACEON(1204,-1)启用了死锁记录.我想测试以确保日志记录捕获死锁,那么我怎样才能在MS SQL 2005中发生这种情况?谢谢,

小智 36

这是一些故意造成死锁的T-SQL.

对象创建:

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

CREATE TABLE dbo.DeadLockTest2 (col1 INT)
INSERT dbo.DeadLockTest2 SELECT 1
Run Code Online (Sandbox Code Playgroud)

打开一个新的查询窗口并粘贴此代码并执行它:

BEGIN TRAN
UPDATE dbo.DeadLockTest SET col1 = 1
Run Code Online (Sandbox Code Playgroud)

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

BEGIN TRAN
UPDATE dbo.DeadLockTest2 SET col1 = 1
UPDATE dbo.DeadLockTest SET col1 = 1
Run Code Online (Sandbox Code Playgroud)

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

UPDATE dbo.DeadLockTest2 SET col1 = 1
Run Code Online (Sandbox Code Playgroud)

瞧!那是一个僵局.


Gol*_*rol 5

这应该工作:

  • 插入两条记录,A和B.
  • 打开两个交易.
  • 更新第一个事务中的记录A和第二个事务中的B.
  • 当您确定已完成这些更新时:
    • 更新第一个事务中的记录B和第二个事务中的A.