TRANSACTION IN ORACLE


I. Konsep Transaksi
Arti Transaksi : “Sebuah transaksi adalah unit eksekusi program yang mengakses dan mungkin mengubah beberapa item data. ” (Buku Kapal) Dalam Konsep transaksi di database harus di penuhi empat sifat database agar integritas database tetap terjaga. Adapun ke-empat sifat tersebut adalah :

  • Atomicity: Setiap transaksi harus dijamin untuk dapat sukses dalam melakukan aksinya atau jika gagal , maka tidak berpengaruh apapun terhadap database.
  • Consistency: Setiap transaksi adalah sebuah aksi kombinasi secara logikal dari sebuah state database yang konsisten ke state yang lain dengan tetap menjaga kekonsisten-an database tersebut .
  • Isolation: Meskipun ada beberapa transaksi yang berlangsung bersamaan, masing-masing transaksi tidak boleh mengetahui transaksi lain yang sedang berlangsung. Hasil transaksi sementara harus disembunyikan dari transaksi lain yang sedang berlangsung . (level transparansi transaksi dapat di set)
  • Durability: Setelah sebuah transaksi sukses dilakukan, perubahan-perubahan yang dibuatnya terhadap database bersifat permanen, bahkan jika terjadi kegagalan sistem sekalipun.

Contoh dari penerapan keempat sifat transaksi database
Didalam menjalankan sebuah transaksi , Terdapat beberapa transaction
manager pada setiap site yang bertugas untuk menjalankan prosedur –
prosedur tertentu untuk menjamin ACID property . 4 Hal pokok yang
dilakukan oleh Transaction Manager yaitu :

  • Menjadwalkan operasi dari sebuah transaksi
  • Menggunakan mekanisme commit dan rollback untuk menjamin atomicity
  • Menggunakan mekanisme lock untuk konsistensi dan pelaksanaan transaksi yang concurrent serta isolation untuk menjamin transparansi transaksi pada level user .
  • Sebuah loged digunakan untuk menjamin durability ketika sistem mengalami crash / failure .

Sebuah transaksi dimulai ketika statement SQL di eksekusi pertama kali .
Transaksi ini berakhir ketika terjadi satu dari 4 hal berikut :

  • Statement COMMIT atau ROLLBACK di isukan, definisi commit dan rollback Selain menggunkan commit juga dapat digunakan save point
  • Eksekusi statement DDL atau DCL
  • Ketika user keluar dari iSQL*Plus
  • Sistem crash

II. Konsep Concurrency dan Consitency
Di dalam konsep transaksi single user kita tidak perlu concern untuk memikirkan tentang user lain yang memodifikasi data yang sama pada waktu yang sama . Tetapi pada konsep basis data mulitiuser , yaitu adanya kemungkinan pengaksesan data yang sama oleh banyak user pada waktu yang bersamaan . Oleh karena itu DBMS perlu mengatur
konsep concurrency dan consistency . Yaitu agar transaksi tetap bisa berjalan secara konkurren dengan tetap pada usahanya untuk menjaga database tetap konsisten. Data Concurrency : Berarti bahwa beberapa user mengakses sebuah
objek database yang sama pada suatu waktu tertentu . Data Consistency : Berarti bahwa user melihat data yang terdapat
didatabase konsisten baik itu data yang telah di rubah olehnya sendiri maupun oleh user yang lain. Pada umumnya, basis data menerapkan beberapa bentuk data locking untuk menangani masalah yang berkaitan dengan concurrency,
consistency dan integrity. Locks merupakan mekanisme yang dapat menjaga interaksi destruktif di antara beberapa transaksi yang mengakses resource yang sama. Berkaitan dengan level isolasi yang ada ANSI / ISO standard SQL (SQL92) mendefinsikan 4 level isolasi . Level isolasi didefinisikan sebagai derajat transparansi transaksi antara satu user dengan user yang sama pada pengaksesan data yang sama. Ada fenomena – fenomena tertentu yang harus di cegah selama eksekusi transaksi yang konkuren . 3 Fenomena yang harus di cegah adalah :

  1. Dirty Reads : Sebuah transaksi membaca data yang telah di tulis oleh transaksi yang lain tetapi belum di commit oleh transaksi lain tersebut.
  2. Non Repeatable Reads : Sebuah transaksi yang membaca kembali sebuah data dimana data tersebut sudah di rubah / di hapus oleh transaksi lain dan telah di commit.
  3. Phantom Reads : Sebuah transaksi menjalankan kembali sebuah query dimana akan menemukan bahwa ada transaksi lain yang telah memasukkan record baru ke schema yang sedang di akses oleh transaksi tersebut, sehingga akan terlihat antara query yang pertama di lakukan dengan query yang kedua memberikan hasil eksekusi jumlah row yang berbeda .

Oracle memberikan pilihan kepada usernya untuk memilih 2 mode isolasi , yaitu : read commited dan serializable . Untuk mode read only oracle bukan bagian dari SQL92 sehingga dari tabel di atas read only tidak masuk ke level isolasi yang di tawarkan oleh SQL92 tetapi ditawarkan oleh oracle . Berikut penjelasan 3 level yang di sediakan oleh oracle padapenggunanya :

  • Read Commited, Read commited merupakan level isolasi default dari oracle. Setiap query yang dieksekusi oleh suatu transaksi membaca hanya data yang telah di-commit, sebelum query (bukan transaksi) dimulai.Karena Oracle tidak mencegah dari data yang sedang di read oleh sebuah query di modifikasi oleh query / transaksi yang lain , sehingga kemungkinan data telah di rubah oleh transaksi yang lain bisa saja terjadi antara 2 eksekusi dari query tersebut.
  • Serializable, Transaksi serializable membaca hanya perubahan yang telah dicommit pada saat transaksi dimulai, ditambah perubahan yang dibuat oleh transaksi itu sendiri melalui statemen insert, update, dan delete.
  • Read Only,Transaksi read-only membaca hanya perubahan yang telah di-commit saat transaksi dimulai dan tidak memperbolehkan statemen insert, update, dan delete.

Level yang tertinggi dari 3 pilihan tersebut adalah ”serializable”. Hal ini di karenakan level ini memberikan level isolasi yang terbaik ketika banyak user mengakses data yang sama . Konsep serializable nampak sebagai sebuah urutan eksekusi secara serial , terurut berdasarkan transaksi yang terjadi. Cara mensetting level isolasi di oracle : (pilih salah satu) Ada 2 metode dalam mengeset level isolasi di oracle , yaitu :

  • Pada level Transaksi (pada level ini hanya untuk mengeset sebuah transaksi)
    SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
    SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
    SET TRANSACTION READ ONLY;
  • Pada level Session (pada level ini akan berlaku pada seluruh transaksi yang dilakukan dan subsequent dari transaksi yang terjadi)
    ALTER SESSION SET ISOLATION_LEVEL = READ COMMITTED
    ALTER SESSION SET ISOLATION_LEVEL = SERIALIZABLE;

Dalam mengatur agar dalam pengaksesan resource data yang sama tidak saling terjadi interferensi .. maka oracle memberikan konsep locking . Oracle secara otomatis menentukan lock yang perlu saat mengeksekusi
SQL statement . Namun Oracle juga memperbolehkan user untuk mengeset lock sendiri secara manual. Ada 2 Mode lock yang terdapat pada oracle yaitu :

  • Exclusive Mode, Mencegah resource yang sedang di pakai untuk di share . Mode lock ini di peroleh ketika akan memodifikasi data . Transaksi yang sudah me-lock data secara exclusive adalah transaksi yang berhak pula untuk melepaskan lock tersebut untuk kemudian di gunakan oleh transaksi yang lainnya .
  • Share Mode, Mengijinkan resource yang berhubungan untuk di share , tergantung dari operasi yang terlibat di dalamnya . Multiple users yang sedang membaca data dapat men-share data tersebut , memegang lock dengan tipe share lcok untuk mencegah akses data secara concurrent oleh writer (seseorang yang membutuhkan exclusive lock). Beberapa transaksi mungkin akan membutuhkan share lock pada penggunaan resource yang sama .

Tipe – tipe lock yang terdapat di oracle
DML LOCKS
Ada 2 model pada DML Lock yaitu :

  • Lock pada Baris tabel [TX], DML locks yang diperoleh secara otomatis adalah row-level locking, tidak ada batasan jumlah row lock yang dpat dibuat oleh suatu, statemen atau transaksi. Row lockng menjamin concurrency dan throughput yang tinggi . Lock ini merupakan lock terendah yang diberikan oleh oracle pada user untuk best possible concurreny.
  • Lock pada Tabel [TM], Pada lock tabel jenis ini , ada beberapa tipe . Yaitu
    • RS: row share Row share table locks (disebut juga subshare table locks, SS) menandakan bahwa transaksi yang memegang lock pada table telah melakukan row lock pada table tersebut dan bermaksud untuk melakukan updating. Row share table lock adalah mode table lock dengan batasan terendah, menawarkan concurrency yang tinggi.Sintaks : SELECT … FROM table… FOR UPDATE OF…; LOCK TABLE table IN ROW SHARE MODE; Permitted Operations : semua transaksi yang melakukan query, insert, delete atau lock rows secara konkuren pada table yang sama. Selain itu, transaksi lain juga dapat melakukan row share, row exclusive, share, dan share row exclusive table locks pada table yang sama. Prohibited Operations : transaksi dengan exlusive write access pada table yang sama dengan statement : Contohnya yaitu ketika user lain mau memodifikasi baris yang baru di akses tersebut . LOCK TABLE table IN EXCLUSIVE MODE;
    • RX: row exclusive, Row exclusive table lock (disebut juga subexclusive table lock, SX) secara umum menandakan bahwa transaksi yang memegang lock telah melakukan perubahan terhadap rowrow pada table tersebut. Row Exclusive table lock sedikit lebih ketat dibandingkan dengan row share table lock. Sintaks : INSERT INTO table …; UPDATE table …; DELETE FROM table …; LOCK TABLE table IN ROW EXCLUSIVE MODE; Permitted Operations : semua transaksi yang melakukan query, insert, update, delete atau lock rows secara konkuren pada table yang sama. Selain itu, transaksi lain juga dapat melakukan row share dan row exclusive table locks pada table yang sama. Prohibited Operations : transaksi dengan exlusive write/read pada table yang sama. Selain itu, transaksi lain tidak dapat melakukan lock pada table dengan statement : LOCK TABLE table IN SHARE MODE; LOCK TABLE table IN SHARE EXCLUSIVE MODE; LOCK TABLE table IN EXCLUSIVE MODE;
    • S: share, Share table lock tidak memperbolehkan transaksi lain untuk memodifikasi table yang sama. Sintaks : LOCK TABLE table IN SHARE MODE; Permitted Operations : transaksi hanya dapat melakukan query, lock row tertentu dengan SELECT.. FOR UPDATE, atau LOCK TABLE… IN SHARE MODE. Tidak ada update yang diperbolehkan bagi transaksi lain. Prohibited Operations : Transaksi lain tidak dapat melakukan lock pada table dengan statement : LOCK TABLE table IN SHARE ROW EXCLUSIVE MODE; LOCK TABLE table IN EXCLUSIVE MODE; LOCK TABLE table IN ROW EXCLUSIVE MODE;
    • SRX: share row exclusive, Share row exclusive table lock (disebut juga sharesubexclusive table lock, SSX) lebih ketat dibandingkan share table lock. Sintaks : LOCK TABLE table IN SHARE ROW EXCLUSIVE MODE; Permitted Operations : transaksi hanya dapat melakukan query atau lock row tertentu dengan SELECT.. FOR UPDATE, namun tidak dapat melakukan update pada table tersebut. Prohibited Operations : Transaksi lain tidak dapat melakukan lock pada table dengan statement : LOCK TABLE table IN SHARE MODE; LOCK TABLE table IN SHARE ROW EXCLUSIVE MODE; LOCK TABLE table IN EXCLUSIVE MODE; LOCK TABLE table IN ROW EXCLUSIVE MODE;
    • X: exclusive, Exclusive table lock merupakan mode table lock yang paling ketat, hanya memperbolehkan transaksi yang memegang lock exclusive write untuk mengakses table. Sintaks : LOCK TABLE table IN EXCLUSIVE MODE; Permitted Operations : transaksi hanya dapat melakukan query. Prohibited Operations : Transaksi lain tidak dapat melakukan statemen DML atau melakukan lock pada table.

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