Databases InterBase (29) MS-SQL (5) mysql (37) Oracle (1)
Exchange Links About this site Links to us 
|
How can I simulate a deadlock for testing purposes?
This article has not been rated yet. After reading, feel free to leave comments and rate it.
Question: How can I simulate a deadlock for testing purposes?
Answer: Below is a quick recipe for a dead lock. Two transactions, one first updating table 1, then 2 and the other one doing it in reverse order.
Both transactions wait in the middle for 20 seconds to give you some time to execute them 'simulaneously'.
When you run the two in transactions in two windows 'at the same time', you'll only have to wait ~20 seconds, and one of the windows will experience a dead lock.
 | |  | | CREATE TABLE t1 (i int);
CREATE TABLE t2 (i int);
INSERT t1 SELECT 1;
INSERT t2 SELECT 9;
/* in one window enter: */
BEGIN TRAN
UPDATE t1 SET i = 11 WHERE i = 1
WAITFOR DELAY '00:00:20'
UPDATE t2 SET i = 99 WHERE i = 9
COMMIT
/* in a second window (another transaction) enter: */
BEGIN TRAN
UPDATE t2 SET i = 99 WHERE i = 9
WAITFOR DELAY '00:00:20'
UPDATE t1 SET i = 11 WHERE i = 1
COMMIT | |  | |  |
Comments:
|
anonymous from Iran
|
|
|
|
thanks for your advices,i should try it,then i say my poinion.
|
2009-12-08, 00:14:19 (updated: 2009-12-08, 00:15:08) |
anonymous from India
|
|
|
Throwing a Deadlock exception from a C++ code
throw (SAException((SAErrorClass_t)2,1205,1205,(SAString)'Deadlock')); |
|
|