LKP 11 - BASIS DATA

13
Praktikum Basis Data (KOM 205) – Praktikum11 PRAKTIKUM 11 Materi: 1. Simulasi Transaksi 2. Perintah Begin, Rollback, Commit, Savepoint 3. Locking TujuanPraktikum: Mahasiswa mampu memahami administrasi database. A. PENYAJIAN & TUTORIAL T A B E L YA N G D IG U N A K A N : Buatlah table deret dan account sebagai berikut : CREATE TABLE deret (nilai integer); INSERT INTO deret VALUES (1),(2),(3),(4),(5); CREATE TABLE account (nama character(50),saldo integer,cabang character(50)); INSERT INTO account VALUES ('shadiq',100000,'Bogor'), ('Alice',1000000,'Bogor'), ('Bob',700000,'Bandung'), ('Wally',500000,'Bandung'); T R A N S A K S I Transaksi adalah konsep fundamental dari system database. Setiap kali orang menerangkan tentang transaksi database, contoh yang biasanya diambil adalah nyaris selalu tentang transaksi di bank, khususnya tentang seorang nasabah yang mentransfer sejumlah uang ke rekening orang lain. Contoh : seorang nasabah Bank Mandi Sendiri bernama Alice hendak mentransfer uang 100000 ke rekening Shadiq. Operasi ini melibatkan 2 kali operasi update pada database, yaitu 1. mengurangi saldo rekening Alice 2. menambah saldo rekening Shadiq Bagaimana jika diantara 2 operasi di atas ternyata PLN mati, atau mungkin Pak Satpam tidak sengaja menyenggol komputer mbak Teller. Otomatis saldo rekening Alice berkurang tetapi saldo rekening Shadiq tak berubah. Lalu bagaimana solusinya?

Transcript of LKP 11 - BASIS DATA

Page 1: LKP 11 - BASIS DATA

Praktikum Basis Data (KOM 205) – Praktikum11

PRAKTIKUM 11

Materi:

1. Simulasi Transaksi2. Perintah Begin, Rollback, Commit, Savepoint3. Locking

TujuanPraktikum:

Mahasiswa mampu memahami administrasi database.

A. PENYAJIAN & TUTORIAL

T A B E L YA N G D IG U N A K A N :

Buatlah table deret dan account sebagai berikut :

CREATE TABLE deret (nilai integer); INSERT INTO deret VALUES (1),(2),(3),(4),(5);

CREATE TABLE account (nama character(50),saldo integer,cabang character(50));

INSERT INTO account VALUES ('shadiq',100000,'Bogor'), ('Alice',1000000,'Bogor'), ('Bob',700000,'Bandung'),('Wally',500000,'Bandung');

T R A N S A K S I

Transaksi adalah konsep fundamental dari system database. Setiap kali orang menerangkan tentang

transaksi database, contoh yang biasanya diambil adalah nyaris selalu tentang transaksi di bank, khususnya

tentang seorang nasabah yang mentransfer sejumlah uang ke rekening orang lain. Contoh : seorang nasabah

Bank Mandi Sendiri bernama Alice hendak mentransfer uang 100000 ke rekening Shadiq. Operasi ini

melibatkan 2 kali operasi update pada database, yaitu

1. mengurangi saldo rekening Alice

2. menambah saldo rekening Shadiq

Bagaimana jika diantara 2 operasi di atas ternyata PLN mati, atau mungkin Pak Satpam tidak sengaja

menyenggol komputer mbak Teller. Otomatis saldo rekening Alice berkurang tetapi saldo rekening Shadiq tak

berubah. Lalu bagaimana solusinya?

Inti dari transaksi adalah membundel operasi kedalam sebuah atau tidak sama sekali operasi. Artinya kedua

operasi update di atas dibundel dalam satu operasi. Jika update rekening Alice berhasil sementara update

rekening Shadiq tak berhasil, maka maka kita ingin agar keduanya dibatalkan. Jika keduanya sukses, barulah

semuanya jadi dilakukan. Dalam SQL, kita membundel 2 operasi update di atas menjadi satu transaksi yang

diawali dengan BEGIN dan diakhiri dengan COMMIT.

Page 2: LKP 11 - BASIS DATA

Praktikum Basis Data (KOM 205) – Praktikum11

BEGIN;UPDATE account SET saldo = saldo – 100000WHERE nama = 'Alice';UPDATE account SET saldo = saldo + 100000WHERE nama = 'shadiq';

COMMIT;

Sebu ah blok tran saksi

Contoh lain dari transaksi :

1. Mulai transaksi BEGIN; 2. Masukkan data baru INSERT INTO deret VALUES (6); 3. Tidak jadi memasukkan nilai 6 ROLLBACK; 4. Lihat pada tabel deret, apakah perubahan terjadi? SELECT * FROM deret; 5. Coba ulangi langkah 1 sampai 4, tetapi pada langkah ke 3 jangan gunakan ROLLBACK tetapi COMMIT. Apa perbedaanya?

Lihat data yang terjadi. Apa kesimpulan anda tentang perintah ROLLBACK dan COMMIT ?

INTEGRITAS DATA DENGAN BANYAK USER

Bagaimana menjamin integritas data ketika suatu tabel diakses oleh dua user atau lebih, sedangkan user pertama melakukan perubahan pada data ? Berikut simulasinya.

Kita akan membuat 2 user baru dan memberikan izin akses tabel deret kepada kedua user baru tersebut.

CREATE USER satu SUPERUSER PASSWORD 'satu'; CREATE USER dua SUPERUSER PASSWORD 'dua';

Anda dapat mengakses database postgres dengan menggunakan kedua user tersebut dengan cara membuka psql console (Start -> All Program -> PostgreSQL-> SQL Shell) dan login sebagai user satu dan user dua.

Page 3: LKP 11 - BASIS DATA

Praktikum Basis Data (KOM 205) – Praktikum11

Buka lagi jendela console dan loginlah sebagai user dua.

1. Jalankan perintah BEGIN; pada user sat u .2. Gunakan user satu, masukkan 6 pada tabel deret : INSERT INTO deret VALUES (6);3. Lalu cek isi tabel deret : SELECT COUNT(*) FROM deret;4. Pindah dan gunakan user dua, lalu cek isi tabel deret. Apakah anda melihat perbedaan?5. Pindah lagi ke user satu lalu jalankan perintah : COMMIT;6. Pindah lagi ke user dua lalu cek isi tabel deret. Lagi, apakah anda melihat perbedaan?

Contoh diatas adalah contoh sederhana akan transaksi. Anda dapat mencoba perintah ROLLBACK untuk pembuktian lebih lanjut. Jangan lupa setiap awal transaksi (yang nantinya diakhiri dengan ROLLBACK/COMMIT) harus dimulai dengan BEGIN;

S A V E P O I N T

Save point mengizinkan kita untuk membatalkan bagian tertentu dari transaksi, tetapi tetap meng- commit bagian yang lain. Pendeklarasian : SAVEPOINT <nama_savepoint>

1 BEGIN; 2 3

UPDATE account SET saldo = saldo – 100000WHERE nama = 'Alice';

4 SAVEPOINT savepoint_ku; 5 UPDATE account SET saldo = saldo + 100000 6 WHERE nama = 'Bob'; 7 -- Oups salah... harusnya dimasukin ke Accountnya Wally 8 ROLLBACK TO savepoint_ku; 9 UPDATE account SET saldo = saldo + 10000010 WHERE nama = 'Wally';11 COMMIT;

Penjelasan :

Transaksi diatas bertujuan untuk mentransfer uang dari Account Alice sebanyak Rp. 100.000 keAccountnya Wally.

Proses yang dilakukan adalah:

1. Mengurangi jumlah uang yang ada pada Accountnya Alice (baris 2 dan 3)2. Membuat Save Point jika ada sesuatu yang tidak diinginkan terjadi [seperti mati lampu] (baris 4).3. Menambah jumlah uang yang ada pada Account Bob (baris 5 dan 6).4. Oups.. salah, harusnya di masukkan ke accountnya Wally (komentar baris 7)5. Kembali ke keadaan sebelum accountnya Bob di tambahkan (ROLLBACK TO... baris 8)6. Update account Wally (baris 9 dan 10).7. Lakukan perubahan secara permanen pada data (COMMIT baris 11).

Waktu User satu User dua keteranganw1 SELECT COUNT(*) FROM deret; SELECT COUNT(*) FROM deret; Hasil = 5w2 BEGIN;w3 INSERT INTO deret VALUES (6);w4 SELECT COUNT(*) FROM deret; Hasil = 6w5 SELECT COUNT(*) FROM deret; Hasil = 5w6 COMMIT;w7 SELECT COUNT(*) FROM deret; Hasil = 6

Page 4: LKP 11 - BASIS DATA

Praktikum Basis Data (KOM 205) – Praktikum11

Contoh lainnya :

1 BEGIN;2 UPDATE deret SET nilai = 99 WHERE nilai = 1;3 SAVEPOINT savepoint_ku;

4 UPDATE deret SET nilai = 77 WHERE nilai = 99;

5 -- Oups salah... harusnya 55

6 ROLLBACK TO savepoint_ku;

7 UPDATE deret SET nilai = 55 WHERE nilai = 99;

8 -- Perhatikan parameter pada clause WHERE adalah 99 bukannya 77

9 COMMIT;

EXCLUSIVE LOCK (x-lock)

Yaitu ketika transaksi 1 melakukan perubahan pada objek A, maka transaksi 2 tidak dapat melakukan operasi apapun pada objek A. Contoh :

Waktu 1s

User2w1 BEGIN; BEGIN;w2 UPDATE deret SET nilai = 99 WHERE nilai =1;w3 DROP TABLE deret;w4 -- akan menunggu sampai user 1 commit/rollbackw5 COMMIT;w6 -- DROP TABLE Berhasilw7 COMMIT;

D E A D L OC K

Adalah situasi dimana dua atau lebih transaksi dalam kondisi wait-state, satu sama lain menunggu Lock dilepas sebelum di mulai.

Contoh :Waktu User satu User dua

w1 BEGIN; BEGIN;w2 UPDATE deret SET nilai = 111 WHERE nilai = 1;w3 -- Memegang X-Lock untuk Row nilai 1 UPDATE deret SET nilai = 222 WHERE nilai = 2;w4 -- Memegang X-Lock untuk Row nilai 2w5 UPDATE deret SET nilai = 2345 WHERE nilai = 2;w6 -- Menunggu User dua melepas X-Lock untuk nilai 2 UPDATE deret SET nilai = 1234 WHERE nilai = 1;w7 -- Menunggu User satu melepas X-Lock untuk nilai 1

w8 DEAD LOCK

System PostgreSQL akan menangani Dead Lock ini dengan cara membatalkan salah satu transaksi, dan karena Dead Lock telah di hilangkan, transaksi yang lainnya dapat berjalan. berikut pesan Errornya :

LEMBAR KERJA PRAKTIKUM

Page 5: LKP 11 - BASIS DATA

Praktikum Basis Data (KOM 205) – Praktikum11

(dikumpulkan ke asisten)

Nama: TanggalPraktikum:

NRP :WaktuPraktikum:

Nilai :NamaAsisten :

Waktu User satu User duaw1 BEGIN; BEGIN;w2 SELECT saldo FROM account WHERE nama = 'shadiq';w3 UPDATE account SET saldo = 50000 WHERE nama = 'shadiq';w4 SELECT saldo FROM account WHERE nama = 'shadiq';w5 COMMIT;w6 SELECT saldo FROM account WHERE nama = 'shadiq';w7 END;

1. Perhatikan transaksi berikut. Jika saldo shadiq saat w1 adalah 100.000, berapa saldo shadiq yang terbaca oleh user satu ketika w2, w4, dan w6 dieksekusi ? Jelaskan mengapa demikian.

2. Perhatikan transaksi berikut. Jika saldo shadiq saat w1 adalah 100.000, berapa saldo shadiq yang terbaca oleh user satu ketika w2 dan w5 dieksekusi ? Jelaskan mengapa demikian.

Waktu User satu User duaw1 BEGIN; BEGIN;w2 SELECT saldo FROM account WHERE nama = 'shadiq';w3 UPDATE account SET saldo = 50000 WHERE nama = 'shadiq';w4 COMMIT;w5 SELECT saldo FROM account WHERE nama = 'shadiq';w6 END;

Waktu User satu User duaw1 BEGIN; BEGIN;w2 SELECT COUNT * FROM account WHERE cabang = 'Bogor';w3 INSERT INTO account VALUES ('Ammar',90000, 'Bogor');w4 COMMIT;w5 SELECT COUNT * FROM account WHERE cabang = 'Bogor';

3. Perhatikan transaksi berikut. Jika jumlah nasabah saat w1 adalah 2, berapa jumlah nasabah yang terbaca oleh user satu ketika w2 dan w5 dieksekusi ? Jelaskan mengapa demikian

4. Berilah contoh skenario transaksi dengan dua user yang bisa menyebabkan deadlock. Sertakan pula screenshot pesan deadlock dari psql console.

Page 6: LKP 11 - BASIS DATA

MATERI TAMBAHAN : PHP GENERATOR

TujuanPraktikum:

Jika masih ada waktu, cobalah software PHP Generator berikut.

PHP Generator adalah software yang akan meng-generate code PHP untuk operasi insert, update, delete via aplikasi website berdasarkan query atau table yang kita berikan. Dengan PHP generator, aplikasi web bisa dibuat secara instant. Tetapi apabila kita ingin lebih fleksibel dalam membuat aplikasi, tentunya membuat code PHP sendiri adalah pilihan yang paling tepat.

Ada banyak pilihan software untuk meng-generate code PHP dari query yang kita berikan. Beberapa contohnya yaitu PHP Maker dan PostgreSQL PHP Generator.

Pastikan computer sudah terinstal XAMPP serta Postgre, dan sudah dibuat database yang akan dibuat aplikasi webnya. Buka aplikasi PostgreSQL PHP Generator (installer bisa didownload di himalkom.ipb.ac.id/download folder Software/basdat, ada juga versi portable). Isi parameter-parameter untuk tersambung ke database lalu klik next

Page 7: LKP 11 - BASIS DATA

Klik Add Table or view

Klik next beberapa kali hingga sampai pada tampilan berikut

Page 8: LKP 11 - BASIS DATA

Buat folder pada htdocs dan pilih sebagai folder tempat output code PHP hasil generate. Kemudian klik Ready

Pastika servis apache sudah menyala. Buka browser dan ketikkan alamat sesuai folder output. Dalam contoh tadi alamatnya adalah http://localhost/aplikasiku/

Page 9: LKP 11 - BASIS DATA

Pilih link public.department.php, dan inilah hasilnya

Pada langkah sebelumnya, jika yang kita pilih adalah create query, maka tidak ada fasilitas edit dan delete. Klik create query dan tulis query yang akan ditampilkan hasilnya di website

Page 10: LKP 11 - BASIS DATA

Query contoh tadi disimpan dengan nama Query01.php, klik pada link ke file tersebut

Page 11: LKP 11 - BASIS DATA

Selain memakai software PostgreSQL PHP Generator, bisa juga memakai PHPMaker (bisa didownload juga di himalkom). Dengan memakai PHPMaker kita bahkan bisa memilih DBMS yang digunakan. Langkah-langkahnya kurang lebih sama, bisa anda coba sendiri.