Untuk mensimulasikan deadlock di tabel locking_test di Oracle, kita perlu menjalankan dua sesi (dua transaksi) secara bersamaan, di mana setiap sesi saling mengunci resources (baris) yang akan diakses oleh sesi lainnya.
Berikut adalah langkah-langkah simulasi deadlock di Oracle menggunakan tabel locking_test:
Langkah 1: Buat Tabel dan Data
Jalankan skrip ini terlebih dahulu untuk membuat tabel dan menambahkan data awal:
CREATE TABLE locking_test (
id NUMBER PRIMARY KEY,
data VARCHAR2(50)
);
INSERT INTO locking_test (id, data) VALUES (1, 'Initial Data');
INSERT INTO locking_test (id, data) VALUES (2, 'Second Data');
COMMIT;
Simulasi ini memerlukan dua sesi yang menjalankan perintah SQL secara terpisah untuk menciptakan kondisi deadlock.Langkah 2: Buka Dua Sesi (Transaction A dan Transaction B)
Sesi A
Mulai transaksi di Sesi A dan kunci baris dengan id = 1:
-- Sesi A: Kunci baris dengan ID 1
UPDATE locking_test SET data = 'Data from Session A' WHERE id = 1;
---Jangan COMMIT atau ROLLBACK di sesi ini.
Sesi B
Mulai transaksi di Sesi B dan kunci baris dengan id = 2:
-- Sesi B: Kunci baris dengan ID 2
UPDATE locking_test SET data = 'Data from Session B' WHERE id = 2;
---Sama seperti Sesi A, jangan COMMIT atau ROLLBACK di sini.
Sesi A
Kembali ke Sesi A dan coba kunci baris dengan id = 2:
-- Sesi A: Coba kunci ID 2 yang sedang dikunci oleh Sesi B
UPDATE locking_test SET data = 'Data from Session A' WHERE id = 2;
---Pada titik ini, Sesi A akan menunggu karena Sesi B memegang kunci pada baris id = 2.
Sesi B
Kembali ke Sesi B dan coba kunci baris dengan id = 1:
-- Sesi B: Coba kunci ID 1 yang sedang dikunci oleh Sesi A
UPDATE locking_test SET data = 'Data from Session B' WHERE id = 1;
Pada langkah ini, Oracle akan mendeteksi deadlock karena kedua sesi saling menunggu satu sama lain. Oracle akan mengirim pesan error di salah satu sesi dengan pesan seperti:
rust
Salin kode
ORA-00060: deadlock detected while waiting for resource
Penjelasan
Oracle otomatis mendeteksi deadlock dan akan memilih salah satu sesi untuk dibatalkan (dengan ROLLBACK) untuk menyelesaikan deadlock. Sesi lainnya akan dapat melanjutkan operasinya.
Simulasi ini memperlihatkan bagaimana dua transaksi bisa berakhir dalam deadlock saat masing-masing mengunci resources yang dibutuhkan oleh transaksi lainnya.
No comments:
Post a Comment