2011-08-08 21 views

回答

3

创建两个存储过程。

第一应该启动一个事务,修改表1(和需要较长的时间),然后修改表2.

第二应该启动一个事务,修改表2(和需要较长的时间),然后修改表1.


理想情况下,修改应该影响同一行,或创建表锁。


然后,在客户端应用程序,启动SP1,并立即然后也开始SP2(SP1已完成之前)。

0

启动一个进程,使用带脚本的while循环连续插入或更新表,并运行所需的sp。

0

得到死锁的简单和简短的答案将是以相反的顺序访问表数据,并因此在两个连接之间引入循环死锁。让我告诉你代码:

Create table vin_deadlock (id int, Name Varchar(30)) 
GO 

Insert into vin_deadlock values (1, 'Vinod') 
Insert into vin_deadlock values (2, 'Kumar') 
Insert into vin_deadlock values (3, 'Saravana') 
Insert into vin_deadlock values (4, 'Srinivas') 
Insert into vin_deadlock values (5, 'Sampath') 
Insert into vin_deadlock values (6, 'Manoj') 
GO 

现在准备好了表格。只需从两个连接中以相反的顺序更新列:

-- Connection 1 
Begin Tran 
Update vin_deadlock 
SET Name = 'Manoj' 
Where id = 6 
WAITFOR DELAY '00:00:10' 
Update vin_deadlock 
SET Name = 'Vinod' 
Where id = 1 
and from connection 2 

-- Connection 2 
Begin Tran 
Update vin_deadlock 
SET Name = 'Vinod' 
Where id = 1 
WAITFOR DELAY '00:00:10' 
Update vin_deadlock 
SET Name = 'Manoj' 
Where id = 6 

而这会导致死锁。你可以从profiler中看到死锁图。