Uygulamamı test ediyorum Veritabanındaki çıkmaz kilitlenmeyi sağlayan kararlı bir koda ihtiyacım var (mümkünse sql betiği).
Teşekkür ederim.
KATMA:
Uygulamamı test ediyorum Veritabanındaki çıkmaz kilitlenmeyi sağlayan kararlı bir koda ihtiyacım var (mümkünse sql betiği).
Teşekkür ederim.
KATMA:
Yanıtlar:
En iyi yol, sahip olduğunuz tabloları kullanmak olacaktır. İki tablo oluşturun - tablo-a, tablo-b Bir test için aynı sütunu aynı bilgilerle güncelleyebilirsiniz, böylece gerçek verileri etkilemezsiniz.
Örneğin UPDATE table_a, ID = ID'yi ayarlar; burada ID = 100;
Aynı veritabanına iki oturum açın. Birinde koş
BEGIN TRAN
update table_a set ID=ID where ID = 100;
İki kaçak
BEGIN TRAN
update table_b set ID=ID where ID =100;
Ardından, güncelleme bildirimlerini rakip oturumlara kopyalayın ve aynı anda çalıştırın. Birinde,
update table_b set ID=ID where ID =100;
İkiye
update table_a set ID=ID where ID = 100;
Bunu şimdi denedim ve MS-SQL'e başladım.
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.
sp_getapplock
Numune kodunuzda ihtiyaç duyduğunuz kilitleri almak için sistem saklı yordamını kullanın.
Açıkça konuşursak, bu bir Dijkstra semaforudur . Yine de çok faydalı
sp_getapplock
hata atmaz. Zaman aşımının süresinin dolmasını bekler veya (zaman aşımı yoksa), döndürür -3
( msdn.microsoft.com/en-us/library/ms189823.aspx )
İşte yukarıda belirtilene benzer başka bir yöntem ->
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))
Sorgu Penceresinde kullanılacak komut dosyası
BEGIN TRAN
INSERT dbo.Tbl1 (id, col) VALUES (2, 999)
Sorgu Penceresinde kullanılacak komut dosyası # 2
BEGIN TRAN
INSERT dbo.Tbl2 (id, col) VALUES (111, 2)
Sorgu Penceresi'ne eklenecek komut dosyası # 1
INSERT dbo.Tbl2 (id, col) VALUES (111, 555)
Bununla ilgili daha fazla ayrıntı için http://ajitananthram.wordpress.com/2014/02/23/scripts-to-force-a-deadlock-in-sql-server/ adresine bakın.