2011-10-18 48 views
10

Vì vậy, tôi đang cố gắng theo dõi những gì trông giống như một vấn đề bế tắc here. Tôi đã cho phép đăng nhập bế tắc bằng DBCC TRACEON (1222, -1) và DBCC TRACEON (1204, -1). Tôi muốn kiểm tra để đảm bảo việc ghi nhật ký nắm bắt bế tắc, vậy làm thế nào tôi có thể gây ra lỗi xảy ra trong MS SQL 2005? Cảm ơn,Làm thế nào để cố ý gây ra bế tắc?

+0

Nếu sự cố trong bài đăng khác của bạn là deadlocks thay vì chặn bạn sẽ nhận được lỗi bế tắc thay vì lỗi hết thời gian chờ. –

Trả lời

30

Đây là một số T-SQL cố ý gây bế tắc.

tạo Object:

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

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

Mở ra một cửa sổ truy vấn mới và dán đoạn mã này và thực hiện nó:

BEGIN TRAN 
UPDATE dbo.DeadLockTest SET col1 = 1 

Mở một cửa sổ truy vấn mới và dán và thực thi mã này:

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

Quay lại cửa sổ truy vấn đầu tiên của bạn (với số BEGIN TRAN sta đầu tiên tement) và thực thi mã này:

Thì đấy! Đó là một bế tắc.

5

này nên làm việc:

  • Chèn hai kỷ lục, A và B.
  • mở hai giao dịch.
  • Bản ghi cập nhật A trong giao dịch đầu tiên và B trong giao dịch thứ hai.
  • Khi bạn biết chắc chắn những thông tin cập nhật được thực hiện:
    • Cập nhật kỷ lục B trong giao dịch đầu tiên và A trong giao dịch thứ hai.
Các vấn đề liên quan