2011-10-18 14 views
10

Quindi sto cercando di rintracciare quello che sembra un problema di deadlock here. Ho attivato la registrazione deadlock utilizzando DBCC TRACEON (1222, -1) e DBCC TRACEON (1204, -1). Mi piacerebbe testare per assicurarsi che il logging catturi il deadlock, quindi come posso causarne uno in MS SQL 2005? Grazie,Come causare deliberatamente un deadlock?

+0

Se il problema nel tuo altro post è deadlock rispetto al blocco, si dovrebbe ottenere un errore deadlock piuttosto che un errore di timeout. –

risposta

30

Ecco alcune T-SQL per provocare deliberatamente una situazione di stallo.

creazione Oggetto:

CREATE TABLE dbo.DeadLockTest (col1 INT) 
INSERT dbo.DeadLockTest SELECT 1 

CREATE TABLE dbo.DeadLockTest2 (col1 INT) 
INSERT dbo.DeadLockTest2 SELECT 1 

aprire una nuova finestra di query e incolla questo codice ed eseguirlo:

BEGIN TRAN 
UPDATE dbo.DeadLockTest SET col1 = 1 

aprire un'altra nuova finestra di query e incollare ed eseguire questo codice:

BEGIN TRAN 
UPDATE dbo.DeadLockTest2 SET col1 = 1 
UPDATE dbo.DeadLockTest SET col1 = 1 

Torna alla prima finestra di query (con il primo BEGIN TRAN sta tement) ed esegui questo codice:

UPDATE dbo.DeadLockTest2 SET col1 = 1 

Voilà! Questo è un punto morto.

5

questo dovrebbe funzionare:

  • Inserire due dischi, A e B.
  • Aprire due transazioni.
  • Aggiorna record A nella prima transazione e B nella seconda transazione.
  • quando si sa di sicuro tali aggiornamenti sono fatti:
    • Aggiornamento record di B nella prima operazione e A nella seconda transazione.
Problemi correlati