Transaksi
adalah satu atau beberapa aksi program aplikasi yang mengakses/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. 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.
Operasi Transaksi Pada Oracle
Commit berfungsi untuk
menandakan bahwa transaksi telah dilaksanan.
Rollback berfungsi untuk
memberitahukan bahwa transaksi harus diulang karena adanya suatu kegagalan.
Berikut contohnya:
Pertama marilah kita buat
tabel yang bernama “dicoba”.
Setelah itu marilah kita isi
datanya serta membuat sequencenya:
Terus mari kita
mainkan commit dan rollbacknya. Sebelumnya mari kita buka SQL Command Line
dengan latar yang berbeda, seperti gambar dibawah ini:
--saya
memakai warna hitam dan abu-abu.
Pastikan kita login dengan user yang sama.
Masih sama ya? Belom ada perbedaan, oke mari
kita bikin mereke berbeda..
Isi data berikut di Command Line yang latarnya
warna hitam.
Next mari kita tampilkan table tersebut di SQL Command Line yang berwarna hitam.
Jangan lupa di SQL
Command Line latar abu-abu kita tampilkan datanya.
Beda yaa??? Cieee bisa beda,, wkwkwkwk..
Why??? Jawabannya adalah karena transaksi memasukkan data pada Command Line berlatar hitam belum sepenuhnya berakhir. Untuk menandakan bahwa proses memasukkan data tersebut telah berakhir dan sukses, maka kita perlu menyatakan bahwa transaksi tersebut telah commit.
Gini cara commitnya:
Setelah itu kita coba tampilkan data di Command
Line yang berlatar abu-abu, pasti datanya sudah bertambah seperti yang ada di
Command Line yang hitam. Cieee sama.. sehati.. hehe..
Save Point
Save point 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)
·
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 isolasi
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.
·
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).
Tidak ada komentar:
Posting Komentar