TRANSAKSI
Transaksi adalah suatu aksi yang dilakukan program aplikasi untuk mengakses
atau mengubah isi basis data. Transaksi merupakan bagian dari pengeksekusian
sebuah program yang melakukan pengaksesan basis data dan bahkan juga melakukan
serangkaian perubahan data. Transaksi yang hanya dikerjakan sebagaian akan
menyebabkan inkonsistensi basis data.
Tujuan Transaksi adalah mencegah dari kehilangan atau kerusakan data. Untuk
menjamin agar
- Atomicity : Semua operasi dalam transaksi dapat dikerjakan seluruhnya atau tidak sama sekali integritas dapat teta terpelihara maka setiap transaksi harus memiliki sifat – sifat:
- Consistency : Menjamin data tetap kosisten saat transaksi berakhir
- Isolation : Jika terdapat sejumlah transaksi pada suatu system basis data, maka semua transaksi tersebut harus dapat dimulai dan bias diakhiri
- Durability : Jika system mati, maka perubahan data setelah transaksi harus bisa bertahan
Status
Transaksi
- Sukses–transaksi dikatakan commited dan database mencapai stata baru/stata berikutnya.
- Gagal–transaksi dikatakan aborted, dan database harus dikembalikan ke stata tetap sebelum dilakukannya transaksi. Transaksi seperti ini disebut roll back atau undone.
- Transaksi yang committed tidak dapat digagalkan. Transaksi yang digagalkan akan dilakukan rollback yang dapat diproses ulang(restarted) diwaktu mendatang
Operasi Transaksi Pada Oracle
Dalam transaksi terdapat dua operasi penting yang berfungsi untuk
menjaga dan ketahanan data , yaitu Commit dan Rollback. Commit
adalah memberi tanda bahwa transaksi telah selesai. Sedangkan Rollback
adalah untuk menggunakan tanda bahwa transaksi gagal. Semua update harus
di-undo.
Sebuah transaksi dapat menghasilkan dua kemungkinan:
- Jika dilaksanakan lengkap seluruhnya, transaksi tersebut telah di commit dan basis data mencapai keadaan konsisten baru.
- 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.
SAVEPOINT
Savepoint, sebuah titik dimana kita telah
selesai melakukan satu atau beberapa transaksi. Berfungsi
sebagai checkpoint untuk dipanggil oleh perintah rollback. Format
perintah membuat savepoint adalah
SAVEPOINT [NAMA_SAVE_POINT];
Rollback, perintah untuk mengulang transaksi (biasanya
karena ada kegagalan). Format penulisan perintah rollback adalah sebagi
berikut:
ROLLBACK;
Atau
ROLLBACK TO SAVEPOINT [nama_save_point];
ISOLASI TRANSAKSI
Isolasi Transaksi merupakan
tingkatan pengaruh antar transaksi yang dipengaruhi karena kinerja RDMS.
Didalam transaksi terdapat 3 hal yang harus dicegah, antara lain adalah :
- Dirty Read - Transaksi membaca data dari hasil transaksi lainnya yang gagal. Kedua transaksi tersebut berjalan bersamaan.
- Nonrepeatable Read - Transaksi membaca ulang data yang telah di baca sebelumnya karena data tersebut telah dimodifikasi oleh transaksi lainnya.
- Phantom Read - Transaksi membaca sebuah data yang telah hilang akibat dari transaksi yang lainnya.
Untuk mencegah terjadinya 3 hal
yang diatas, maka pada Oracle terdapat 2 level isolasi yang dapat
diimplementasika, antara lain :
- Read Commit - Transaksi hanya dapat melihat perubahan data setelah transaksi lain telah commit pada data tersebut.
- Serializable - 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) level ini, query SELECT hanya melihat data yang telah di COMMIT sebelum transaksi dimulai. Pada level ini juga jika transaksi mengandun DML (Data Manipulation Language) yang mencoba merubah data yang mungkin sudah dirubah pada transaksi lain yang belum di-commit maka perintah DML tersebut akan gagal. Berikut Contoh format penerapan perintah serializable:
SET TRANSACTION ISOLTION LEVEL SERIALIZABLE;
Pada transaksi database, dikenal
istilah locking yang berfungsi untuk menjaga integritas data. Terdapat dua
buah metode locking yaitu
:
-
Shared Lock (S-Lock)
Transaksi hanya bisa melakukan pembacaan. (dapat
dimiliki oleh beberapa transaksi dalam satu waktu.
-
Exclusive Lock (X-Lock)
Transaksi bisa melakukan
perubahan dan pembacaan terhadap data. (hanya dapat dimiliki oleh satu
transaksi pada satu waktu.
Penguncian Level Tabel
Berfungsi untuk mengunci suatu tabel untuk mencegah perubahan atau
penghapusan tabel oleh transaksi. Format penulisan perintah penguncian tabel
adalah:
LOCK TABLE [nama_tabel];
Penguncian Level Baris
Penguncian pada baris yang sedang digunakan oleh suatu transaksi sampai
transaksi tersebut selelsai dieksekusi(commit).Penguncian ini hanya
berlaku untuk operasi UPDATE dan DELETE.
Deadlock
Keadaan dimana dua atau lebih transaksi dalam kondisi wait-state,
satu sama lain menunggu lock dilepas sebelum di mulai.