Saya menguji aplikasi saya, saya memerlukan beberapa kode yang stabil mensimulasikan kebuntuan di situs database (skrip sql jika mungkin).
Terima kasih.
TAMBAH:
Saya menguji aplikasi saya, saya memerlukan beberapa kode yang stabil mensimulasikan kebuntuan di situs database (skrip sql jika mungkin).
Terima kasih.
TAMBAH:
Jawaban:
Cara terbaik adalah menggunakan tabel yang sudah Anda miliki. Buat dua tabel - table-a, table-b Untuk tes Anda bahkan dapat memperbarui kolom yang sama dengan informasi yang sama sehingga Anda tidak mempengaruhi data nyata.
Misalnya UPDATE table_a set ID = ID di mana ID = 100;
Buka dua sesi ke database yang sama. Pada satu, jalankan
BEGIN TRAN
update table_a set ID=ID where ID = 100;
Di jalankan dua
BEGIN TRAN
update table_b set ID=ID where ID =100;
Kemudian, salin pernyataan pembaruan ke sesi yang berlawanan dan jalankan pada saat yang sama. Jadi satu,
update table_b set ID=ID where ID =100;
Dalam dua
update table_a set ID=ID where ID = 100;
Saya baru saja mencoba ini dan menggunakan 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.
Gunakan sp_getapplock
prosedur yang tersimpan sistem untuk mengambil apa yang perlu kunci pada kode sampel Anda.
Sebenarnya, ini adalah semafor Dijkstra . Masih sangat berguna
sp_getapplock
tidak akan melempar kesalahan. Entah akan menunggu batas waktu berakhir, atau (jika tidak ada batas waktu), kembali -3
( msdn.microsoft.com/en-us/library/ms189823.aspx )
Berikut metode lain yang mirip dengan yang diposting di atas ->
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 yang akan digunakan di Query Window # 1
BEGIN TRAN
INSERT dbo.Tbl1 (id, col) VALUES (2, 999)
Script yang akan digunakan di Query Window # 2
BEGIN TRAN
INSERT dbo.Tbl2 (id, col) VALUES (111, 2)
Script yang akan ditambahkan ke Jendela Permintaan # 1
INSERT dbo.Tbl2 (id, col) VALUES (111, 555)
Untuk detail tambahan tentang ini, lihat http://ajitananthram.wordpress.com/2014/02/23/scripts-to-force-a-deadlock-in-sql-server/