Apa itu
TRANSAKSI ???
Secara
singkat transaksi adalah kejadian yang
menghasilkan data. Untuk lebih jelasnya Transaksi merupakan bagian dari
pengeksekusian sebuah program yang melakukan pengaksesan basis data dan bahkan
juga melakukan serangkaian perubahan data. Pada transaksi kita harus mengenal
isitilah DBMS. DBMS yaitu mengijinkan banyak
transaksi pada saat bersamaan
untuk mengakses data yang sama . 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. Tujuan transaksi adalah menjaga
agar data tidak rusak.
Untuk menjamin agar integritas dapat tetap
terpelihara maka setiap transaksi harus memiliki sifat-sifat:
1. Atomicity : Semua operasi dalam transaksi dapat dikerjakan seluruhnya atau
tidak sama sekali (semua transaksi berhasil atau semua gagal)
2. Consistency : Eksekusi transaksi harus dapat menjamin data
tetap konsisten setelah transaksi berakhir.
3. Isolation : Transaksi terisolasi satu dengan yang lain.
4. Durability : Setelah commit update harus survive di database
Dua operasi
penting pada Transaksi :
1. Commit : Memberi tanda bahwa transaksi telah SELESAI. Update dibuat permanen (bahkan jika
setelah commit terjadi kegagalan system)
2. Rollback : Memberi tanda bahwa transaksi GAGAL
Setelah anda
tahu materi transaksi, anda bisa mencoba
program nya J
Anda bisa
lihat contoh program transaksi yang terdapat di internet.
Sekilas
script pada program transaksi :
SAVE POINT
Merupakan
titik aman, dimana kita telah menyelesaikan satu atau beberapa transaksi.
Fungsinya yaitu agar pada saat kita rollback atau ada transaksi yang gagal,
transaksi tidak berjalan dari awal
kembali, tetapi dari save point yang telah kita buat.
Untuk
membuat sebuah save point, caranya : SAVEPOINT
[nama save point];
setelah itu
kita dapat rollback ke save point tersebut dengan cara : ROLLBACK TO [nama save point];
ISOLASI TRANSAKSI
Dalam transaksi
database, ada 3 hal yang harus dicegah yaitu :
1. Dirty Read, Transaksi membaca data dari hasil transaksi lainnya yang gagal.
Kedua transaksi tersebut berjalan
bersamaan
2. Non-Repeatable Read, Transaksi membaca ulang data yang telah di baca sebelumnya
karena data tersebut telah di modifikasi oleh transaksi lainnya.
3. 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 :
1. Read Commited , transaksi hanya dapat melihat perubahan data
setelah transaksi lain telah commit pada data tersebut. (Seperti dalam
contoh commit)
2. Serializable adalah level isolasi
yang menyediakan isolasi transaksi yang paling ketat. Level ini mengemulasikan
eksekusi transaksi secara serial, menjadikan transaksi dieksekusi satu setelah
yang lainnya,seperti secara serial, bukan secara bersamaan (pararel). Tetapi
aplikasi yang menggunakan level isolasi ini harus bersedia untuk mengulangi
transaksi dikarenakan kegagalan pengserialan transaksi. Saat transaksi berada
pada level serializable, sebuah query SELECT hanya melihat data yang di COMMIT
sebelum transaksi di mulai; transaksi tersebut tidak akan pernah melihat baik
data yang belum di COMMIT atau perubahan data yang terjadi selama eksekusi
transaksi oleh transaksi lain yang berjalan pada waktu bersamaan (e.g. saat
transaksi ini berjalan, ada transaksi lain yang melakukan COMMIT pada data).
Jika pada transaksi dengan level isolaso Serializable mengandung DML (Data
Manipulatin Language) yang mencoba untuk meng-update suatu data yang mungkin
sudah di update pada sebuah transaksi yang belum di commit pada awal transaksi
Serializable, maka perintah DML tersebut akan gagal. Untuk mengaplikasikan
level isolasi Serializable, adalah dengan menggunakan perintah :
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
Isolai level ini mencegah terjadinya Phantom Read