Senin, 10 November 2014

TRANSAKSI

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.  Untuk menjamin agar integritas dapat tetap terpelihara maka setiap transaksi harus memiliki sifat-sifat:
1.      Atomik, dimana semua operasi dalam transaksi dapat dikerjakan seluruhnya atau tidak sama sekali.
2.      Konsisten, dimana eksekusi transaksi secara tunggal harus dapat menjamin data tetap konsisten setelah transaksi berakhir.
3.      Terisolasi, 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.      Bertahan, dimana perubahan data yang terjadi setelah sebuah transaksi berakhir dengan baik, harus dapat bertahan bahkan jika seandainya sistem menjadi 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:


OPERASI TRANSAKSI
Didalam transaksi, terdapat dua buah operasi untuk menjaga integritas dan ketahanan data, diantaranya dengan melakukan operasi commit dan rollback.

Praktik Transaksi

COMMIT

Buka 2 jendela Run SQL Command Line dengan latar yang berbeda dan log in dengan user yang sama (disini saya menggunakan latar berwarna hitam dan ungu)



Buat table dan sequence untuk mengisi id yang terurut


Lalu isi field huruf sebagai berikut di Notepad++/Sublime text terlebih dahulu


Setelah membuat table huruf, tampilkan table tersebut




Jika data sudah keluar, sekarang tambahkan data pada tabel huruf di SQL command line yang berwarna hitam


Kemudian tampilkan data pada command line yang hitam


Buka juga di SQL command line yang berlatar ungu

Setelah itu kita lihat jendela yang berlatar hitam dan ungu, perbedaannya di yang berlatar hitam sudah berisi huruf 'G', sedangkan pada latar ungu masih sampai huruf 'F'

Mengapa? Inilah yang disebut dengan transaksi memasukan data pada SQL command line berlatar hitam belum selesai.
Untuk menandakan bahwa pemasukkan data tersebut telah selesai dan sukses, maka kita perlu menyatakan bahwa transaksi tersebut commit
Lalu ketik perintah commit pada SQL command line pada latar hitam



9. Sekarang coba tampilkan datanya di SQL command line yang berlatar ungu





Jadi, Commit berfungsi untuk menandakan bahwa transaksi telah selesai dilaksanakan.


SAVEPOINT

Savepoint merupakan titik aman, dimana kita telah menyelesaikan satu atau beberapa transaksi. Fungsi dari savepoint itu sendiri adalah supaya pada saat kita ingin rollback atau ada transaksi yang gagal, transaksi tidak akan berjalan dari awal kembali, tetapi dari savepoint yang telah kita buat.
Kita coba savepoint dan input data lagi ke tabel huruf



2. tampilkan data yang ada pada tabel huruf, maka akan tampil seperti ini








ROLLBACK
Disini kita akan coba menggunakan perintah rollback


Setelah rollback complete, tampilkan isi data tabel huruf dan tampilan akan kembali di savepoint yang kita buat sebelumnya



Jadi, Rollback berfungsi untuk memberitahukan bahwa transaksi harus diulang karena adanya suatu kegagalan.