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.
Diagram berikut ini menunjukkan aliran dan siklus peralihan status (state) dari sebuah transaksi:
OPERASI
TRANSAKSI
Didalam transaksi, terdapat dua buah operasi untuk menjaga integritas dan ketahanan data,
diantaranya dengan
melakukan operasi commit dan
rollback.
Praktik Transaksi
COMMIT
Buka 2 jendela Run SQL Command Line dengan latar yang berbeda dan log in dengan user yang sama (disini saya menggunakan latar berwarna hitam dan ungu)
Buat table dan sequence untuk mengisi id yang terurut
Lalu isi field huruf sebagai berikut di Notepad++/Sublime text terlebih dahulu
Setelah membuat table huruf, tampilkan table tersebut
Jika data sudah keluar, sekarang tambahkan data pada tabel huruf di SQL command line yang berwarna hitam
Kemudian tampilkan data pada command line yang hitam
Buka juga di SQL command line yang berlatar ungu
Mengapa? Inilah yang disebut dengan transaksi memasukan data pada SQL command line berlatar hitam belum selesai.
Untuk menandakan bahwa pemasukkan data tersebut telah selesai dan sukses, maka kita perlu menyatakan bahwa transaksi tersebut commit
Lalu ketik perintah commit pada SQL command line pada latar hitam
9. Sekarang coba tampilkan datanya di SQL command line yang berlatar ungu
Jadi, Commit berfungsi untuk menandakan bahwa transaksi telah selesai dilaksanakan.
SAVEPOINT
Savepoint merupakan titik aman, dimana kita telah menyelesaikan satu atau beberapa transaksi. Fungsi dari savepoint itu sendiri adalah supaya pada saat kita ingin rollback atau ada transaksi yang gagal, transaksi tidak akan berjalan dari awal kembali, tetapi dari savepoint yang telah kita buat.
Kita coba savepoint dan input data lagi ke tabel huruf
2. tampilkan data yang ada pada tabel huruf, maka akan tampil seperti ini
ROLLBACK
Disini kita akan coba menggunakan perintah rollback
Setelah rollback complete, tampilkan isi data tabel huruf dan tampilan akan kembali di savepoint yang kita buat sebelumnya
Jadi, Rollback berfungsi untuk memberitahukan bahwa transaksi harus diulang karena adanya suatu kegagalan.










