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?
10
A
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.
Se il problema nel tuo altro post è deadlock rispetto al blocco, si dovrebbe ottenere un errore deadlock piuttosto che un errore di timeout. –