2011-10-18 26 views
10

Así que estoy tratando de rastrear lo que parece un problema de interbloqueo here. He habilitado el registro de punto muerto usando DBCC TRACEON (1222, -1) y DBCC TRACEON (1204, -1). Me gustaría probar para asegurarme de que el registro atrapa el punto muerto, entonces ¿cómo puedo causar que ocurra uno en MS SQL 2005? Gracias,¿Cómo provocar deliberadamente un punto muerto?

+0

Si el problema en su otra publicación son bloqueos y no bloqueo, debería obtener un error de interbloqueo en lugar de un error de tiempo de espera. –

Respuesta

30

aquí hay algo de T-SQL para causar deliberadamente un punto muerto.

creación del objeto:

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

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

abrir una nueva ventana de consulta y pega este código y ejecutarlo:

BEGIN TRAN 
UPDATE dbo.DeadLockTest SET col1 = 1 

abrir otra nueva ventana de consulta y pegar y ejecutar este código:

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

Regrese a la primera ventana de consulta (con el primer BEGIN TRAN sta tement) y ejecutar este código:

UPDATE dbo.DeadLockTest2 SET col1 = 1 

Voila! Eso es un punto muerto.

5

esto debería funcionar:

  • Inserte dos registros, A y B.
  • Abra dos transacciones.
  • Actualice el registro A en la primera transacción y B en la segunda transacción.
  • cuando se sabe a ciencia cierta se realizan las actualizaciones:
    • actualización de registro B en la primera transacción y A en la segunda transacción.
Cuestiones relacionadas