Translate

Senin, 21 April 2014

Transaksi

Pada Pertemuan ke 7 Praktikum Sistem Basis Data tanggal 15 April 2014 membahas materi tentang Transaksi.

Transaksi adalah satu atau beberapa aksi yang dilakukan program aplikasi untuk mengakses atau mengubah isi basis data. Transaksi bertujuan untuk mencegah dari kehilangan ataupun kerusakan data. Sebuah transaksi berpeluang untuk mengganggu integritas basis data yang dapat membuat kondisi/hubungan antar data tidak seperti seharusnya.

Sifat sifat transaksi adalah :
  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.

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.

Dibawah ini adalah penerapan rollback dan commit.

Selamat mencoba...
  • Buat table baru seperti dibawah ini

  • Buat sequencenya dan masukan data dalam table seperti dibawah ini

  • Untuk penerapan commit dan rollback, buka dua SQL Command Line nya dengan latar berbeda supaya memudahkan membedakan mana inputan untuk pertama mana untuk kedua.

  • Langkah selanjutnya, bisa buat koneksi baru atau menggunakan koneksi lama , dan pastikan keduanya sudah terkoneksi.

  • Setelah dimasukkan datanya pada user 1, tampilkan dikedua jendela SQL tersebut . hasilnya akan berbeda karena user 1 belum dicommit maka tampilan di user2 akan muncul no rows selected, perhatikan gambar dibawah ini
  • Setelah dicommit, tampilan user1 dan user2 akan sama. Perhatikan gambar dibawah ini 
  • Masukan pada user1 command seperti dibawah ini

  • Kemudian select semua baik diuser1 maupun kedua. Terlihat berbedakan? Kenapa demikian? 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.


  • Setelah itu, masukan perintah berikut pada user1


  • Setelah dicommit, tampilan akan menjadi sama. Terlihatkan perbedaannya...


Selanjutnya adalah 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];

  • Buat perintah sebagai berikut

  • Untuk mencoba savepoint dan rollback buat perintah berikut ini

  • Beginilah tampilan setelah data baru dimasukan setelah save point tetapi belum di rollback

  • Setelah data diupdate, mari kita coba dirollback. Buat lah perintah seperti berikut 

  • Tampilan setelah dirollback akan kembali seperti semula. Lihat digambar



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.