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:
1. Atomicity, dimana semua operasi dalam transaksi dapat
dikerjakan seluruhnya atau tidak sama sekali.
2. Consistency, dimana eksekusi transaksi harus dapat
menjamin data tetap konsisten setelah transaksi berakhir.
3. 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.
4. Durability, dimana
perubahan data yang terjadi setelah sebuah transaksi berakhir dengan baik,
harus dapat bertahan bahkan jika seandainya sistem mati.
OPERASI TRANSAKSI PADA ORACLE
Didalam transaksi, terdapat dua buah operasi untuk menjaga
integritas dan ketahanan data, diantaranya dengan melakukan operasi commit dan
rollback.
è
Commit berfungsi untuk menandakan bahwa
transaksi telah selesai dilaksanakan.
è
Rollback berfungsi untuk memberitahukan bahwa
transaksi harus diulang karena adanya suatu kegagalan.
Untuk mencoba, mari ikuti langkah berikut:
1.
Connect dulu ke oracle. Dengan membuka Run SQL
command Line dengan user dan password yang kamu tuju.
2.
Buat sebuah table
create table dicoba(
id_coba
number
primary key,
nama
varchar2(20) not null
);
--buat sequence
create sequence seq_idcoba
increment by
1;
--input
tablenya
insert into dicoba
values
(seq_idcoba.nextval,'A');
insert into dicoba
values
(seq_idcoba.nextval,'B')
insert into dicoba
values
(seq_idcoba.nextval,'C');
insert into dicoba
values
(seq_idcoba.nextval,'D');
insert into dicoba
values
(seq_idcoba.nextval,'E');
dan teng teng jreng jreng inilah hasilnya. (haha
apasih gaje).
Oke sekarang kita ke langkah selanjutnya.
1.
Untuk mengetahui perbedaan Commit dan rollback,
coba langkah berikutSQL Command Line dengan latar yang berbeda.
2.
Setelah itu kamu pastikan keduanya login dengan
user yang sama, misalkan usernya itu Transaksi. Kalau udah, kita tampilkan dulu
data yang tadi kita buat sebelumnya dikedua SQL Command Line tersebut.
3.
Coba kamu
ketikkan
insert into dicoba
values
(seq_idcoba.nextval,'F');
pada command line yang pertama.
Lalu commit Run SQL Command Line yang
pertama setelah di insert into.
--untuk
menandakan bahwa proses telah selesai dilakukan
Commit;
--untuk kembali
pada proses yang telah di commit
rollback;
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 (aku sih lebih suka menyebutnya dengan penandaan). 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];
Missal:
Savepoint a;
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.
a.
Dirty
Read Transaksi membaca data dari hasil transaksi lainnya yang gagal. Kedua
transaksi tersebut berjalan bersamaan.
b.
Non-Repeatable Read Transaksi membaca ulang
data yang telah di baca sebelumnya karena data tersebut telah di modifikasi
oleh transaksi lainnya.
c.
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 :
a.
Read
Commited Transaksi hanya dapat
melihat perubahan data setelah transaksi lain telah commit pada data tersebut.
(Seperti dalam contoh commit)
b.
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 :
a.
Shared
Lock (S-LOCK) Jika transaksi memiliki
shared lock pada suatu data, transaksi tersebut hanya bisa melakukan pembacaan.
b.
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
Rachmi Mulyani || 1200550 || c2