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. 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.
Ketika sebuah transaksi mulai dikerjakan, maka transaksi itu berada dalam status aktif. Jika terjadi penghentian sebelum operasi berakhir, maka transaksi segera beralih ke status gagal/failed. Namun, bila keseluruhan transaksi selesai dikerjakan, maka transaksi itu berada pada status berhasil sebagian/partially committed, dimana perubahan-perubahan data masih berada di dalam memori utama yang bersifat volatile/tidak permanen. Transaksi dalam status ini masih mungkin untuk pindah ke status failed, karena ada pembatalan transaksi baik sengaja maupun tidak. Jika tidak beralih ke status failed, maka nilai-nilai data yang ada di memori utama akan direkam ke dalam disk yang bersifat permanen. Begitu proses perekaman selesai, maka transaksi beralih ke status committed. Sementara itu, transaksi yang berada pada status failed, maka DBMS harus menjalan proses rollback. Proses tersebut dapat berupa:
· Mengulangi
pelaksanaan transaksi / restart,
yang dilakukan pada transaksi yang failed akbiat kemacetan perangkat keras
ataupun perangkat lunak dan bukannya penghentian transaksi secara sengaja oleh
user.
· Mematikan
transaksi / kill, yang
dilakukan untuk transaksi yang dihentikan secara sengaja oleh user atau akibat
adanya kesalahan lojik dalam penulisan aplikasi.
Begitu salah satu dari pilihan proses tersebut selesai
dilakukan, maka transaksi berpindah ke status batal (aborted).
Status berhasil sempurna/committed maupun
batal/aborted merupakan
status terminasi, yaitu status akhir dalam pelaksanaan transaksi.
Tidak ada komentar:
Posting Komentar