PENGERTIAN
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.
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.
Transaksi bertujuan untuk mencegah dari kehilangan
ataupun kerusakan data. 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.
Terhentinya suatu transaksi tidak selalu diakibatkan oleh kegagalan
insidental baik dari perangkat keras (crash) ataupun kemacetan sistem operasi
(hang). Tapi lebih sering terjadi karena
user sengaja menghentikan transaksi atau karena penghentian transaksi oleh DBMS
akibat adanya kondisi tak diinginkan, seperti deadlock atau timeout.
Sebuah transaksi dapat menghasilkan dua kemungkinan:
a. Jika
dilaksanakan lengkap seluruhnya, transaksi tersebut telah di commit dan basis data mencapai keadaan
konsisten baru.
b. 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.
Status-status
yang dapat dicapai oleh sebuah transaksi sejak mulai dilaksanakan hingga
selesai atau batal adalah:
1.Aktif (Active) yang merupakan status awal
(initial state) sebuah transaksi yang menunjukkan transaksi tersebut masih
dieksekusi.
2.Berhasil Sebagian (Partially Committed), yaitu keadaan
yang dicapai transaksi tepat pada saat operasi terakhir dalam transaksi selesai
dikerjakan.
3.Gagal (Failed), yang merupakan keadaan dimana
sebuah transaksi terhenti pengeksekusiannya sebelum tuntas sama sekali.
4.Batal (Aborted), yaitu keadaan dimana sebuah
transaksi dianggap tidak/belum dikerjakan yang tentu dengan terlebih dahulu
diawali dengan mengembalikan semua data yang telah diubah ke nilai-nilai
semula. (yang menjadi tanggung jawab DBMS).
5. Berhasil Sempurna (Committed), keadaan dimana
transaksi telah dinyatakan berhasil dikerjakan seluruhnya dan basis data telah
merefleksikan perubahan-perubahan yang memang diinginkan transaksi.
Diagram berikut ini menunjukkan aliran dan siklus peralihan status (state) dari sebuah transaksi:
Ketika sebuah transaksi mulai
dikerjakan, maka transaksi itu berada dalam status aktif. Jika terjadi penghentian sebelum operasi
berakhir, maka transaksi segera beralih ke status gagal/failed. Namun, bila keseluruhan transaksi selesai
dikerjakan, maka transaksi itu berada pada status berhasil
sebagian/partially committed, dimana perubahan-perubahan data masih berada
di dalam memori utama yang bersifat volatile/tidak permanen.
Transaksi dalam status ini masih mungkin
untuk pindah ke status failed, karena ada pembatalan transaksi baik sengaja
maupun tidak. Jika tidak beralih ke
status failed, maka nilai-nilai data yang ada di memori utama akan direkam ke
dalam disk yang bersifat permanen.
Begitu proses perekaman selesai, maka transaksi beralih ke status committed. Sementara itu, transaksi yang berada pada
status failed, maka DBMS harus menjalan proses rollback. Proses tersebut dapat berupa:
· Mengulangi
pelaksanaan transaksi / restart, yang dilakukan pada transaksi yang
failed akbiat kemacetan perangkat keras ataupun perangkat lunak dan bukannya
penghentian transaksi secara sengaja oleh user.
· Mematikan
transaksi / kill, yang dilakukan untuk transaksi yang dihentikan secara
sengaja oleh user atau akibat adanya kesalahan lojik dalam penulisan aplikasi.
Begitu salah satu dari pilihan proses
tersebut selesai dilakukan, maka transaksi berpindah ke status batal (aborted). Status berhasil sempurna/committed maupun batal/aborted
merupakan status terminasi, yaitu status akhir dalam pelaksanaan transaksi
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.
mari kita coba:
Commit
Commit
- buat tabel buat sequence lalu insert data
- Kita akan coba penerapan commit dan rollback sekarang, buka 2 jendela SQL Command Line kemudian login dengan user yang sama.
- lalu masukan data yang tadi kita ketik ke salah satu command line. lalu setelah
memasukan data-data di comman line pertama, select di kedua command line tsb.
- langkah selanjutnya insert data di command line pertama lalu select di kedua command line
-nah terlihat di command line kedua tidak muncul data insert yang terbaru. maka ketik commit di command line pertama setelah itu select kembali di command line yang kedua
Save Point
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
Rollback
-nah terlihat di command line kedua tidak muncul data insert yang terbaru. maka ketik commit di command line pertama setelah itu select kembali di command line yang kedua
Save Point
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];
Berikut contoh membuat savepoint:
Rollback
Rollback, perintah untuk mengulang transaksi (biasanya karena ada kegagalan). Format penulisan perintah rollback adalah sebagi berikut:
ROLLBACK;
Atau
ROLLBACK TO SAVEPOINT [nama_save_point];
Contoh:
Setelah kita membuat savepoint, kita bisa memanggil lagi savepoint tersebut. Untuk contoh kita hapus dulu isi data lalu kita coba tampilkan sebagai berikut:
- Sekarang kita rollback data ke savepoint coba dan tampilkan isi tabel coba;
- Data kembali ke keadaan savepoint
Isolasi Transaksi
Dalam transaksi pada sistem basis data ada 3 hal yang harus dicegah:
1. Dirty read
Dua transaksi berjalan bersama, dan salah satu transaksi membaca hasil transaksi lainnya yang gagal
2. Non-repeatable read
Transaksi membaca ulang data yang telah dibaca sebelumnya karena telah diubah oleh transaksi lain yang berjalan bersamaan.
3. Phantom read
Transaksi membaca data yang telah hilang oleh transaksi lainnya Untuk mencegah 3 hal di atas, Oracle memiliki 2 level isolasi, yaitu:
1. Read Command
Transaksi hanya bisa membaca data yang telah selesai di eksekusi (commit) oleh transaksi lain.
2. Serializable (mencegah Phantom read)
Proses transaksi di-serial-kan, artinya transaksi satu akan berjalan setelah transaaksi lainnya selesai. Tetapi aplikasi yang menerapkan level isolasi ini harus bersedia mengulangi transaksi akibat kegagalan penserialan transaksi.
Pada 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;
Locking berfungsi untuk menjaga integritas data. Ada 2 buah metode locking:
1. Shared Lock (S-Lock)
Transaksi hanya bisa melakukan pembacaan. (dapat dimiliki oleh beberapa transaksi dalam satu waktu.
2. Exclusive Lock (X-Lock)
Transaksi bisa melakukan perubahan dan pembacaan terhadap data. (hanya dapat dimiliki oleh satu transaksi pada satu waktu.
2. 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];
3. 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.
4. Dealock
Keadaan dimana dua atau lebih transaksi dalam kondisi wait-state, satu sama lain menunggu lock dilepas sebelum di mulai.(Yudi wibisono).
terimakasih atas infonya
BalasHapusAlat pemisah lcd touch