Minggu, 20 April 2014

TRANSAKSI

Pada hari selasa, 15 April 2014 di praktikum mata kuliah Sistem Basis Data, kita baru saja belajar mengenai Transasksi pada oracle.

Sesuai dengan definisinya yang sering dikatakan berulang-ulang oleh Dosen Saya, Transaksi adalah Suatu proses yang menghasilkan Data, yang berfungsi untuk melindungi data dari kehilangan dan kerusakan pada data itu sendiri.

Untuk menjam integritas dari data agar tetap dapat terpelihara dengan baik, transaksi memiliki sifat-sifat yang disebut ACID (singkatan dari keempat sifat yang dimiliki oleh transaksi), yaitu:
  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

Ada dua operasi transaksi pada ORACLE, di Operasi Transaksi tersebut berfungsi untuk menjaga integritas data dan ketahanan data, yakni:

1. Commit
COMMIT itu berfungsi untuk menandakan bahwa transaksi TELAH SELESAI dilaksanakan, sedangkan

2. Rollback
ROLLBACK berfungsi untuk memberitahukan bahwa transaksi HARUS DIULANG karena adanya kegagalan.

Agar kita tambah paham dari materi Transaksi ini, kita coba kasih sedikit Contoh.
Pertama kita buat User/Database Baru pada terminal / run sql masing-masing, misalnya “Transaksi”, lalu buat tabel biasa seperti query dibawah ini dengan nama table transaksi.


Terus kita isi tabelnya:


Tampilan di terminal akan seperti ini:
tampilan terminal 1
Kita buka terminal satu lagi dan connect dengan user yang sama, lalu lakukan perintah yang sama (SELECT * FROM TRANSAKSI),
tampilan terminal 2
Maka akan ditampilkan seperti gambar diatas, yakni “No Rows Selected”. Untuk itu kita perlu Commit, untuk menentukan bahwa transaksi sudah berhasil dilakukan, setelah kita ketik commit maka data yang seharusnya muncul di terminal lain yang menggunakan user yang sama, maka akan muncul, seperti gambar di bawah ini:

Pada terminal kedua akan muncul pula tampilan seperti di terminal pertama, jika kita ketik perintah (SELECT * FROM TRANSAKSI). 

Yang barusan namanya Commit, sekarang kita coba Rollback. Sebelum kita coba ollback kita membutuhkan SAVEPOINT atau titik aman agar jika transaksi gagal maka kita dapat kembali / rollback ke savepoint bukan dari awal lagi.
Pertama Kita buat savepoint dengan nama “transaksi_eheuy”,
udah gitu kita lakukan Kegiatan seperti mengupdate nama / delete column, tapi sekarang kita coba mengupdate salah satu nama yang ada pada table transaksi, Misalnya :

Adduuuuuuhh, salah Update (ceritanya kita salah update nama), tapi untungnya kita sudah membuat titik aman sebelumnya / savepoint, maka kegiatan kita yang barusan bisa di rollback dengan cara sbb:

Sebelum di rollback:

Setelah di rollback:

Data Kembali seperti posisi aman saat di savepoint, Tapi jika kita Rollback setelah kita commit sebelumnya, maka akan error!! Kenapa?? Itukambali lagi ke pengertian commit yang berarti data yang dimasukan sudah final, berhasil tanpa kesalahan dan jika commit dilakukan, rollback tidak bisa di lalukan. savepoint yang sudah di buat berarti lenyap dan tak bisa digunakan kembali, kecuali kita membuatnya lagi.
Dalam Transaksi, kita pun perlu mengenal ISOLASI TRANSAKSI, penjelasannya seperti berikut:
Dalam transaksi database, ada 3 hal yang harus dicegah yaitu:
1. Dirty Read
Transaksi membaca data dari hasil transaksi lainnya yang gagal. Kedua transaksi tersebut berjalan bersamaan.
2. Non-Repeatable Read
Transaksi membaca ulang data yang telah di baca sebelumnya karena data tersebut telahdi modifikasi oleh transaksi lainnya.
3. 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 :
1. 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 mengupdate 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; 
Isolasion level ini mencegah terjadinya Phantom Read.
Kita pun perlu mengenal LOCKING PROTOCOL, penjelasannya seperti berikut:

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.
Kemudian kita Bahas mengenai PENGUNCIAN LEVEL TABEL dan PENGUNCIAN LEVEL BARIS, dengan bahasan sebagai berikut:

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 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.

Terakhir pada bahasan ini, kita coba bahas pula tentang DEADLOCK, Deadlock adalah Merupakan situasi dimana dua atau lebih transaksi dalam kondisi wait-state, satu sama lain menunggu Lock dilepas sebelum di mulai.

Semoga kutipan resume praktikum sistem basis data ini bisa menjadi ilmu bagi kita semua. Semangat dan terus Belajar .   :) :)

Tidak ada komentar:

Posting Komentar