Locks
Istilah lock pada database berarti suatu kunci atau penguncian. Lock digunakan pada saat terjadi pengaksesan database oleh user secara bersamaan. Hal ini ditujukan untuk menjaga data agar tidak corrupt / hilang atau data yang tidak valid pada saat banyak user mengakses database secara bersamaan / konkuren. Sebelum database mengijinkan suatu sesi user untuk memodifikasi data, pertama-tama sesi me-lock data yang akan dimodifikasi. Lock memberikan exclusive control terhadap suatu data pada sebuah sesi sehingga tidak akan ada transaksi lain yang dapat memodifikasi data yang ter-lock sampai lock terhadap data tersebut telah di lepas. Transaksi dapat melakukan lock
Ø pada sebuah row data dari suatu tabel,
Ø multiple row data dari suatu tabel, atau
Ø satu tabel itu sendiri yang di lock.
Oracle 10g memiliki mekanisme lock secara manual dan otomatis.
Ada dua mekanisme untuk melakukan locking data pada database yaitu :1. Pessimistic Locking
Proses locking yang terjadi pada saat lock di request maka record atau table akan di lock secara immediate / langsung.
2. Optimistic Locking
Proses locking yang terjadi pada saat suatu record / data pada database dilakukan suatu perubahan / update.
Locking Mechanism
Locking mekanisme di disain untuk menyediakan derajat konkurensi yang tinggi yang terjadi pada database. Suatu transaksi yang memodifikasi data memperoleh row-level locks daripada table-level locks. Proses query pada suatu data tidak membutuhkan mekanisme lock terhadap data yang di query, sebuah query tetap berhasil dieksekusi pada suatu data atu tabel walaupun ada user yang member lock pada stuatu data atau tabel. Pada saat multiple transaksi membutuhkan suatu lock pada resource yang sama, transaksi yang pertama meminta lock pada suatu resource tersebut. Transaksi yang lainnya berada pada fase menunggu di antrian sampai transaksi yang pertama telah selesai mengeksekusi resource. Mekanisme antrian ini bersifat otomatis dan tidak membutuhkan interaksi dari suatu administrator atau user yang lain.
Semua lock di lepas pada saat transaksi berakhir. Transaksi dikatakan selesai / complete apabila perintah commit atau rollback dilaksanakan. Pada kasus transaksi yang failed, baground proses secara otomatis melakukan rollback kegagalan yang terjadi dengan merubah transaksi yang gagal tersebut menjadi ke posisi save point atau sebelum proses transaksi gagal.
Data Concurrency
Mekanisme lock secara default berada pada row-level locking mode. Transaksi yang berbeda dapat mengupdate row data yang berbeda yang berada pada sebuah tabel yang sama tanpa bertentangan antara yang satu dengan yang lain. Sementara default model lock berapada pada row-level, Oracle Database 10g mensupport manual locking konfigurasi pada level yang lebih tinggi. Berikut contoh locking suatu tabel
Dengan statement diatas, transaksi yang lain yang mencoba untuk meng-update data pada tabel yang sudah di lock ( karyawan ) harus menunggu pada antrian sampai transaksi yang mempunyai lock pada tabel tersebut telah selesai ( commit ).
Sesi 1 : locking table karyawan in exclusive mode
Sesi 2 : waiting to update table karyawan.
Sesi 1 : commit ( transaksi telah berakhir dan locking terhadap tabel karyawan di release )
Sesi 2 : traksaksi update success
EXCLUSIVE lock adalah lock yang paling tinggi derajatnya. Berikut ini beberapa lock mode yang ada pada Oracle :
1. ROW SHARE
Mengijinkan konkuren akses / akses secara bersama-sama pada tabel yang di lock, tetapi user yang lain tidak dapat member lock exclusive pada tabel yang diberi share lock sampai share lock di lepas. user yang tidak melakukan lock pada tabel, masih dapat mengakses data.
2. ROW EXCLUSIVE
Sama dengan ROW SHARE, tetapi tidak diperbolehkan user lain untuk memberi SHARE mode sebelum lock sudah di lepas.Terjadi secara otomatis pada saat terjadi updating, inserting, atau deleting suatu data.
3. SHARE
Mengijinkan proses query yang konkuren / bersama-sama tetapi tidak diperbolehkan untuk mengubah mode lock tabel. SHARE lock dibutuhkan ( dan secara otomatis diminta ) untuk membuat index pada tabel.
4. SHARE ROW EXCLUSIVE
Digunakan untuk melakukan query pada keseluruhan data pada tabel dan memberi akses kepada sesi user lain untuk melakukan query pada tabel tetapi tidak diperbolehkan sesi user yang lain untuk memberi lock pada tabel serta tidak diperbolehkan untuk mengupdate data pada tabel.
5. EXCLUSIVE
Mengijinkan sesi user yang lain untuk melakukan query pada tabel yang di lock tetapi tidak diperbolehkan melakukan suatu aktivitas yang lain selain query pada tabel tersebut. Exclusive lock dibutuhkan pada saat proses drop suatu tabel.
Seperti beberapa permintaan untuk lock, eksekusi statement lock secara manual terdapat antrian sampai sesi statement yang lain telah memiliki lock, atau telah melepas lock. perintah LOCK dapat menerima special argument untuk mengontrol proses menunggu yaitu menggunakan NOWAIT.
NOWAIT mengembalikan control kepada sesi yang meminta lock secara langsung jika tabel yang ingin di lock telah di lock oleh sesi user yang lain.
Sesi 1 melakukan lock tabel karyawan pada mode row share
Sesi 2 ingin melakukan lock pada tabel karyawan tetapi di tolak
DML Locks
Setiap transaksi DML terdapat 2 lock :
1. Row exclusive lock pada sebuah data atau banyak data yang sedang di update.
Hal ini akan menjadi row exclusive lock berdasarkan pada jumlah data yang diupdate.
2. Shared table level lock pada tabel yang sedang di update.
Hal ini mencegah sesi user lain untuk melakukan lock keseluruhan tabel ( kemungkinannya untuk drop tabel atau truncate data tabel ) sementara perubahan sedang terjadi.
Enqueue Mechanism ( mekanisme antrian )
Permintaan suatu lock secara otomatis akan di masukkan ke dalam antrian. Setelah suatu transaksi yang memegang lock telah selesai, maka sesi berikutnya yang telah mengantri terlebih dahulu akan mendapatkan lock. suatu sesi yang sedang memegang lock pada suatu data atau tabel dapat me-request untuk mengubah mode lock yang sedang terjadi tanpa harus melepas sesi lock dan kembali ke antrian. Sebagai contohnya, misalkan terdapat sebuah sesi yang memegang mode shared lock pada suatu tabel. Sesi tersebut dapat merubah dari shared lock ke exclusive lock, selama tidak ada sesi lain yang sedang memiliki exclusive lock atau share lock pada tabel tersebut. Maka sesi yang memegang shared lock akan di beri grant / hak akses untuk mendapatkan exclusive lock tanpa harus menunggu di antrian terlebih dahulu.
Lock Conflicts
Konflik pada suatu transaksi database sering terjadi, tetapi pada umumnya dapat di selesaikan berdasarkan periode waktu dan mekanisme antrian. Ada suatu kasus yang sangat jarang terjadi lock konflik dibutuhkan konfigurasi dari administrator untuk menyelesaikan konflik. Berikut contoh konflik yang jarang terjadi :
Transaction 1 | Time | Transaction 2 |
UPDATE hr.employees SET salary=salary+100 WHERE employee_id=100; 1 row updated. | 9:00:00 | UPDATE hr.employees SET salary=salary+100 WHERE employee_id=101; 1 row updated. |
UPDATE hr.employees SET COMMISION_PCT=2 WHERE employee_id=101; Sesi menunggu karena terjadi lock konflik. | 9:00:05 | SELECT sum(salary) FROM hr.employees; SUM(SALARY) --------------------- 895463 |
Sesi masih menunggu di antrian!! | 16:30:00 | Terjadi transaksi yang banyak dalam waktu 7.5 jam, tetapi belum ada commit atau rollback |
1 row updated. | 16:30:01 | Commit; |
pada kasus diatas, transaksi 2 mendapatkan lock single row pada jam 9:00:00 dan tidak melakukan commit. Di sisi lain transaksi 1 menunggu untuk proses update pada tabel, tetapi transaksi 2 pada saat itu membutuhkan lock pada semua data. Sehingga transaksi 1 di block oleh transaksi 2 sampai transaksi 2 commit pada jam 16:30:01. Untuk hal ini user yang mengeksekusi transaksi 1 menghubungi administrator untuk mengatasi permasalahan ini.
Detecting Lock Conflicts
Pada oracle 10g untuk mendeteksi lock konflik kita dapat menggunakan Enterprise Manager. Berikut langkah-langkah mendeteksi lock. Misal sebelumnya sudah ada transaksi berikut :
Sesi 1 lock tabel karyawan
Sesi 2 update tabel karyawan
Sesi 3 insert tabel karyawan
1. Pada Enterprise Manager buka halaman Performance
2. Klik Blocking pada bagian kiri bawah halaman.
3. Halaman Blocking Sessions muncul. Terdapat tiga sesi user yang sedang mengalami konflik.
Resolving Lock Conflicts
Untuk menyelesaikan lock konflik, suatu sesi yang memegang lock harus di lepaskan. Ada beberapa cara untuk menyelesaikan masalah lock konflik, cara yang paling baik ialah dengan cara member tahu si user yang sedang memanipulasi data untuk melakukan commit atau rollback terhadap transaksi yang sedang dijalankan. Jika terjadi suatu keadaan yang mendesak, penyelesaian lock konflik memungkinkan administrator untuk men-terminasi sesi user yang sedang memegang lock dengan cara meng-klik tombol Kill Session. Saat suatu sesi di terminate / di stop, semua transaksi yang sedang terjadi pada sesi akan di rollback. User yang sesinya di terminate harus login terlebih dahulu untuk melakukan transaksi yang telah di terminate.
Berikut langkah-langkah untuk men-terminate sesi user :
4. pada halaman Blocking Sessions, pilih sesi user yang akan di terminate. Kemudian klik Kill Session.
5. Pesan konfirmasi muncul, pilih kill Immediete. Kemudian klik Yes.
6. Pada sisi user yang di-terminate akan muncul pesan your session has been killed dan transaksi secara otomatis mengalami rollback.
Deadlocks
Deadlock merupakan contoh lock konflik yang sangat special. Deadlock terjadi pada saat terdapat dua atau lebih sesi yang sedang saling menunggu antar satu sama lain untuk mendapatkan hak atas lock. dikarenakan sesi antar satu dengan yang lain saling menunggu dan tidak dapat menyelesaikan transaksi masing-masing maka akan terdeteksi sebagai deadlock.
Transaksi 1 | Time | Transaksi 2 |
UPDATE karyawan SET nama = ‘paijo’ WHERE employee_id = 400; | 9:00 | UPDATE karyawan SET nama = ‘paimin’ WHERE employee_id = 300; |
UPDATE karyawan SET nama = ‘paul’ WHERE employee_id = 300; | 9:15 | UPDATE karyawan SET nama = ‘gilbert’ WHERE employee_id = 400; |
nice info thanks ya
BalasHapusMake money with a gambling machine to make money? - Work
BalasHapusHow to play casino games is a lot of หาเงินออนไลน์ fun. to make money with a casino slot machine machine for your personal