• Tidak ada hasil yang ditemukan

BAB II Landasan Teori

2.3 Concurrency Control dalam Oracle

Dalam menangani akses bersama, Oracle menggunakan protokol Multiversion-Read Consistency yang menjamin user melihat data yang konsisten yang diminta. Jika user lain mengubah data utama selama proses eksekusi query, Oracle menjaga sebuah versi dari data sebagaimana adanya data tersebut pada waktu query dimulai. Jika terdapat transaksi uncommitted dalam progress ketika query dimulai, Oracle meyakinkan bahwa query ini tidak melihat perubahan yang dibuat oleh transaksi ini. Oracle juga tidak menempatkan beberapa lock pada data

untuk operasi baca, yang artinya bahwa sebuah operasi baca tidak pernah memblok sebuah operasi tulis.

2.3.1. Multiversion Read Consistency

Implementasi dari protocol Multiversion Read Consistency yang akan dibahas meliputi Rollback segment, Serial Change Number (SCN) dan Lock.

Rollback Segment, merupakan struktur dalam dalam database Oracle digunakan untuk menyimpan informasi undo, ketika transaksi sedang mengubah data dalam blok, Oracle pertama-tama menulis tampilan data sebelumnya ke Rollback segment. Sebagai tambahan untuk mendukung Multiversion Read Consistency, Rollback segment juga digunakan untuk meng-undo sebuah transaksi. Oracle juga memelihara satu atau lebih Redo-Logs, yang merekam semua transaksi yang terjadi dan digunakan untuk me-recover database pada saat terjadi kesalahan dalam system. • System Change Number (SCN), digunakan untuk memelihara order

kronologis yang tepat dalam operasi. Oracle menjaga SCN. SCN adalah sebuah pemikiran tentang timestamp yang merekam order yang didalamnya operasi terjadi. Oracle menyimpan SCN dalam Redo-Log untuk me-redo transaksi dalam urutan yang tepat. Oracle menggunakan SCN untuk menentukan versi sebuah item data yang mana harus digunakan dalam sebuah transaksi. Oracle juga menggunakan SCN untuk menentukan kapan untuk memberikan informasi dari Rollback Segment.

Lock. Locking terjadi untuk semua statement SQL jadi seorang user tidak pernah membutuhkan untuk me-lock resource-resource yang ada secara tegas, meskipun Oracle menyediakan sebuah mekanisme untuk memperbolehkan seorang user untuk mendapat lock secara manual atau untuk mengubah default locking. Default mekanisme locking, men-lock data pada level terendah dari yang dibatasi untuk menjamin integritas ketika memperbolehkan tingkat tertinggi dari concurrency. Oracle menyimpan informasi row-locking selama blok data actual dimana baris tersebut disimpan. Sebagimana Oracle menyimpan lock pada baris selama blok data, Oracle tidak pernah meningkatkan lock.

Oracle support tipe-tipe dari lock, meliputi:

DDL locks- digunakan untuk memproteksi objek skema, seperti definisi dari tabel dan view.

DML locks – digunakan untuk memproteksi pokok data, sebagai contoh lock pada tabel memprotek seluruh tabel dan baris lock pada baris.

Internal locks- digunakan untuk memproteksi struktur data yang dishare. • Internal latches- digunakan untuk memproteksi kamus data entri, file- file

data, tabelspace dan rollback segment.

Distributed lock- digunakan untuk memprotek data dalam sebuah lingkungan distribusi dan atau parallel server

PCM locks- Parallel cache management (PCM) lock digunakan untuk memproteksi buffer cache dalam sebuah lingkungan parallel server.

Oracle mengenal 2 level konsistensi baca, yaitu statement-level read consistency (konsistensi baca level statement) dan transaction-level read consistency (konsistensi baca level transaksi).

1. Konsistensi Baca Level-Statement (Statement-Level Read Consistency) Oracle secara otomatis senantiasa menyelanggarakan konsistensi baca pada level statemen. Hal ini menjamin setiap data yang dikembalikan oleh sebuah query berasal dari sebuah titik tunggal (single point) dalam waktu dimana query tersebut dimulai. Oleh karena itu, sebuah query tidak pernah melihat data kotor/dirty read maupun setiap perubahan yang dilakukan oleh transaksi lain yang commit selama query tersebut dieksekusi. Hasilnya yaitu hanya data yang commit sebelum query mulai yang dapat dilihat oleh query. Query tersebut tidak melihat perubahan commit setelah eksekusi statement mulai. Sebuah hasil yang konsisten dibangun untuk setiap query, menjamin kekonsistenan data, dan dalam hal ini tidak memerlukan aksi apapun dari user. Statement-statement SQL seperti SELECT, INSERT, UPDATE, dan DELETE menggunakan sebuah query untuk menetapkan data mana yang akan dipengaruhi. SELECT statement merupakan sebuah query explicit dan dapat mempunyai query bersarang atau operasi join. Sebuah statement INSERT dapat menggunakan beberapa query bersarang. UPDATE dan DELETE statement dapat mengggunakan klausa WHERE atau subquery-subquery untuk menghasilkan hanya beberapa baris dalam sebuah tabel lebih daripada semua baris.

Beberapa query yang digunakan oleh INSERT, UPDATE dan DELETE statement dijamin menghasilkan set hasil yang konsisten. Query dalam

operasi-operasi hanya melihat data yang telah ada sebelum operasi-operasi mulai untuk membuat perubahan.

2. Konsistensi Baca Level-Transaksi (Transaction-Level Read Consistency)

Konsistensi baca Level-Transaksi ini berjalan di sebuah transaksi yang berjalan menggunakan jenis isolation level serializable. Semua data mengakses gambaran suatu keadaan dari database seperti pada saat sebuah transaksi mulai. Hal ini berarti data yang dilihat oleh semua query pada transaksi yang sama merupakan konsisten dengan pasti pada sebuah titik tunggal (single point) dalam waktu, kecuali jika beberapa query dibuat oleh sebuah transaksi serializable melihat perubahan yang dibuat transaksi tersebut. Konsistensi baca level-transaksi menghasilkan pembacaan yang repeatabel dan tidak membuka sebuah query untuk masalah phantom.

2.3.2. Macam-macam Level Isolasi Oracle

Oracle menyediakan 3 level isolasi yaitu READ COMMITTED,

SERIALIZABLE dan READ ONLY. Oracle hanya mengimplementasikan 2 dari 4

level isolasi yang didefenisikan dalam ISO SQL Standar.

READ COMMMITTED. Serialisasi didukung pada level isolasi ini

didukung pada statement level (itu adalah default level isolasi), yang mana setiap statement didalam transaksi hanya melihat data yang telah di committed sebelum statement (bukan transaksi) dimulai. Ini berarti bahwa data mungkin diubah oleh transaksi lain selama eksekusi dari statement

yang sama didalam transaksi yang sama, mengijinkan non-repeatabel dan phantom.

SERIALIZABLE. Serialisasi didukung pada transaksi level jadi, setiap

statement didalam sebuah transaksi melihat hanya data yang telah di-committed sebelum transaksi dimulai.

READ ONLY. Transaksi READ ONLY melihat hanya data yang committed

sebelum transaksi dimulai.

READ COMMMITTED dan SERIALIZABLE menggunakan row-level locking dan

keduanya menunggu jika sebuah transaksi mencoba untuk mengubah sebuah baris yang diupdate oleh sebuah transaksi yang uncommitted. Jika transaksi yang dibloking commit, dan melepaskan setiap lock, kemudian dengan mode READ

COMMITTED, transaksi menunggu berproses dengan updatenya. Bagaimanapun juga, dengan mode SERIALIZABLE sebuah error bisa mengindikasikan operasi tersebut tidak bisa diserialisasikan.

Level isolasi dapat diset di Oracle, dengan memilih salah satu dari level isolasi yang akan dipakai pada awal transaksi dimulai. Seperti:

SET TRANSACTION ISOLATION LEVEL READ COMMITTED;

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;

SET TRANSACTION READ ONLY;

Dapat juga menggunakan perintah ALTER SESSION untuk mengeset level isolasi pada transaksi untuk semua subsequent transaksi, seperti:

ALTER SESSION SET ISOLATION_LEVEL SERIALIZABLE;

2.3.3. Deteksi Deadlock

Oracle secara otomatis mendeteksi dan menangani deadlock dengan cara me-rollback satu dari perintah yang terdapat dalam deadlock. Sebuah pesan dikembalikan pada sebuah transaksi yang memiliki perintah yang di-rollback.

Dokumen terkait