wenyTHEpooh's Blog

Recovery dan Concurency

Posted on: March 12, 2011

Sebelum membuat program database menggunakan perintah “savepoint” dan “rollback”, ada baiknya kita mengetahui pengertian dan tujuan mengapa kita menggunakan perintah tersebut di dalam pembuatan database.

Perintah “savepoint” dan “rollback” terdapat dalam materi Concurency. Concurency adalah banyak transaksi yang dijalankan secara bersama-sama. Hampir semua DBMS adalah multiuser, sehingga berpeluang terjadinya inkonsistensi basis data. Maka perlu adanya pengendalian persaingan eksekusi transaksi (concurrency control).

Pengontrolan konkurensi merupakan salah satu fungsi dari DBMS. Pada DBMS terpusat yang multi-user, dapat mengakses sejumlah transaksi pada waktu bersamaan. Transaksi disini adalah suatu aksi atau serangkaian aksi yang dilakukan oleh seorang pemakai atau suatu program aplikasi, dimana dapat mengakses atau mengubah isi dari database.

Dua hasil transaksi adalah commit atau rollback.

Commit Adalah operasi yang menyatakan bahwa suatu transaksi sudah terselesaikan/ sukses (successfull end-of-transaction).

RollBack Adalah operasi yang menyatakan bahwa suatu transaksi dibatalkan (unsuccessfull end-of-transaction).

Untuk menjamin transaksi-transaksi yang dilakukan bersamaan berjalan sukses tanpa adanya tumpang tindih maka dibutuhkan mekanisme pengontrolan konkurensi, jika tidak timbul permasalahan:

 

Lost update

Permasalahan timbul pada saat operasi update berjalan sukses kemudian ditindih oleh operasi  update lain yang dilakukan oleh pemakai lain.

Uncommited dependency

Permasalahan timbul pada saat transaksi dibiarkan melihat hasil dari transasksi lain yang belum commit. Masalah ini timbul jika transaksi membaca suatu record yang sudah dimodifikasi oleh transaksi lain tetapi belum terselesaikan (uncommited), terdapat kemungkinan kalau transaksi tersebut dibatalkan (rollback).

Inconsistent analysis

Permasalahan timbul apabila suatu transaksi membaca beberapa nilai tetapi transasksi berikutnya memodifikasi salah satu nilai.

 

Teknik  Pengontrolan Konkurensi :

LOCKING

Apabila suatu transaksi mengakses suatu data maka suatu lock (kunci) dapat mencegah pengaksesan oleh transasksi lain.

Konsep dasar :

Ketika suatu transaksi memerlukan jaminan kalau record yang diingini tidak akan berubah secara mendadak, maka diperlukan kunci untuk record tersebut.


Fungsi kunci (lock)

Menjaga record tersebut agar tidak dimodifiksi transaksi lain.

Cara kerja dari kunci :

  • Kita asumsikan terdapat 2 (dua) macam kunci :
  • Kunci X (kunci eksklusif) dan kunci S (kunci yang digunakan bersama-sama)
  • Jika transaksi A menggunakan kunci X pada record R, maka permintaan dari transaksi B harus menunggu sampai nanti transaksi A melepaskan kunci
  • Jika transaksi A menggunakan kunci S pada record R, Maka :
  • Bila transaksi B ingin menggunakan kunci X, maka B harus menunggu sampai A melepaskan kunci tersebut.
  • Bila transaksi B ingin menggunakan kuni S, maka B bisa menggunakan kunci S bersama A

 

TIMESTAMPING

DEADLOCK adalah suatu situasi dimana dua atau lebih transaksi masing – masing menunggu (wait) suatu kunci yg ditahan oleh transaksi lain, untuk dilepaskan. 2 teknik menangani deadlock

  1. Deadlock prevention, DBMS mengamati transaksi apakah menimbulkan deadlock & tidak akan membiarkan deadlock terjadi
  2. Deadlock prevention and recovery, DBMS membiarkan terjadi deadlock, mengenalinya lalu menanganinya.

Time stamping untuk sebuah transaksi aksi merupakan suatu tanda pengenal yang unik yang menunjuk waktu mulai relatif dari transaksi.

Time stamp dapat berupa pembacaan pada kunci internal pada waktu transaksi dimulai, dapat berupa nilai dari suatu penunjuk logikal yang dapat bertambah setiap kali suatu transaksi baru dimulai.

RECOVERY DATABASE

Recovery Facilities

Sebuah DBMS sebaiknya menyediakan fasilitas-fasilitas berikut ini untuk membantu recovery :

Backup mechanism

Melakukan backup secara periodik terhadap basis data yang ada

Logging facilities

Mencatat transaksi-transaksi dan perubahan-perubahan yang terjadi terhadap basis data.

Checkpoint facility

Mengizinkan update terhadap basis data yang akan menjadi basis data yang permanen

Recovery manager

Mengizinkan sistem untuk restore basis data ke keadaan sebelum terjadi kerusakkan.

Setelah kita memahami sedikit tentang concurency dan penggunaan “savepoint” dan “rollback”, saatnya kita memulai menggunakan perintah tersebut pada program. Pertama, buka software Oracle Database ® Run SQL Command Line. Kemudian, login dengan user name: system dan Password yang telah kita tentukan sebelumnya saat menginstall software Oracle. Perintahnya, “conn system /awenay”. “system” merupakan username dan “awenay” merupakan passwordnya. Jika database berhasil terkoneksi, akan muncul statement “connected”. Tampilannya seperti gambar dibawah ini.

 

 

Setelah database terkoneksi, kita buat empat buah tabel dimana tabel-tabel tersebut nantinya akan berhubungan dengan adanya ”primary key” dan “foreign key”. Perintah untuk pembuatan tabelnya adalah sebagai berikut:

 

 

Pertama, kita membuat tabel “tko_cake” dengan atribut-atributnya yaitu: kd_tko dengan tipe data varchar yang berindeks 5, nm_tko dengan tipe data varchar yang berindeks 20, alamat_tko dengan tipe data varchar yang berindeks 30. Ketiga atribut tersebut tidak boleh kosong/ tidak diisi. Atribut kd_tko ditetapkan sebagai primary key dengan menggunakan perintah “constraint”.

Selanjutnya, kita membuat tabel “penjual” dengan atribut-atributnya yaitu: kd_penjual dengan tipe data varchar yang berindeks 5, nm_penjual dengan tipe data varchar yang berindeks 20, alamat dengan tipe data varchar yang berindeks 30, no_tlp dengan tipe data varchar yang berindeks 10. Keempat atribut tersebut tidak boleh kosong/ tidak diisi. Atribut kd_penjual ditetapkan sebagai primary key dengan menggunakan perintah “constraint”.

Kemudian, kita membuat tabel “pembeli” dengan atribut-atributnya yaitu: kd_pembeli dengan tipe data varchar yang berindeks 5, nm_pembeli dengan tipe data varchar yang berindeks 20, alamat dengan tipe data varchar yang berindeks 30, no_tlp dengan tipe data varchar yang berindeks 10. Keempat atribut tersebut tidak boleh kosong/ tidak diisi. Atribut kd_pembeli ditetapkan sebagai primary key dengan menggunakan perintah “constraint”.

Yang terakhir, kita membuat tabel “pengiriman” dengan atribut-atributnya yaitu: kd_pengiriman dengan tipe data varchar yang berindeks 5, tgl_kirim dengan tipe data “date” atau tanggal, kd_tko dengan tipe data varchar yang berindeks 5, kd_pembeli dengan tipe data varchar yang berindeks 5. Keempat atribut tersebut tidak boleh kosong/ tidak diisi. Atribut kd_pengiriman ditetapkan sebagai primary key dengan menggunakan perintah “constraint”. Atribut kd_tko ditetapkan sebagai foreign key, atribut ini menghubungkan tabel “pengiriman” dengan tabel “tko_cake”. Atribut kd_pembeli ditetapkan sebagai foreign key, atribut ini menghubungkan tabel “pengiriman” dengan tabel “pembeli.

Jika tabel telah terbentuk, maka akan muncul statement “table created”. Hasilnya seperti gambar diatas.

 

 

Jika telah selesai membuat tabel, kita masukkan satu data ke dalam setiap tabel. Perintah SQL nya seperti diatas. Sebagai contoh, kita ingin memasukkan record ke dalam tabel “tko_cake”. Nilai-nilai yang diinput adalah: data ‘123’ ke dalam field kd_tko, ‘cherry’ ke dalam field nm_tko, serta ‘seoul’ ke dalam field alamat_tko. Maka sintaks SQLnya adalah:

SQL> insert into tko_cake values (‘123’, ‘cherry’, ‘seoul’);

 

Untuk memasukkan record yang lainnya caranya sama seperti cara diatas.

 

Setelah kita memasukkan satu record ke dalam setiap tabel, lalu kita simpan transaksi tersebut dengan perintah savepoint seperti gambar diatas. “wen” merupakan nama tempat penyimpanannya. Nama ini bebas, tidak ditentukan, jadi sesuai keinginan user saja.

 

Jika transaksi telah di simpan, kita cek terlebih dahulu record-record yang sudah tersimpan pada masing-masing tabel, dengan perintah SQL: select * from (nama_tabel);.

Tampilannya seperti gambar diatas.

 

Setelah berhasil dengan perintah “savepoint”, kita masukkan tiga record lagi ke dalam setiap tabel, sehingga record yang terbentuk ada 4 buah record. Tabel diatas merupakan tabel “tko_cake”.

Perintah diatas merupakan perintah SQL untuk memasukkan 3 buah record lagi ke dalam tabel “penjual”, sehingga terdapat 4 buah record pada tabel tersebut.

 

Perintah diatas merupakan perintah SQL untuk memasukkan 3 buah record lagi ke dalam tabel “pembeli”, sehingga terdapat 4 buah record pada tabel tersebut.

Perintah diatas merupakan perintah SQL untuk memasukkan 3 buah record lagi ke dalam tabel “pengiriman”, sehingga terdapat 4 buah record pada tabel tersebut.

Setelah memasukkan 4 buah record ke dalam setiap tabel, kita lakukan perintah rollback yang digunakan untuk mengembalikan kondisi tabel ke kondisi taransaksi awal. Sintaks SQLnya yaitu:

SQL> rollback to wen

“wen” merupakan nama transaksi awal yang sebelumya telah disimpan dengan menggunakan perintah “savepoint” tadi.

Selanjutnya, kita cek isi dari masing-masing tabel. Jika berhasil, maka akan keluar tabel-tabel dengan isi hanya  1 record saja, seperti pada transaksi awal. Tampilannya seperti gambar diatas.

Demikianlah perintah “savepoint” dan “rollback” digunakan dalam database. Perintah “savepoint” digunakan untuk menyimpan suatu transaksi dan “rollback” digunakan untuk mengembalikan database ataupun tabel ke kondisi transaksi disimpan.

 

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: