TRANSAKSI
Transaksi
adalah satu atau beberapa 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. 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.
Transaksi
bertujuan unuk mencegah dari kehilangan ataupun kerusakan data. 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:
- Atomicity, dimana semua operasi dalam transaksi dapat dikerjakan seluruhnya atau tidak sama sekali.
- Consistency, dimana eksekusi transaksi harus dapat menjamin data tetap konsisten setelah transaksi berakhir.
- Isolation, 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.
- Durability, dimana perubahan data yang terjadi setelah sebuah transaksi berakhir dengan baik, harus dapat bertahan bahkan jika seandainya sistem mati.
- Operasi Transaksi pada Oracle
Commit
berfungsi untuk menandakan bahwa
transaksi telah selesai dilaksanakan.
Rollback
berfungsi untuk memberitahukan bahwa
transaksi harus diulang karena adanya suatu kegagalan.
- Save Point
Save Point secara
sederhana merupakan sebuah titik aman, dimana kita telah menyelesaiakan satu
atau beberapa transaksi. Save point dianalogikan seperti sebuah check point
saat kita bermain game. 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 poin
yang telah kita buat.
Untuk
membuat sebuah save point, caranya adalah :
SAVEPOINT[nama
save point];
Setelah
dibuat save pointnya 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.
- Dirty Read, transaksi membaca data dari hasil transaksi lainnya yang gagal. Kedua transaksi tersebut berjalan bersamaan.
- Non-Repeatable Read, transaksi membaca ulang data yang telah di baca sebelumnya karena data tersebut telah di modifikasi oleh transaksi lainnya
- 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 :
- 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.
- Locking Protocol
Pada
transaksi database, dikenal istilah locking yang berfungsi untuk menjaga
integritas data. Terdapat dua buah metode locking yaitu :
- Shared Lock (S-LOCK)
Jika
transaksi memiliki shared lock pada suatu data, transaksi tersebut hanya bisa
melakukan pembacaan.
2. Exclusive Lock (X-LOCK)
Bagi
transaksi yang memiliki exclusive lock pada suatu data, transaksi tersebut
dapat melakukan perubahan dan pembacaan terhadap data tersebut. Untuk
shared lock, dapat dimiliki oleh beberapa transaksi dalam satu waktu, namun
untuk exclusive lock, hanya dapat dimiliki oleh satu transaksi pada satu waktu.
- Penguncian Level Tabel
Penguncian
yang berfungsi untuk mengunci suatu tabel untuk mencegah perubahan atau
penghapusan tabel selama ada transaksi yang menggunakan tabel tersebut.
Untuk
melakukan perintah penguncian tabel, adalah sebagai berikut.
LOCK TABLE [nama tabel];
- Penguncian Level Baris
Penguncian
yang dilakukan pada baris (ROW) yang sedang digunakan oleh suatu transaksi
sampai transaksi tersebut selesai dilakukan. Penguncian level baris hanya
berlaku untuk operasi UPDATE dan DELETE.
- DeadLock
Merupakan
situasi dimana dua atau lebih transaksi dalam kondisi wait-state, satu sama
lain menunggu Lock dilepas sebelum di mulai (Yudi Wibisono).
Referensi :
- Modul TRANSAKSI.pdf Sistem basis data 2014 (UPI)
-
Slide Pak Yudi Wibisono
- Modul Sistem Basis Data 2012 (UPI)
Untuk download file sql untuk percobaan transaksi bisa di download di :
Itu file sql catatan waktu praktikum berlangsung~ have fun -____- hehe. Dan untuk modul praktikumnya tidak bisa diposting karena yang bikin para asdos, jadi harus ada ijin dari mereka, tulisan diatas juga bagian dari modul, tapi pengetahuannya bersifat umum(?) sorry~~