Sto verificando la mia domanda ho bisogno di un po 'di codice che stabile simula la situazione di stallo in loco di database (lo script SQL se possibile).
Grazie.
AGGIUNTO:
Sto verificando la mia domanda ho bisogno di un po 'di codice che stabile simula la situazione di stallo in loco di database (lo script SQL se possibile).
Grazie.
AGGIUNTO:
Risposte:
Il modo migliore sarebbe usare le tabelle che hai già. Crea due tabelle: tabella-a, tabella-b Per un test puoi persino aggiornare la stessa colonna con le stesse informazioni in modo da non influenzare alcun dato reale.
Ad esempio UPDATE table_a imposta ID = ID dove ID = 100;
Aprire due sessioni nello stesso database. Su uno, corri
BEGIN TRAN
update table_a set ID=ID where ID = 100;
In due manche
BEGIN TRAN
update table_b set ID=ID where ID =100;
Quindi, copia le istruzioni di aggiornamento nelle sessioni opposte ed esegui allo stesso tempo. In uno,
update table_b set ID=ID where ID =100;
In due
update table_a set ID=ID where ID = 100;
Ho appena provato questo ora e ho ottenuto 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.
Utilizzare la sp_getapplock
procedura memorizzata dal sistema per accettare tutti i blocchi necessari al codice di esempio.
A rigor di termini, questo è un semaforo Dijkstra . Comunque dannatamente utile
sp_getapplock
non genererà un errore. Aspetterà che scada il timeout o (se non c'è alcun timeout), restituirà -3
( msdn.microsoft.com/en-us/library/ms189823.aspx )
Ecco un altro metodo simile a quello pubblicato sopra ->
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 da utilizzare nella finestra query n. 1
BEGIN TRAN
INSERT dbo.Tbl1 (id, col) VALUES (2, 999)
Script da utilizzare nella finestra query n. 2
BEGIN TRAN
INSERT dbo.Tbl2 (id, col) VALUES (111, 2)
Script da aggiungere alla finestra query n. 1
INSERT dbo.Tbl2 (id, col) VALUES (111, 555)
Per ulteriori dettagli al riguardo, consultare http://ajitananthram.wordpress.com/2014/02/23/scripts-to-force-a-deadlock-in-sql-server/