使用存储过程模拟死锁

时间:2011-08-08 09:48:15

标签: sql stored-procedures deadlock sybase

有没有人知道如何使用存储过程插入或更新值来模拟死锁?我只能使用单独的命令在sybase中这样做。

谢谢, 版本

3 个答案:

答案 0 :(得分:3)

创建两个存储过程。

第一个应该启动一个事务,修改表1(并花很长时间),然后修改表2。

第二个应该启动一个事务,修改表2(并花很长时间),然后修改表1。


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


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

答案 1 :(得分:0)

启动一个过程,使用带循环的while循环连续插入或更新表,然后运行所需的应用程序>

答案 2 :(得分: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

这将导致死锁。您可以从分析器中看到死锁图。