Rabu, 25 November 2015

Transaksi dan concurency


Transaksi pada basis data adalah satu atomic operasi berupa lojik pekerjaan maupun lojik recovery yang bisa terdiri dari beberapa intruksi. Tujuan dari transaksi adalah menjaga database dari kehilangan data dan kerusakan,seperti system crash dan pengaksesan data yang sama secara bersamaan oleh dua aplikasi yang berbeda yang menimbulkan gangguan.

Ada empat elemen dalam transaksi yang biasa disingkat ACID, yaitu :
  •  Atomicity,  semua berhasil atau semua gagal
  •  Consistency,  transaksi mempertahankan konsistensi database
  •  Isolation,  transaksi terisolasi satu dengan yang lain
  •  Durability,  setelah commit update harus survive di database

Dan ada dua jenis transaksi yang paling penting dalam sistem basis data adalah :
  • Commit, memberi tanda bahwa transaksi telah selesai. Update dibuat permanen (bahkan jika setelah commit terjadi kegagalan system)
  • Rollback, memberi tanda bahwa transaksi gagal. Semua update harus di-undo
Untuk lojik recovery atau system recovery database dilakukan ketika terjadi kegagalan media, kegagalan system atau kesalahan pada transaksi. Sistem recovery menggunakan fungsi rollback dan checkpoint. Checkpoint adalah interval tertentu pada perjalanan transaksi basis data yang menyimpan keadaan basis data saat itu. Checkpoint dapat dilakukan untuk merecovery database secara backward (undo) maupun forward (redo).

Sedangkan concurrency adalah sebuah mekanisme pada system basis data yang mengijinkan banyak transaksi pada saat bersamaan untuk mengakses data yang sama tanpa adanya gangguan.

 Pada umumnya terdapat 3 masalah utama pada concurrency :

  • Lost update problem, ketika dua user mengupdate dua buah data yang sama
  • Uncommited dependency problem, ketika user yang satu meretrieve data dan user yang lain merollback data tersebut
  •  Inconsistent analysis problem, ketika user yang satu meretrieve data dan user yang lain mengupdate data tersebut

Untuk menangani masalah tersebut, dilakukan proses locking, jika sebuah transaksi ingin record/resource tidak berubah dalam waktu tertentu maka dia meminta lock.

Ada dua jenis lock yaitu :
      Exclusive Lock (Xlock) write lock
      Shared Lock (Slock) read lock


Jadi cara kerjanya :

  • Jika transaksi A memegang Xlock pada sebuah record, maka permintaan lock (X,S) pada record yang sama harus diabaikan.
  • Jika transaksi A memegang Slock pada record R maka :

a)     Permintaan Xlock transaksi lain pada R ditolak
b)     Permintaan Slock transaksi lain pada R diterima

Tapi, ada satu masalah yang dapat terjadi ketika melakukan proses locking ini, yaitu deadlock. Yaitu, situasi dimana dua atau lebih transaksi dalam kondisi wait-state, satu sama lain menunggu lock dilepaskan sebelum dapat memulai. Cara penanganannya adalah :
1- Deteksi dan pecahkan  deadlock
2- Deteksi deadlock  wait-for-graph
3- Pecahkan deadlock  salah satu dirollback paksa
4- Ostrich Algorithm   diabaikan

TRIGGER, PROCEDURE, FUNCTION
Trigger
Trigger adalah blok PL/SQL yang disimpan dalam database dan akan diaktivasi ketika kita melakukan statement-statement SQL (DELETE, UPDATE, dan INSERT) pada sebuah tabel. Aktivasi trigger didasarkan pada event yang terjadi di dalam tabel tersebut sehingga trigger dapat membantu dalam menjaga integritas dan konsistensi data. Implementasi trigger yang sering ditemui dalam dunia nyata adalah untuk mengeset dan mengubah nilai kolom dalam suatu tabel sehingga validasi nilai dari tabel tersebut akan terjaga. Adanya trigger dalam database akan meringankan kita dalam pembuatan aplikasi karena di dalam aplikasi yang kita buat, kita tidak perlu lagi untuk melakukan validasi data.

Syntax:

CREATE [or replace] TRIGGER nama_trigger
( BEFORE|AFTER ) ( INSERT|UPDATE [OF nama_kolom,..]|DELETE )ON nama_tabel
[FOR EACH ROW] [WHEN (kondisi)]
DECLARE
Deklarasi tipe data
BEGIN
Trigger body
END;
/

Anonymous Block

Block PL/SQL tak bernama (anonymous) menyimpannya dalam Oracle Precompiler.
Anonymous block tidak dibuat (CREATE) dan tak disimpan pada database, biasanya dijalankan dari dalam aplikasi, pada run-time aplikasi akan mengirimkan anonymous PL/SQL block ini kepada database oracle, dimana anonymous block tsb di compile dan dieksekusi.

Syntax:

DECLARE
Deklarasi variabel
BEGIN
Program prosedural
EXCEPTION
Penangananan eksepsi (ERROR)
END;
/

SUBPROGRAM

PL/SQL Block yang dipanggil dengan sekumpulan parameter. PL/SQL memiliki dua jenis subprogram yaitu: procedure dan function. Dimana secara umum procedure

Syntax:

Prosedur

CREATE OR REPLACE PROCEDURE AS
Deklarasi variabel
BEGIN
Prosedural & sql
EXCEPTION
Penanganan eksepsi (ERROR)
END ;
/

Fungsi

CREATE OR REPLACE FUNCTION RETURN
AS
 Deklarasi variabel
BEGIN
procedural and SQL
EXCEPTION
penanganan eksepsi (ERROR)
RETURN();
kalusa return ini wajib di deklarasikan
END;
/



0 Komentar:

Posting Komentar

Berlangganan Posting Komentar [Atom]

<< Beranda