Testuji svou aplikaci Potřebuji nějaký kód, který stabilní simuluje zablokování na databázovém serveru (pokud je to možné, skript sql).
Děkuju.
PŘIDANÉ:
Nejlepší způsob by bylo použít tabulky, které již máte. Vytvořte dvě tabulky - tabulka-a, tabulka-b Pro test můžete dokonce aktualizovat stejný sloupec se stejnými informacemi, abyste neovlivnili žádná reálná data.
Například UPDATE table_a set ID = ID kde ID = 100;
Otevřete dvě relace do stejné databáze. Na jednom běžte
BEGIN TRAN
update table_a set ID=ID where ID = 100;
Ve dvou jízdách
BEGIN TRAN
update table_b set ID=ID where ID =100;
Poté zkopírujte příkazy aktualizace na nepřátelské relace a spusťte je současně. V jednom,
update table_b set ID=ID where ID =100;
Ve dvě
update table_a set ID=ID where ID = 100;
Právě jsem to vyzkoušel a dostal se na 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.
Použijte sp_getapplock
systémová uložená procedura, která vezme to, co se kdy zamkne na ukázkovém kódu.
Přesně řečeno, jedná se o Dijkstra semafor . Stále sakra užitečné
Zde je další metoda podobná metodě uvedené výše ->
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))
Skript pro použití v okně dotazu č. 1
BEGIN TRAN
INSERT dbo.Tbl1 (id, col) VALUES (2, 999)
Skript pro použití v okně dotazu č. 2
BEGIN TRAN
INSERT dbo.Tbl2 (id, col) VALUES (111, 2)
Skript, který bude přidán do dotazovacího okna # 1
INSERT dbo.Tbl2 (id, col) VALUES (111, 555)
Další podrobnosti najdete v http://ajitananthram.wordpress.com/2014/02/23/scripts-to-force-a-deadlock-in-sql-server/