TRANSAKSI
Transaksi
adalah satu atau beberapa aksi yang dilakukan program aplikasi untuk mengakses
atau mengubah isi basis data. Transaksi harus dapat dikerjakan secara utuh atau
tidak sama sekali untuk menjamin konsistensi data. Transaksi bertujuan untuk
melindungi database dari kehilangan data dan kerusakan.
4
elemen yang harus dimiliki transaksi demi menjamin integritas data, yaitu:
- Atomicity, semua operasi dalam transaksi dapat dikerjakan seluruhnya atau tidak sama sekali, dengan kata lain, harus semua operasi berhasil atau semua operasi gagal.
- Consistency, eksekusi transaksi harus menjamin konsistensi data setelah transaksi berakhir.
- Isolation, jika terdapat transaksi yang dilaksanakan secara bersamaan, maka semua transaksi tersebut harus dapat dimulai dan bisa berakhir.
- Durability, perubahan data yang terjadi setelah commit harus bertahan di database bahkan jika sistem mati.
Operasi penting transaksi untuk
menjaga integritas dan ketahanan data ada dua, yaitu:
- Commit : untuk memberi tanda bahwa transaksi telah selesai dilaksanakan.
- Rollback : untuk memberi tanda bahwa transaksi gagal dan harus diulang.
Penerapan commit dan rollback:
- Buat tabel
- Buat sequence, lalu masukkan data
- Buka dua jendela SQL Command Line, jangan lupa beri warna yang berbeda agar tidak tertukar
- Login dengan user yang sama, kemudian tampilkan data yang telah dibuat sebelumnya
- Masukkan data di SQL Command Line warna hitam
- Tampilkan data tersebut di SQL Command Line warna hitam
- Tampilkan juga di SQL Command Line warna abu-abu
- Ketik perintah commit di SQL Command Line warna hitam untuk menyatakan transaksi telah berakhir, sehingga data terakhir akan masuk ke SQL Command Line abu-abu
- Data di SQL Command Line abu-abu sudah bertambah dan akan sama dengan data di SQL Command Line warna hitam
SAVE POINT
Save Point merupakan suatu titik
aman, di mana kita telah menyelesaikan satu atau beberapa transaksi. 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 point
yang telah kita buat.
Cara membuat save point:
SAVEPOINT [nama save point];
Cara rollback ke save point:
ROLLBACK TO [nama save point];
ISOLASI TRANSAKSI
Derajat pengaruh antar transaksi.
Ada 3 hal yang harus dicegah dalam
transaksi, yaitu:
- Dirty Read
Transaksi membaca
data dari hasil transaksi lain yang gagal atau dengan kata lain transaksi dapat
melihat record yang sudah dirollback atau belum dicommit oleh transaksi lain.
Kedua transaksi berjalan bersamaan.
- Nonrepeatable Read
Transaksi membaca
ulang data yang telah dibaca sebelumnya karena telah dimodifikasi transaksi
lain. Saat membaca ulang data, nilainya sudah berubah akibat modifikasi yang
dilakukan transaksi lain tersebut.
- Phantom Read
Transaksi membaca
data yang telah hilang dari transaksi yang lainnya.
Terdapat dua level isolasi untuk mencegah ketiga hal di atas,
yaitu:
- Read Commited
Transaksi dapat
melihat perubahan data hanya setelah transaksi lain commit pada data tersebut.
- Serializable
Serializable
adalah level isolasi yang menyediakan isolasi transaksi yang paling ketat. Level
ini membuat transaksi dieksekusi satu persatu, tidak bersamaan. Perintah untuk
mengaplikasikan level isolasi Serializable:
SET TRANSACTION
ISOLATION LEVEL SERIALIZABLE;
LOCKING PROTOCOL
Locking berfungsi untuk menjaga integritas data. Locking
dilakukan jika sebuah transaksi ingin record tidak berubah dalam waktu
tertentu.
Ada dua metode locking, yaitu:
- Shared Lock (S-LOCK)
Transaksi yang
memiliki shared lock pada suatu data hanya bisa melakukan pembacaan.
- Exclusive Lock (X-LOCK)
Transaksi yang
memiliki exclusive lock pada suatu data dapat melakukan perubahan dan
pembacaan.
PENGUNCIAN LEVEL TABEL
Penguncian level tabel berfungsi untuk mengunci suatu tabel
untuk mencegah perubahan atau penghapusan tabel selama ada transaksi yang
menggunakan tabel tersebut.
Perintahnya:
LOCK TABLE [nama tabel];
PENGUNCIAN LEVEL BARIS
Penguncian level baris adalah penguncian yang dilakukan pada
baris yang sedang digunakan oleh suatu transaksi sampai transaksi tersebut
selesai dilakukan yang hanya berlaku untuk operasi UPDATE dan DELETE.
DEADLOCK
Deadlock merupakan situasi dimana dua atau lebih transaksi
dalam kondisi wait-state, satu sama lain menunggu Lock dilepaskan sebelum dapat
memulai.
Sumber:
- Modul Sistem Basis Data - Transaksi
- Slide Transaksi Pak Yudi Wibisono