Estou testando meu aplicativo. Preciso de um código estável que simule o impasse no site do banco de dados (script sql, se possível).
Obrigado.
ADICIONADO:
Estou testando meu aplicativo. Preciso de um código estável que simule o impasse no site do banco de dados (script sql, se possível).
Obrigado.
ADICIONADO:
Respostas:
A melhor maneira seria usar as tabelas que você já possui. Crie duas tabelas - tabela-a, tabela-b. Para um teste, você pode atualizar a mesma coluna com as mesmas informações para não afetar nenhum dado real.
Por exemplo, UPDATE table_a defina ID = ID em que ID = 100;
Abra duas sessões no mesmo banco de dados. Em um, corra
BEGIN TRAN
update table_a set ID=ID where ID = 100;
Em duas corridas
BEGIN TRAN
update table_b set ID=ID where ID =100;
Em seguida, copie as instruções de atualização para as sessões opostas e execute ao mesmo tempo. Em um,
update table_b set ID=ID where ID =100;
Em dois
update table_a set ID=ID where ID = 100;
Eu apenas tentei isso agora e entrei no 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 o sp_getapplock
procedimento armazenado do sistema para levar o que for necessário para seu código de exemplo.
A rigor, este é um semáforo Dijkstra . Ainda muito útil
sp_getapplock
não lançará um erro. Ele nem vai esperar o tempo limite para expirar, ou (se não houver um timeout), retorno -3
( msdn.microsoft.com/en-us/library/ms189823.aspx )
Aqui está outro método semelhante ao postado acima ->
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 a ser usado na janela de consulta nº 1
BEGIN TRAN
INSERT dbo.Tbl1 (id, col) VALUES (2, 999)
Script a ser usado na janela de consulta 2
BEGIN TRAN
INSERT dbo.Tbl2 (id, col) VALUES (111, 2)
Script a ser adicionado à janela de consulta nº 1
INSERT dbo.Tbl2 (id, col) VALUES (111, 555)
Para obter detalhes adicionais sobre isso, consulte http://ajitananthram.wordpress.com/2014/02/23/scripts-to-force-a-deadlock-in-sql-server/