2011-10-18 30 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文字列このコードを実行してください:

UPDATE dbo.DeadLockTest2 SET col1 = 1 

Voila!それはデッドロックです。

5

これは動作するはずです:

  • 挿入二つのレコード、AとB
  • オープン2つの取引を。
  • 最初のトランザクションでレコードAを更新し、2番目のトランザクションでBを更新します。 2番目のトランザクションの最初の取引とAで
    • 更新レコードBを:あなたは、それらの更新が行われて確実に知る
関連する問題