Estoy probando mi aplicación. Necesito un código estable que simule el punto muerto en el sitio de la base de datos (script SQL si es posible).
Gracias.
ADICIONAL:
Estoy probando mi aplicación. Necesito un código estable que simule el punto muerto en el sitio de la base de datos (script SQL si es posible).
Gracias.
ADICIONAL:
Respuestas:
La mejor manera sería usar tablas que ya tienes. Cree dos tablas: tabla-a, tabla-b Para una prueba, incluso puede actualizar la misma columna con la misma información para no afectar ningún dato real.
Por ejemplo, UPDATE table_a set ID = ID donde ID = 100;
Abra dos sesiones en la misma base de datos. En uno, corre
BEGIN TRAN
update table_a set ID=ID where ID = 100;
En dos carreras
BEGIN TRAN
update table_b set ID=ID where ID =100;
Luego, copie las declaraciones de actualización en las sesiones opuestas y ejecútelas al mismo tiempo. En uno,
update table_b set ID=ID where ID =100;
En dos
update table_a set ID=ID where ID = 100;
Acabo de probar esto ahora y obtuve 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.
Use el sp_getapplock
procedimiento almacenado del sistema para tomar los bloqueos que necesite en su código de muestra.
Estrictamente hablando, este es un semáforo de Dijkstra . Aunque sigue siendo muy útil
sp_getapplock
No arrojará un error. Esperará a que caduque el tiempo de espera o (si no hay tiempo de espera), regresará -3
( msdn.microsoft.com/en-us/library/ms189823.aspx )
Aquí hay otro método similar al publicado anteriormente ->
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 para ser usado en la Ventana de Consulta # 1
BEGIN TRAN
INSERT dbo.Tbl1 (id, col) VALUES (2, 999)
Script para ser usado en la Ventana de Consulta # 2
BEGIN TRAN
INSERT dbo.Tbl2 (id, col) VALUES (111, 2)
Script que se agregará a la Ventana de consulta # 1
INSERT dbo.Tbl2 (id, col) VALUES (111, 555)
Para obtener detalles adicionales sobre esto, consulte http://ajitananthram.wordpress.com/2014/02/23/scripts-to-force-a-deadlock-in-sql-server/