Kusnawi, S.Kom, M.Eng
Statement-level read consistency Oracle menjamin bahwa data yang dilihat melalui sebuah
query ketika suatu SQL statement (SELECT, INSERT, UPDATE, or DELETE) diberikan adalah konsisten pada suatu waktu tertentu dan tidak akan berubah selama eksekusi statement tersebut.
Transaction-level read consistency Oracle menjamin bahwa data yang dilihat dari beberapa
query pada suatu transaksi adalah konsisten
Dirty reads Transaksi A membaca data yang telah diubah oleh transaksi
B, padahal transaksi B belum dilakukan atau dengan kata lain Sebuah transaksi membaca data yang dituliskan oleh transaksi yang gagal (kedua transaksi ini bekerja pada waktu bersamaan).
Nonrepeatable reads
Transaksi A dilakukan namun sebelum selesai ada transaksi
B yang mengubah atau menghapus data sehingga jika transaksi A dilakukan kembali hasilnya bisa berbeda dengan hasil transaksi A sebelumnya
Phantom reads
Transaksi A dilakukan namun sebelum selesai ada transaksi
B yang menambah row sehingga hasilnya tidak sesuai dengan yang diinginkan
Waktu w1 : User satu melihat banyaknya saldo pada nasabah Tara sebanyak Rp. 100.000 Waktu w2 : user dua merubah saldo Tara menjadi Rp. 50.000 Waktu w3 : user satu melihat lagi banyaknya saldo nasabah Tara dan menemukan bahwa saldonya masih belum berubah, yaitu sebanyak Rp. 100.000 Waktu w4 : user dua meng-COMMIT-kan perubahan, yang oleh system dituliskan pada HardDisk secara permanen Waktu w5 : user satu melihat lagi banyaknya saldo nasabah Tara dan menemukan bahwa saldonya sudah berubah, yaitu sebanyak Rp. 50.000 Dengan ilustrasi diatas, sampai dengan langkah pada waktu w3 anda sendiri telah membuktikan bahwa fenomena Dirty Read tidak di perbolehkan terjadi oleh Oracle.
Waktu w1 : User satu melihat banyaknya saldo pada nasabah Tara sebanyak Rp. 100.000 Waktu w2 : user dua merubah saldo Tara menjadi Rp. 50.000 Waktu w3 : user dua meng-COMMIT-kan perubahan, yang oleh system dituliskan pada HardDisk secara permanen Waktu w4 : user satu melihat lagi banyaknya saldo nasabah Tara dan menemukan bahwa saldonya sudah berubah, yaitu sebanyak Rp. 50.000 Sengan ilustrasi diatas, anda sendiri telah membuktikan bahwa fenomena Nonrepeatable Read dapat terjadi pada Oracle di transaksi yang berjalan secara bersamaan.
Waktu w1 : User satu melihat banyaknya nasabah yang memiliki cabang Bogor dan menemukan ada 2 orang nasabah (Tara dan Alice) Waktu w2 : user dua menambahkan seorang nasabahYuni yang juga memiliki cabang Bogor Waktu w3 : user dua meng-COMMIT-kan perubahan, yang oleh system dituliskan pada HardDisk secara permanen. Waktu w4 : User satu melihat lagi banyaknya nasabah yang memiliki cabang Bogor dan menemukan sekarang ada 3 orang nasabah (Tara, Alice danYuni) dimanaYuni adalah phantom tuple. Inilah yang dinamakan fenomena phantom. Jika fenomena ini tidak di waspadai, pada transaksi yang membutuhkan keakuratan data akan menjadi masalah, karena fenomena ini seringkali tidak terlihat.
Locks Mekanisme yang mencegah akses pada suatu resource jika sedang digunakan oleh suatu transaksi.
Shared Locks : Shared lock digunakan pada data yang sedang dibaca Digunakan pada operasi yang tidak mengubah data
seperti SELECT Ketika shared lock digunakan, transaksi lain dapat membaca data tapi tidak bisa mengubah data yang di lock Ketika data yang dilock sudah dibaca, shared lock dilepaskan (released)
Exclusive Locks : Digunakan untuk operasi modifikasi data, seperti
UPDATE, INSERT, DELETE Mengunci data yang sedang dimodifikasi oleh satu transaksi, sehingga mencegah transaksi lain untuk memodifikasi juga.
Suatu transaksi akan diisolasi dari pengaruh akibat dilakukannya transaksi lain.
Transaction Isolation level
Description
Read Phenomena Non Phantom Dirty Read repeatable Read
Read Commited
Oracle default. Setiap statement membaca data yang konsisten. (statement-level)
Serializable
Semua statement dalam suatu transaksi membaca data yang konsisten. (transaction-level)
Read Only
Semua statement membaca data yang konsisten. Tidak ada insert, update, atau deletion yang dapat dilakukan.
Metode dalam mengeset level isolasi : Pada level Transaksi (pada level ini hanya untuk
mengeset sebuah transaksi) ▪ SET TRANSACTION ISOLATION LEVEL READ COMMITTED; ▪ SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; ▪ SET TRANSACTION READ ONLY;
Pada level Session (pada level ini akan berlaku
pada seluruh transaksi yang dilakukan dan subsequent dari transaksi yang terjadi) ▪ ALTER SESSION SET ISOLATION_LEVEL = READ COMMITTED ▪ ALTER SESSION SET ISOLATION_LEVEL = SERIALIZABLE;
Row Level Lock Lock yang dilakukan terhadap satu atau lebih row Lock escalation beresiko menyebabkan terjadinya
deadlock. Read commited and serializable transaction menggunakan row level lock.
Table Level Lock Lock yang dilakukan terhadap satu tabel
Locking yang dilakukan oleh Oracle secara otomatis
Locking yang dilakukan user secara manual, dapat meng-override default locking yang dilakukan oleh Oracle The syntax is: lock table table_name in mode mode; SQL> LOCK TABLE hr.employees IN SHARE MODE NOWAIT;
ROW SHARE : masih mengijinkan akses secara bersamaan untuk tabel yang sedang terkunci, tapi membatasi session untuk melakukan eksklusif akses pada tabel yang sedang terkunci
ROW EXCLUSIVE : sama seperti ROW SHARE, tapi juga membatasi penguncian dalam mode SHARE. ROW EXCLUSIVE akan diberikan secara otomatis pada saat session melakukan transaksi update, insert ataupun delete data
SHARE : mengijinkan query bersamaan tapi membatasi proses update pada tabel yang sedang terkunci. SHARE biasanya digunakan pada pembuatan sebuah index pada tabel tersebut. SHARE ROW EXCLUSIVE : mengijinkan proses lainnya untuk menglakukan perintah query pada keseluruhan baris dalam tabel tersebut, tapi membatasi session lainnya untuk melakukan mode SHARE ataupun update data EXCLUSIVE : mengijin session lain untuk melakukan perintah query pada tabel yang sedang terkunci, tapi membatasi user lain melakukan aktifitas lainnya pada tabel tersebut. Penguncian eksklusif dilakukan untuk penghapusan (drop) sebuah tabel
Session 1
Session 2
lock table emp in share mode; OK
select * from emp; OK
update emp set ename = ‘BHISMA’ where empno = 7900; commit; OK
This and other Transactions have to wait until Session 1 commits the Transaction.
lock table emp in share mode; OK This and other Transactions h ave to wait until Session 2 commits the Transaction. update emp set ename = 'MUHAIMIN' where empno = 7900; Waiting ....
This and other Transactions can get a Share Lock (Lock Switch).
lock table emp in share mode; OK
Session 1
Session 2
lock table emp in exclusive mode; OK
select * from emp; OK
update emp set ename = ‘HENDRY' where empno = 7900; commit; OK
This and other Transactions have to wait until Session 1 commits the Transaction.
lock table emp in exclusive mode; OK
This and other Transactions cannot get any other Lock (No Lock Switch). lock table emp in share mode; Waiting .... lock table emp in exclusive mode; Waiting .... update emp set ename = ‘HENDRY' where empno = 7900;