Administrasi Basis Data
Transaksi dan Lock
Mengenal Transaksi dan Lock
• Transaksi dan lock dipakai untuk menjamin konsistensi dan integritas data.
• Transaksi adalah sebuah unit kerja logis yang berisi sekumpulan perintah.
• Lock mencegah konflik antarpemakai sehingga seorang user tidak dapat
membaca atau mengubah data yang sedang diubah oleh user lain.
• Transaksi memakai lock untuk mencegah user mengubah data yang sedang dipakai oleh transaksi.
Mengenal Transaksi dan Lock
• Setiap database SQL Server
mempunyai sebuah log transaksi yang
mencatat semua transaksi dan
modifikasi database yang dibuat oleh
transaksi.
• Log tersebut mendukung 3 operasi :
– Proses Recovery dari transaksi-transaksi tunggal – Proses Recovery semua transaksi yang belum
selesai pada saat SQL Server dimulai
– Mengembalikan database ke keadaan semula setelah terjadi kegagalan
• Proses Recovery dari transaksi-transaksi
tunggal
– Jika sebuah aplikasi menjalankan
perintah ROLLBACK atua SQL Server
mendeteksi sebuah kesalahan,
record-record dalam log dipakai
untuk kembali ke data sebelum
transaksi dimulai
• Proses Recovery semua transaksi yang belum selesai pada saat SQL Server dimulai
• Jika SQL Server berhenti tiba-tiba karena sesuatu hal, database mungkin dalam
keadaan sedang mengalami perubahan
yang belum ditulis ke file data. Jika SQL Server dimulai, proses recovery akan dijalankan
pada setiap database. Setiap modifikasi yang dicatat di dalam log dan belum ditulis ke
dalam file data akan dikembalikan ke
keadaan sebelum transaksi dimulai. Hal ini untuk menjaga integritas database.
• Mengembalikan database ke keadaan semula setelah terjadi kegagalan
• Setelah terjadi kegagalan pada
harddisk, Anda dapat
mengembalikan data pada keadaan
sebelum terjadi kerusakan.
Log Transaksi
• Log transaksi bukanlah sebuah tabel, tetapi merupakan sebuah file atau beberapa file terpisah dalam database.
• Cache dari log adalah tempat terpisah dari cache buffer untuk page data.
• Bentuk data dalam log tidaklah sama dengan format dari page data.
• Anda dapat membuat log transaksi menjadi beberapa file. Anda juga dapat mengatur pertumbuhan file log sehingga menghindari ukuran log yang tidak terkontrol.
Log Transaksi
• Log transaksi dapat dianggap sebagai
sebuah string serial dari record-record log. Log Sequence Number (LSN)
mengidentifikasi setiap record log. Record log baru ditulis pada akhir log dengan LSN lebih tinggi dari LSN record sebelumnya. • Record log untuk modifikasi data dapat
berupa operasi yang dilakukan atau data sebelum dan sesudah terjadi perubahan.
Log Transaksi
• Beberapa operasi yang dicatat di
dalam log transaksi :
• Awal dan akhir transaksi
• Setiap perubahan data (INSERT,
UPDATE, dan DELETE)
• Setiap perluasan alokasi atau
dealokasi.
• Pembuatan dan penghapusan tabel
atau index
Log Transaksi
• Record-record log disimpan secara
serial sesuai dengan pembuatannya.
• Untuk sebuah transaksi, semua record
log dari transaksi tersebut
dihubungkan dengan menggunakan
pointer agar proses rollback dapat
Log Transaksi
• Pernyataan ROLLBACK tidak dimasukkan ke dalam log transaksi.
• Setiap transaksi menyediakan sejumlah
tempat di log transaksi agar proses rollback dapat dilakukan. Tempat tersebut akan
dibebaskan pada saat transaksi selesai.
• Jumlah tempat yang disediakan tergantung pada operasi yang dilakukan transaksi,
tetapi pada umumnya sama dengan
jumlah tempat yang dipakai untuk setiap operasi.
Properti ACID
Sebuah transaksi harus memenuhi empat
kriteria yang dikenal dengan properti ACID. SQL Server menyediakan mekanisme agar sebuah transaksi memenuhi keempat kriteria tersebut :
• Atomicity
• Consistency • Isolation
Properti ACID (i) : Automicity
• Semua modifikasi dalma sebuah transaksi dianggap sebagai satu kesatuan, semua modifikasi akan berhasil atau semua akan gagal.
• SQL Server memberikan mekanisme yang secara otomatis menentukan apakah
Properti ACID (i) : Automicity
• Misalnya adalah sebuah transaksi untuk mentransfer uang melalui bank. Ada dua perubahan yang harus dilakukan. Rekening pengirim harus dikurangi dan rekening
penerima harus ditambah. Kedua
modifikasi tersebut merupakai sebuah kesatuan.
• Jika rekening pengirim berhasil dikurangi tetapi rekening penerima tidak berhasil
ditambah, maka transaksi dibatalkan dan data dikembalikan ke keadaan semula.
Properti ACID(ii) : Consistency
• Semua data dalam keadaan konsisten.
• Integritas data dijaga setelah transaksi
selesai, baik berhasil atau gagal.
Sebelum transaksi dimulai, database
berada dalam keadaan konsisten
artinya index pohon B+ dan list
gandanya dalam keadaan benar.
Setelah transaksi selesai, database juga
dalam keadaan konsisten.
Properti ACID(iii) : Isolation
• Efek dari setiap transaksi dama dengan jika hanya ada transaksi tersebut di dalam
sistem, modifikasi oleh sebuah transaksi
diisolasi (tidak dipengaruhi) oleh modifikasi yang dilakukan oleh transaksi lain.
• Dengan cara ini sebuah transaksi tidak akan dipengaruhi oleh nilai yang diubah oleh
transaksi lain sampai perubahan selesai (transaksi di-commit).
• Jika sebuah transaksi gagal, modifikasi-modifikasi yang dilakukan dibatalkan dengan proses rollback.
Properti ACID(iv) : Durability
• Sekali transaksi dicommit (selesai) efek dari transaksi akan bersifat permanen di dalam database.
• Jika SQL Server, sistem operasi, atau sebuah komponen server gagal, secra otomatis
database akan dikembalikan ke keadaan pada saat SQL Server dimulai.
• SQL Server memakai log transaksi untuk mengembalikan ke keadaan semula
Level-Level Isolasi
• Setting yang menentukan level
sebuah transaksi menerima data yang
tidak konsisten, yaitu tingkatan sebuah
transaksi diisolasi dari transaksi lain.
• Semakin tinggi tingkat isolasi semakin
tinggi keakuratan data. Level-level
isolasi dari terendah sampai tertinggi
adalah : read uncommitted, read
committed, repeatable read,
serializable.
Level Isolasi : Read Uncommitted
• Level isolasi terendah.
• Pada level ini, transaksi diisolasi hanya
untuk menjadi data yang rusak secara
fisik tidak dapat dibaca
Level Isolasi : Read Committed
• Level default dari SQL Server
• Pada level ini, pembacaan data
diperbolehkan hanya pada data yang telah di-commit.
• Data yang telah dicommit adalah data yang merupakan bagian permanen dari database.
• Pada level ini data yang masih belum
di-commit (masih dipakai oleh transaksi) tidak dapat dibaca.
Level Isolasi : Repeatable Read
• Pembacaan berulang pada data
yang dipakai oleh sebuah transaksi
akan menghasilkan data yang sama
Level Isolasi : Serializable
• Level tertinggi isolasi
• Transaksi terisolasi dari transaksi lainnya
• Hasil yang diperoleh dari transaksi
konkuren pada sebuah database
sama dengan jika transaksi dijalankan
secara serial (satu per satu)
Level Isolasi
• Level isolasi yang anda pakai menentukan perilaku LOCK untuk semua perintah SELECT yang dilakukan.
• Anda dapat mengubah level isolasi dengan perintah SET TRANSACTION ISOLATION LEVEL • Misalnya mengubah level isolasi menjadi
SERIALIZABLE :
Level Isolasi
• Sekali anda mengubah level isolasi
untuk sebuah session,
transaksi-transaksi selanjutnya akan melakukan
locking sesuai dengan level isolasinya.
Untuk mengetahui level isolasi yang
sedang dipakai, gunakan perintah :
DBCC USEROPTIONS
Perilaku Transaksi Konkuren
• Dirty read
• Sebuah pembacaan data dapat
membaca data yang belum di-commit. Dirty read terjadi pada saat sebuah
transaksi mengubah data dan transaksi berikutnya membaca data yang diubah sebelum transaksi selesai (commit). Jika transaksi pertama membatalkan
perubahan, transaksi kedua membaca data yang tidak ada di dalam database,
karena perubahan dibatalkan oleh transaksi yang mengubah data.
Perilaku Transaksi Konkuren
• Nonrepeatable read
• Hal ini terjadi pada saat sebuah baris
dibaca lebih dari sekali dalam sebuah
transaksi, di antara beberapa
pembacaan, transaksi lain mengubah
baris tersebut. Oleh karena transaksi
pertama membaca ulang dengan
data yang berbeda, hasilnya tidak
berulang dalam transaksi tersebut.
Perilaku Transaksi Konkuren
• Phantom Read
• Pembacaan yang terjadi pada saat sebuah transaksi mencoba membaca sebuah data yang tidak ada pada saat transaksi dimulai, tetapi data tersebut ditambahkan oleh
transaksi kedua sebelum transaksi pertama selesai. Jika kemudian transaksi pertama mencari data tersebut, data tiba-tiba
ditemukan padahal sebelumnya tidak ada. Data tersebut disebut data phantom.
Dirty Read Nonrepeatable Read Phantom Read Read uncommitted Ya Ya Ya
Read committed Tidak Ya Ya
Repeatable read
Tidak Ya Tidak