web-dev-qa-db-fra.com

Code pour simuler un blocage

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É:

Reproduction des blocages impliquant une seule table

25
garik

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.
29
David Hall

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

7
mrdenny

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/

2
Ajit Ananthram