
Kali ini kita akan coba melakukan simulasi deadlock pada database oracle. Kita akan melakukan beberapa manipulasi data sehingga membuat kondisi deadlock.
Sebelumnya mari kita baca dulu mengenai deadlock dibawah ini:
In concurrent computing, a deadlock is a state in which each member of a group is waiting for some other member to take action, such as sending a message or more commonly releasing a lock. Deadlock is a common problem in multiprocessing systems, parallel computing, and distributed systems, where software and hardware locks are used to handle shared resources and implement process synchronization.
sumber: wiki
Oke, kita mulai langkah-langkah untuk melakukan simulasi deadlock:
- Buka command prompt (*cmd1)
- Login ke oracle dengan sqlplus
- Create table tbl_deadlock dengan kolom kode, nama, dan keterangan dengan tipe data NVARCHAR2
123456DROP TABLE TBL_DEADLOCK;CREATE TABLE "TBL_DEADLOCK"( "KODE" NVARCHAR2(20) NOT NULL ENABLE,"NAMA" NVARCHAR2(20),"KETERANGAN" NVARCHAR2(100),CONSTRAINT "PK_TBL_DEADLOCK" PRIMARY KEY ("KODE")); - Isi data table tbl_deadlock dengan 3 data saja, jangan lupa commit
1234Insert into TBL_DEADLOCK (KODE,NAMA,KETERANGAN) values ('KD01','Nama Satu','Keterangan Satu');Insert into TBL_DEADLOCK (KODE,NAMA,KETERANGAN) values ('KD02','Nama Dua','Keterangan Dua');Insert into TBL_DEADLOCK (KODE,NAMA,KETERANGAN) values ('KD03','Nama Tiga','Keterangan Tiga');commit; - Lakukan update pada “KD01” *jangan lakukan commit/rollback
1UPDATE TBL_DEADLOCK SET NAMA = 'Nama Satu CMD Satu' WHERE KODE = 'KD01'; - Buka command prompt baru (*cmd2)
- login ke oracle menggunakan sqlplus
- Lakukan update pada “KD02” *jangan lakukan commit/rollback
1UPDATE TBL_DEADLOCK SET NAMA = 'Nama Dua CMD Dua' WHERE KODE = 'KD02'; - Lakukan update lagi pada “KD03” *jangan lakukan commit/rollback
1UPDATE TBL_DEADLOCK SET NAMA = 'Nama Tiga CMD Dua' WHERE KODE = 'KD03'; - Kembali ke cmd1*
- Lakukan update pada “KD03” *jangan lakukan commit/rollback
1UPDATE TBL_DEADLOCK SET NAMA = 'Nama Tiga CMD Satu' WHERE KODE = 'KD03'; - Kembali ke cmd2*
- Lakukan update pada “KD01” *jangan lakukan commit/rollback
1UPDATE TBL_DEADLOCK SET NAMA = 'Nama Satu CMD Dua' WHERE KODE = 'KD01'; - Pada cmd1* akan terlihat pesan error deadlock
1deadlock detected while waiting for resource
Semoga dapat membantu pemahaman anda dalam deadlock
Salam berbagi,