Transaksi
Transaksi
merupakan bagian dari pengeksekusian sebuah program yang melakukan pengaksesan
basis data dan bahkan juga melakukan serangkaian perubahan data. DBMS yang kita gunakan harus menjamin bahwa
setiap transaksi harus dapat dikerjakan secara utuh atau tidak sama
sekali. Tidak boleh ada transaksi yang
hanya dikerjakan sebagian, karena dapat menyebabkan inkonsistensi basis data. Untuk itu transaksi selalu merubah basis data
dari satu kondisi konsisten ke kondisi konsisten lain.
Sebuah transaksi
berpeluang untuk ‘mengganggu’ integritas basis data yang dapat membuat
kondisi/hubungan antar data tidak seperti seharusnya. Untuk menjamin agar integritas dapat tetap
terpelihara maka setiap transaksi harus memiliki sifat-sifat:
1.
Atomicity, dimana semua operasi dalam transaksi
dapat dikerjakan seluruhnya atau tidak sama sekali.
2. Consistency, dimana eksekusi transaksi secara
tunggal harus dapat menjamin data tetap konsisten setelah transaksi berakhir.
3. Isolation, jika pada sebuah sistem basis data
terdapat sejumlah transaksi yang dilaksanakan secara bersamaan, maka semua
transaksi yang dilaksanakan pada saat yang bersamaan tersebut harus dapat dimulai
dan bisa berakhir.
4. Durability, dimana perubahan data yang terjadi
setelah sebuah transaksi berakhir dengan baik, harus dapat bertahan bahkan jika
seandainya sistem menjadi mati.
Terhentinya
suatu transaksi tidak selalu diakibatkan oleh kegagalan insidental baik dari
perangkat keras (crash) ataupun kemacetan sistem operasi (hang). Tapi lebih sering terjadi karena user sengaja
menghentikan transaksi atau karena penghentian transaksi oleh DBMS akibat
adanya kondisi tak diinginkan, seperti deadlock atau timeout.
Sebuah transaksi
dapat menghasilkan dua kemungkinan:
a.
Jika
dilaksanakan lengkap seluruhnya, transaksi tersebut telah di commit
dan basis data mencapai keadaan konsisten baru.
b.
Jika
transaksi tidak sukses, maka transaksi dibatalkan dan basis data dikembalikan
ke keadaan konsisten sebelumnya (rollback).
Transaksi yang sudah di commit tidak
dapat dibatalkan lagi. Jika ada
kesalahan, maka harus dilakukan transaksi lain yang membalik dampak transaksi
sebelumnya. Untuk mengatasi terjadinya kehilangan data saat terjadi kesalahan
maka digunakan save point. Savepoint digunakan untuk membuat sebuah
titik/checkpoint dari suatu database, sehingga jika di panggil, maka data akan
tetap seperti saat sebelum savepoint tersebut dieksekusi.
Isolasi
Transaksi
Dalam transaksi database, ada 3 hal yang
harus dicegah yaitu.
-
Dirty
Read
Transaksi
membaca data dari hasil transaksi lainnya yang gagal. Kedua transaksi tersebut berjalan
bersamaan.
-
Non-Repeatable
Read
Transaksi
membaca ulang data yang telah di baca sebelumnya karena data tersebut telah di
modifikasi oleh transaksi lainnya.
-
Phantom
Read
Transaksi
membaca sebuah data yang telah hilang akibat dari transaksi yang lainnya.
Untuk mencegah 3 hal tersebut, maka
dalam Oracle terdapat 2 level isolasi yang dapat diimplementasikan, yaitu :
- Read
Committed
Pada tingkatan
isolasi ini, rekaman hanya dapat dilihat oleh suatu transaksi. Lagi pula,
statemen hingga batas tertentu perubahan apapun yang dilakukan memulai eksekusi
tidak bisa dilihat. Sebagai contoh, jika anda menjalankan perintah SELECT Suatu
yang query dari tabel BUKU, dan sesi B memasukkan suatu baris ke dalam BUKU
sedangkan suatu query masih menjalankan, baris yang baru itu tidak akan terlihat
oleh perintah SELECT
- Serializable
Pada tingkat isolasi, tiap-tiap transaksi dengan sepenuhnya terisolasi sedemikian rupa sehingga transaksi bertindak seolah-olah mereka telah mengeksekusi berturutan, satu demi satu; berturut-turut. Dalam rangka mencapai ini, RDBMS akan secara khusus mengunci tiap-tiap baris yang dibaca, maka lain sesi tidak boleh memodifikasi data itu sampai transaksi telah selesai dengan itu. Kunci dilepaskan ketika Anda melakukan atau batalkan transaksi
Locking
Protocol
Suatu lock adalah mekanisme untuk
mengontrol akses secara bersamaan (concurrent access) terhadap sebuah item
data . Item data dapat di-lock dengan dua cara:
1. Exclusive (X) mode. Item data dapat dibaca dan ditulis. X-lock dilakukan dengan menggunakan instruksi lock-X.
2. Shared (S) mode. Item data hanya dapat dibaca. S-lock dilakukan dengan menggunakan instuksi lock-S.
Permintaan lock dilakukan terhadap
concurrency-control manager. Transaksi hanya akan berlanjut setelah permintaan
dikabulkan.
Deadlock
Deadlock adalah suatu kondisi dimana dua proses
atau lebih saling menunggu proses yang lain untuk melepaskan resource yang sedang dipakai. Karena beberapa
proses itu saling menunggu, maka tidak terjadi kemajuan dalam kerja proses-proses tersebut. Deadlock adalah masalah yang biasa terjadi
ketika banyak proses yang membagi sebuah resource yang hanya boleh dirubah oleh satu
proses saja dalam satu waktu. Di kehidupan nyata, deadlock dapat digambarkan dalam gambar
berikut.Pada gambar diatas, deadlock dianalogikan sebagai dua antrian mobil
yang akan menyeberangi jembatan. Dalam kasus diatas, antrian di sebelah kiri
menunggu antrian kanan untuk mengosongkan jembatan (resource), begitu
juga dengan antrian kanan. Akhirnya tidak terjadi kemajuan dalam kerja dua
antrian tersebut.Misal ada proses A mempunyai resource X, proses B mempunyai resource Y. Kemudian kedua proses ini
dijalankan bersama, proses A memerlukan resource Y dan proses B memerlukan resource X, tetapi kedua proses tidak akan
memberikan resource yang dimiliki sebelum proses dirinya
sendiri selesai dilakukan. Sehingga akan terjadi tunggu-menunggu.
Cekian dan terima acih :3....cemangat ea cemuanaaaa :*
0 komentar:
Posting Komentar