Senin, 21 April 2014

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.
1. Commit berfungsi untuk menandakan bahwa transaksi telah selesai dilaksanakan.
2. Rollback berfungsi untuk memberitahukan bahwa transaksi harus diulang karena adanya suatu kegagalan.

Nah, sekarang kita praktek untuk penerapan commit sama rollbacknya.

Pertama, buka dulu SQL Command Line nya :)



Setelah itu, connected lalu masukkan user dan password kamu :


Sekarang, kita coba buat table nya dulu, misalkan nama table nya tabel nyobaan


jangan lupa buat sequence dan isi tabelnya juga yaaaaaaaa :)



Kalo udah, kita coba lihat isi dari tabel nyobaan yang udah kita buat tadi, tampilannya  kurang lebih bakalan seperti ini :


Terus kapan dong commit sama rollbacknya ??? sabar sabar hehe, sekarang biar tahu dimana penerapan commit sama rollbacknya, kita buka 2 jendela SQL command line nya :)


Biar gampang bedainnya, kita ganti salah satu background command line nya, terus di masing-masing command line, kita log in menggunakan user yang sama. setelah berhasil log in, kita tampilkan data yang ada di tabel nyobaan tadi (tabel yang sebelumnya sudah kita buat)


Data di command line 1 dan 2 masih sama kaaaan, gak ada yang beda. sekarang kita coba kita insert lagi data di command line yang berlatar hitam


lalu kita select * lagi di kedua command line, coba kita lihat ada yang beda gak yaaaaaaaaaaaaaa hehe



Nah lhoooooooooo ternyata ada yang beda, di command line yang hitam data nya udah nambah,s ementara di command line yang putih datanya tetep. kira-kira kenapa yaaaaaa ?

Itu terjadi karena data yang ditambahkan belum dicommit, inget kan bahwa commit berfungsi untuk menandakan bahwa transaksi telah selesai dilaksanakan.

Sekarang biar bener, kita commit dulu data yang tadi, caranya :


Kalo udah beres dicommit, sekarang kita coba tampilin data yang ada di command line warna putih :



Tuh kaaan, kalo udah dirollback transaksinya, maka kedua data sama :)

SAVE POINT

Save Point secara sederhana merupakan sebuah titik aman, dimana kita telah menyelesaiakan satu atau beberapa transaksi. Save point dapat dianalogikan seperti sebuah check point saat kita bermain game.
Fungsi dari save point adalah agar 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];

Kita langsung praktekin yaaaaaa, misalkan nih kita tambahin lagi data ke tabel nyobaan tadi



Sekarang, kita bikin savepointnya, misalkan nama savepointnya rifkanis



Kalo savepointnya udah jadi, tinggal kita rollback ke savepoint yang udah kita buat tadi, dan ketika kita mau menampilkan data yang terakhir kita buat, maka data terakhir lah yang akan muncul, data akan tetap ada tanpa kita harus kehilangan atau memulai lagi dari awal.



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



Isolasi 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 :

 Shared Lock (S-LOCK)
Jika transaksi memiliki shared lock pada suatu data, transaksi tersebut hanya bisa melakukan pembacaan.

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

-------------------------------------*************************--------------------------------------

Itu tadi sekilas tentang transaksi pada oracle, semoga bisa bermanfaat dan mohon maaf apabila banyak kesalahan :)