Je teste mon application J'ai besoin d'un code qui stable simule le blocage sur le site de la base de données (script sql si possible).
Je vous remercie.
AJOUTÉ:
La meilleure façon serait d'utiliser les tables que vous possédez déjà. Créer deux tables - table-a, table-b Pour un test, vous pouvez même mettre à jour la même colonne avec les mêmes informations afin de ne pas affecter de données réelles.
Par exemple UPDATE table_a set ID = ID where ID = 100;
Ouvrez deux sessions sur la même base de données. Sur un, exécutez
BEGIN TRAN
update table_a set ID=ID where ID = 100;
Sur deux pistes
BEGIN TRAN
update table_b set ID=ID where ID =100;
Ensuite, copiez les instructions de mise à jour dans les sessions opposées et exécutez en même temps. Dans une,
update table_b set ID=ID where ID =100;
En deux
update table_a set ID=ID where ID = 100;
Je viens de l'essayer maintenant et j'ai utilisé MS-SQL
Msg 1205, Level 13, State 56, Line 1
Transaction (Process ID 23) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction.
Utilisez le sp_getapplock
procédure stockée système pour prendre les verrous dont vous avez besoin sur votre exemple de code.
À strictement parler, il s'agit d'un sémaphore Dijkstra . Toujours sacrément utile
Voici une autre méthode similaire à celle publiée ci-dessus ->
CREATE TABLE Tbl1 (id INT NOT NULL PRIMARY KEY CLUSTERED, col INT)
CREATE TABLE Tbl2 (id INT NOT NULL PRIMARY KEY CLUSTERED, col INT REFERENCES dbo.Tbl1(id))
Script à utiliser dans la fenêtre de requête # 1
BEGIN TRAN
INSERT dbo.Tbl1 (id, col) VALUES (2, 999)
Script à utiliser dans la fenêtre de requête # 2
BEGIN TRAN
INSERT dbo.Tbl2 (id, col) VALUES (111, 2)
Script à ajouter à la fenêtre de requête # 1
INSERT dbo.Tbl2 (id, col) VALUES (111, 555)
Pour plus de détails à ce sujet, reportez-vous à http://ajitananthram.wordpress.com/2014/02/23/scripts-to-force-a-deadlock-in-sql-server/