Collabnet Overview v Informatika BAB XIII Menangani Transaksi
Informatika 2 Transaksi ATM : pemasukan kartu ATM, pemasukan PIN, penentuan jumlah uang, pengambilan uang. Ada 2 kemungkinan dalam transaksi: - transaksi dianggap berhasil, jika semua proses berjalan dengan lancar - transaksi dianggap gagal, kalau ada salah satu bagian proses yang gagal
Informatika 3 Menandai awal transaksi dBase IV : BEGIN TRANSACTION PostgreSQL : BEGIN WORK ORACLE : SAVEPOINT
Informatika 4 Menyetujui transaksi Sintaks: COMMIT [WORK]; Contoh: COMMIT; atau COMMIT WORK;
Informatika 5 Membatalkan transaksi Sintaks: ROLLBACK [WORK]; Contoh: ROLLBACK; atau ROLLBACK WORK;
Informatika 6 Gambaran COMMIT dan ROLLBACK Tes 1 : melihat isi pegawai dengan NIP=12345 SELECT nip, nama FROM pegawai WHERE nip = ‘12345’; Tes 2 : mengawali transaksi BEGIN WORK; Tes 3 : mengubah gaji & depart UPDATE pegawai SET gaji = , depart = ‘EDP’ WHERE nip = ‘12345’;
Informatika 7 Gambaran COMMIT dan ROLLBACK Tes 4 : melihat isi baris NIP = SELECT * FROM pegawai WHERE nip = ‘12345’; Tes 5 : membatalkan perubahan ROLLBACK; Tes 6 : melihat isi baris NIP = SELECT * FROM pegawai WHERE nip = ‘12345’;
Informatika 8 Gambaran COMMIT dan ROLLBACK Tes 7 : mengawali transaksi, mengubah gaji & depart BEGIN WORK; UPDATE pegawai SET gaji = , depart = ‘EDP’ WHERE nip = ‘12345’; Tes 8 : Menyetujui perubahan COMMIT; Tes 9 : melihat isi baris NIP = SELECT * FROM pegawai WHERE nip = ‘12345’;
Informatika 9 Problem pada multiuser Pemutakhiran yang hilang (lost update) Pembacaan kotor (dirty read) Pembacaan yang tidak sama (non-repeatable read) Penyisipan yang tak dikehendaki (phantom insert)
Informatika 10 lost update Transaksi #1 (butuh 4 kursi)Isi basis dataTransaksi #2 (butuh 3 kursi) SELECT kosong FROM kursi WHERE jadwal = 300; Kosong = 10 SELECT kosong FROM kursi WHERE jadwal = 300; UPDATE kursi SET kosong = 6 WHERE jadwal = 300; Kosong = 6 COMMIT WORK;Kosong = 7UPDATE kursi SET kosong = 7 WHERE jadwal = 300; COMMIT WORK;
Informatika 11 dirty read Transaksi #1Isi basis dataTransaksi #2 SELECT kosong FROM kursi WHERE jadwal = 300; Kosong = 10 UPDATE kursi SET kosong = 6 WHERE jadwal = 300; Kosong = 6 SELECT kosong FROM kursi WHERE jadwal = 300; ROLLBACK WORK;Kosong = 10
Informatika 12 non-repeatable read Transaksi #1Isi basis dataTransaksi #2 Kosong = 10 SELECT kosong FROM kursi WHERE jadwal = 300; UPDATE kursi SET kosong = 6 WHERE jadwal = 300; Kosong = 6 SELECT kosong FROM kursi WHERE jadwal = 300;
Informatika 13 phantom insert Transaksi #1keadaan basis dataTransaksi #2 SELECT jadwal, COUNT(kosong) FROM kursi GROUP BY jadwal, kosong; INSERT INTO kursi (kosong, jadwal) VALUES (350, 321); Sebuah baris ditambahkan SELECT jadwal, COUNT(kosong) FROM kursi GROUP BY jadwal, kosong;
Informatika 14 Penanganan multiuser Mekanisme penanganan multiuser disebut penguncian (locking) Untuk mencegah orang lain mengubah baris sebelum transaksi di-COMMIT, tambahkan FOR UPDATE pada perintah SELECT (PostgreSQL). Misal: SELECT * FROM pegawai WHERE nip = ‘12345’ FOR UPDATE;
Informatika 15 Macam level isolasi Level isolasilost updatedirty readnon-repeatable readphantom insert SERIALIZABLETIDAK REPEATABLE READTIDAK YA READ COMMITEDTIDAK YA READ UNCOMMITEDTIDAKYA
Informatika 16 Macam level isolasi SERIALIZABLE, merupakan level kontrolyang paling tinggi. Level isolasi ini memperlakukan sistem seperti kalau berjalan dalam lingkungan single user REPEATABLE READ, memungkinkan terjadinya kasus panthom insert. READ COMMITED, memperkenankan query yang dieksekusi beberapa kali memberikan hasil yang berbeda, tetapi hanya bisa membaca transaksi yang telah di-COMMIT READ UNCOMMITED, memungkinkan pembacaan data yang belum di-COMMIT
Informatika 17 Level isolasi Penentuan level isolasi SET TRANSACTION ISOLATION LEVEL level_isolasi; Contoh: SET TRANSACTION ISOLATION LEVEL READ COMMITED; SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
Informatika 18 Level isolasi Default untuk PostgreSQL adalah READ COMMITED PostgreSQL hanya mendukung READ COMMITED dan SERIALIZABLE
Collabnet Overview v Informatika Terima Kasih Tanya & Jawab