Minggu, 19 Mei 2013

Integritas Data dan Transaksi

Sudah lama tidak bersua di blog akhirnya saya ngeblog lagi karena rada “dipaksa” sama dosen alias tugas. Hehe.. Tugasnya itu diminta untuk menjelaskan secara general mengenai sistem basis data (jadi rada serius). Hehe.. oke kita mulai topic yang sangat serius ini :)

Integritas basis data atau sering disebut database integrity adalah suatu masalah utama di dalam database yang berusaha agar menjaga data tetap konsisten atau valid, karena suatu data seharusnya mengikuti sejumlah karakteristik dasar sesuai ketentuan yang telah ditentukan. Penerapan aturan-aturan ini akan dapat menghindarkan basis data dari upaya-upaya atau kesalahan yang biasanya tidak disengaja, khususnya dalam melakukan pemanipulasian data, yang dapat membuat basis data menjadi tidak konsisten atau integritasnya terganggu.

 Jenis-jenis integritas data yang harus dipelihara dalam basis data adalah sebagai berikut,
1. Integritas Entitas (Entity Integrity), dimana tidak ada baris data duplikat dalam satu table
2. Integritas Jangkuan (Domain Integrity), dimana tidak ada item data yang melanggar jangkuan nilai di tiap kolom data
 3. Integritas Acuan (Referential Integrity), yang menjaga relasi/korespodensi antar table
4. Integritas Data Antar Tabel (Redundant Data Integrity), dimana data di sebuah table tidak terulang di table lain

Setelah kita membahas Integritas data lalu kita lanjut akan membahas tentang Transaksi. Apa sih transaksi? Dan bagaimana cara kerjanya? Oke let’s check it out!

Transaksi di dalam sebuah basis data dapat didefinisikan sebagai serangkaian aksi yang mengandung pengaksesan basis data dan bahkan juga dapat mengandung serangkaian perubahan data. Sebuah transaksi umumnya terdiri atas sejumlah operasi yang membentuk sebuah satuan kerja lojik.DBMS yang kita gunakan harus dapat menjamin bahwa setiap satuan transaksi harus dapat dikerjakan secara utuh atau tidak sama sekali. Tidak boleh terjadi ada transaksi yang hanya dikerjakan sebagian karena hal ini dapat mengakibatkan adanya inkonsistensi basis data.

Untuk menjamin agar integritas data tetap terpelihara, maka setiap transaksi harus memiliki sifat-sifat seperti berikut ini,
 - Atomicity Ini berarti bahwa transaksi haruslah berhasil secara keseluruhan, atau gagal sama sekali.
 - Consistency Menjaga konsistensi data di database
 - Isolation Transaksi yang dilakukan secara bersamaan haruslah bisa dimulai dan bisa berakhir. 
- Durability Setelah transaksi berakhir, data yang berubah tidak boleh kembali ke data awal walaupun sistem mati.

Pada transaksi, terdapat dua buah operasi yang berfungi untuk menjaga integritas data dan ketahanan data, yaitu commit dan rollback. Commit berfungsi untuk menandakan bahwa transaksi telah selesai dilaksanakan. Rollback berfungsi untuk member tahu bahwa transaksi harus diulang karena ada suatu kegagalan.

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.
 - NONREPEATABLE 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 peng-serial-an 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.

Tidak ada komentar:

Posting Komentar