TRANSAKSI
Transaksi
Transaksi adalah satu atau beberapa aksi
program aplikasi yang mengakses/mengubah isi basis data.
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.
Atomik,
dimana semua operasi dalam transaksi dapat dikerjakan seluruhnya atau tidak
sama sekali.
2.
Konsisten,
dimana eksekusi transaksi secara tunggal harus dapat menjamin data tetap
konsisten setelah transaksi berakhir.
3.
Terisolasi,
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.
Bertahan,
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.
Status-status
yang dapat dicapai oleh sebuah transaksi sejak mulai dilaksanakan hingga
selesai atau batal adalah:
1.
Aktif (Active),
yang merupakan status awal (initial state) sebuah transaksi yang menunjukkan
transaksi tersebut masih dieksekusi.
2.
Berhasil Sebagian (Partially
Committed), yaitu keadaan yang dicapai transaksi tepat pada
saat operasi terakhir dalam transaksi selesai dikerjakan.
3.
Gagal (Failed),
yang merupakan keadaan dimana sebuah transaksi terhenti pengeksekusiannya
sebelum tuntas sama sekali.
4.
Batal (Aborted),
yaitu keadaan dimana sebuah transaksi dianggap tidak/belum dikerjakan yang
tentu dengan terlebih dahulu diawali dengan mengembalikan semua data yang telah
diubah ke nilai-nilai semula. (yang menjadi tanggung jawab DBMS).
5.
Berhasil Sempurna (Committed),
keadaan dimana transaksi telah dinyatakan berhasil dikerjakan seluruhnya dan
basis data telah merefleksikan perubahan-perubahan yang memang diinginkan
transaksi.
Save Point
Save
Point secara merupakan sebuah titik aman, dimana kita telah menyelesaiakan satu
atau beberapa transaksi. Save point dianalogikan seperti sebuah check point saat
kita bermain game.
Fungsi
dari save point adalah supaya pada saat kita ingin rollback atau ada transaksi
yang gagal, transaksi tidak berjalan dari awal kembali, tetapi dari save poin
yang telah kita buat.
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
adalah keadaan dimana dua program memegang kontrol terhadap sumber daya yang
dibutuhkan oleh program yang lain. Tidak ada yang dapat melanjutkan proses
masing-masing sampai program yang lain memberikan sumber dayanya, tetapi tidak
ada yang mengalah.
Deadlock yang mungkin dapat terjadi pada suatu proses disebabkan proses itu menunggu suatu kejadian tertentu yang tidak akan pernah terjadi. Dua atau lebih proses dikatakan berada dalam kondisi deadlock, bila setiap proses yang ada menunggu suatu kejadian yang hanya dapat dilakukan oleh proses lain dalam himpunan tersebut.
Deadlock yang mungkin dapat terjadi pada suatu proses disebabkan proses itu menunggu suatu kejadian tertentu yang tidak akan pernah terjadi. Dua atau lebih proses dikatakan berada dalam kondisi deadlock, bila setiap proses yang ada menunggu suatu kejadian yang hanya dapat dilakukan oleh proses lain dalam himpunan tersebut.
Comments
Post a Comment