7/25/2019 Modul Praktikum Sbd Ptiik 2013
1/70
MODUL PRAKTIKUM
SISTEM BASIS DATA
PTI 15007
LABORATORIUM SISTEM INFORMASI
PROGRAM TEKNOLOGI INFORMASI DAN ILMU KOMPUTER
UNIVERSITAS BRAWIJAYA
MALANG
2013
7/25/2019 Modul Praktikum Sbd Ptiik 2013
2/70
2
DAFTAR ISI
Bab I - Data Definition Languange (Ddl) .................................................................................. 5
1.1 Tipe Data ..................................................................................................................... 5
1.2 Membuat Tabel ........................................................................................................... 5
1.3 Melihat Tabel .............................................................................................................. 9
1.4 Membuat View ............................................................................................................ 9
1.5 Memodifikasi Objek Database .................................................................................. 10
1.6 Penghapusan Objek Database ................................................................................... 11
1.7 Latihan ............................................................................................................................ 12
Bab II - Simple Sql Queries................................................................................................... 13
2.1 Simple Sql ...................................................................................................................... 13
2.2 Latihan ............................................................................................................................ 15
Bab III - Data Manipulation Language .................................................................................... 16
3.1 Data Manipulation Language ......................................................................................... 16
3.2 Menambahkan Baris Baru Ke Dalam Tabel .................................................................. 16
3.3 Menambahkan Baris Dengan Nilai Null ........................................................................ 17
3.4 Sintak Statement Update ................................................................................................ 17
3.5 Mengupdate Baris Dalam Tabel ..................................................................................... 17
3.6 Statement Delete ............................................................................................................ 18
3.7 Menghapus Baris Dari Tabel.......................................................................................... 18
3.8 Menggunakan Subquery Dalam Statement Insert .......................................................... 18
3.9 Transaksi Database ......................................................................................................... 18
3.10 Latihan .......................................................................................................................... 19
Bab IV - Menampilkan Data Dari Banyak Tabel .................................................................... 20
4.1 Penggabungan Tabel ...................................................................................................... 20
4.2 Inner Join ........................................................................................................................ 20
4.3 Outer Joins...................................................................................................................... 23
4.4 Self Join .......................................................................................................................... 27
4.5 Latihan ............................................................................................................................ 27
7/25/2019 Modul Praktikum Sbd Ptiik 2013
3/70
3
Bab V - Relational Operator .................................................................................................... 28
5.1 Contoh Penggunaan Operasi Matematika ...................................................................... 28
5.2 Fungsi Baris Tunggal ..................................................................................................... 29
Bab VIColumn Function And Grouping ............................................................................. 34
6.1 Fungsi Group .................................................................................................................. 34
6.2 Latihan ............................................................................................................................ 38
Bab VII - Union, Intersection, Dan Difference Operations ..................................................... 39
7.1 Union .............................................................................................................................. 39
7.2 Intersection ..................................................................................................................... 40
7.3 Difference ....................................................................................................................... 42
7.4 Operasi Gabungan Dari Union, Intersection, Dan Difference ....................................... 44
7.5 Latihan ............................................................................................................................ 44
Bab VIII - Sub Query ............................................................................................................... 46
8.1 Menggunakan Subquery Untuk Menyelesaikan Masalah .............................................. 46
8.2 Sintak Subquery ............................................................................................................. 47
8.3 Penempatan Subquery .................................................................................................... 47
8.4 Penggunaan Subquery .................................................................................................... 48
8.5 Petunjuk Penggunaan Subquery ..................................................................................... 49
8.6 Tipe-Tipe Subquery........................................................................................................ 49
8.7 Subquery Baris Tunggal ................................................................................................. 49
8.8 Menjalankan Subquery Baris Tunggal ........................................................................... 50
8.9 Menggunakan Fungsi Group Dalam Subquery .............................................................. 50
8.10 Klausa Having Dengan Subquery ................................................................................ 51
8.11 Subquery Baris Ganda .................................................................................................. 52
8.12 Latihan .......................................................................................................................... 54
Bab IX - Data Concurrency And Locking ............................................................................... 54
9.1 Concurrency And Locking ............................................................................................. 55
9.2 Isolation Level ................................................................................................................ 55
9.3 Lock Wait ....................................................................................................................... 56
9.4 Deadlocks ....................................................................................................................... 56
7/25/2019 Modul Praktikum Sbd Ptiik 2013
4/70
4
9.5 Cursor Stability With Currently Committed (Cs With Cc) ............................................ 57
9.6 With Currently Committed ............................................................................................ 59
9.7 Repeatable Read ............................................................................................................. 61
9.8 Skenario Phantom Read : Read Stability ....................................................................... 62
9.9 Uncommited Read : Cursor Stability ............................................................................. 63
9.10 Skenario Uncommited Read : Uncommited Read ....................................................... 64
Bab X - Backup And Recovery ............................................................................................... 65
10.1 Gambaran Backup Dan Recovery ................................................................................ 65
10.2 Database Logging ......................................................................................................... 66
10.3 Backup .......................................................................................................................... 67
10.4 Incremental Backup...................................................................................................... 68
10.5 Database Recovery ....................................................................................................... 68
10.6 Tablespace Backup Dan Restore .................................................................................. 69
10.7 Latihan .......................................................................................................................... 70
7/25/2019 Modul Praktikum Sbd Ptiik 2013
5/70
5
BAB I - DATA DEFINITION LANGUANGE (DDL)
TUJUAN BELAJAR :
Memahami tipe data yang di dukung oleh DBMS
Memahami dan menerapkan sintaks DDL
Memahami dan menerapkan constraint
1.1
TIPE DATA
Tipe-tipe data yang digunakan dalam SQL tidak memiliki perbedaan jauh dengan bahasa
pemprograman pada umumnya. Dalam SQL kita akan menemukan tipe data seperti
integer (bigint, int, smallint), float, decimal/numeric, double, real, char, varchar, date,
time, timestamp, blob, dll.
Mengenai tipe data waktu pembagiannya seperti ini :
a. Date ( YYYY-MM-DD)
b. Time (HH:MM:SS)
c. Timestamp (YYYY- MM- DD-HH:MM:SS:ssssss)
1.2 MEMBUAT TABEL
Untuk membuat tabel, syntax yang digunakan adalah CREATE TABLE. Berikut ini
adalah Contoh pembuatan tabel :
1.2.1 Tabel Sederhana
CREATE TABLE MYTABLE (col integer)MYTABLE adalah nama dari tabel, col adalah nama dari atribut/field, integer
adalah tipe data dari atribut.
1.2.2
Tabel dengan Default Value
CREATE TABLE USERS (
NAME CHAR(20),
AGE INTEGER,
7/25/2019 Modul Praktikum Sbd Ptiik 2013
6/70
6
PROFESSION VARCHAR(30) with default 'Student')
CREATE TABLE DEPT (
DEPTNO SMALLINT NOT NULL
GENERATED ALWAYS AS IDENTITY (START WITH 500, INCREMENT
BY 1),
DEPTNAME VARCHAR(36) NOT NULL,
MGRNO CHAR(6),
ADMRDEPT SMALLINT NOT NULL,
LOCATION CHAR(30))
Pada tabel dengan default value yang pertama, field PROFESSION memiliki nilai
yang sudah kita tetapkan, yaitu student. Jika tabel ini tidak kita isi, maka student
secara otomatis menjadi nilai dari field profesi.
Pada tabel yang kedua, field DEPTNO memiliki nilai awal 500, ketika
pertambahan baris maka terjadi penambahan nilai +1. Tabel baris kedua menjadi
501, baris ketiga menjadi 502, dst.
1.2.3
Tabel dengan NOT NULL Value
Pada tabel DEPT di atas, pada NOT NULL. NOT NULL menginisialisasi field
bahwa field tersebut tidak boleh kosong/tidak terisi.
1.2.4 Tabel dengan Constraint
Contraint berfungsi untuk mendefinisikan aturan-aturan dalam tabel. Inilah tipe-
tipe contraint :
a. UNIQUE
7/25/2019 Modul Praktikum Sbd Ptiik 2013
7/70
7
Fungsinya adalah menjaga tabel dari terjadinya duplikasi nilai. Namun NULL
diperbolehkan menjadi nilai data dari suatu field UNIQUE tabel.
Contoh tabel dengan UNIQUE :
CREATE TABLE Persons
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
UNIQUE (P_Id)
)
CREATE TABLE Persons
(
P_Id int NOT NULL UNIQUE,
LastName varchar(255) NOT NULL,
FirstName varchar(255)
)
CREATE TABLE Persons
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
CONSTRAINT uc_PersonID UNIQUE (P_Id,LastName)
)
b. PRIMARY KEY
Fungsinya adalah mirip dengan UNIQUE, Namun PRIMARY KEY tidak
memperbolehkan adanya nilai NULL.
CREATE TABLE M_KERJA (
K_KERJA VARCHAR(3) NOT NULL,
SINGKAT VARCHAR(15) NULL,
7/25/2019 Modul Praktikum Sbd Ptiik 2013
8/70
8
CONTENT VARCHAR(45) NULL,
PRIMARY KEY(K_KERJA)
)
c. REFERENTIAL
Fungsinya adalah untuk menjaga hubungan antar tabel.
format tabel Referential Integrity
CREATE TABLE DEPENDANT_TABLE
(ID INTEGER REFERENCES BASE_TABLE
(UNIQUE_OR_PRIMARY_KEY),
NAME VARCHAR(9)
);
CREATE TABLE DEPENDANT_TABLE
(ID INTEGER,
NAME VARCHAR(9),
CONSTRAINT constraint_name FOREIGN KEY (ID)
REFERENCES BASE_TABLE(UNIQUE_OR_PRIMARY_KEY));
Contoh
CREATE TABLE MAHASISWA (
NIM char (15) PRIMARY KEY NOT NULL,
NAMA char(30)
);
CREATE TABLE KHS (
NIM char (15) REFERENCES MAHASISWA (NIM),
:
:
);
7/25/2019 Modul Praktikum Sbd Ptiik 2013
9/70
9
d. CHECK
Fungsinya adalah menjaga agar data yang dimasukkan dalam field/kolom
sesuai dengan aturan yang dibuat.
Contoh Tabel dengan PRIMARY KEY dan CHECK
CREATE TABLE EMPLOYEE
(ID INTEGER NOT NULL PRIMARY KEY,
NAME VARCHAR(9),
DEPT SMALLINT CHECK (DEPT BETWEEN 10 AND 100),
JOB CHAR(5) CHECK (JOB IN 'Sales','Mgr','Clerk'),
HIREDATE DATE,
SALARY DECIMAL(7,2),
CONSTRAINT YEARSAL CHECK ( YEAR(HIREDATE) > 1986
OR SALARY > 40500 )
)
1.3 MELIHAT TABEL
Tabel yang sudah kita buat sebelumnya bisa kita lihat dengan menggunakan perintah
SELECT
Contoh melihat keseluruhan isi tabel EMPLOYEE
SELECT * from EMPLOYEE
Jika hanya mau melihat sebagian field dari tabel EMPLOYEE
SELECT NAME, JOB from EMPLOYEE
1.4 MEMBUAT VIEW
VIEW adalah virtual tabel yang diturunkan dari satu atau lebih tabel atau juga dari view
lainnya. Mengapa disebut virtual? Karena view tidak memiliki data sebenarnya, dia
hanya mengacu pada hasil dari sebuah SELECT STATEMENT.
Contoh pembuatan view yang diambil dari tabel EMPLOYEE
CREATE VIEW MYVIEW AS
SELECT LASTNAME, HIREDATE FROM EMPLOYEE
7/25/2019 Modul Praktikum Sbd Ptiik 2013
10/70
10
Untuk melihat view, kita bisa menggunakan cara yang sama seperti melihat tabel.
1.5
MEMODIFIKASI OBJEK DATABASEDatabase yang kita buat bisa kita modifikasi. Fungsi utama yang digunakan untuk
memodifikasi adalah ALTER. Modifikasi object database meliputi :
1.5.1
Menambah field/kolom baru
Format penambahan field baru adalah
ALTER TABLE nama_tabel
ADD COLUMN nama_kolom tipe_data (batasan);
Contoh penambahan field baru pada tabel EMPLOYEE
ALTER TABLE Employees
ADD COLUMN EMPAddress Char(40);
1.5.2 Merubah Nama field/kolom
Format perubahan nama field adalah
ALTER TABLE nama_tabel
RENAME COLUMN nama_kolom_lama TO nama_kolom_baru;
Contoh perubahan field pada tabel EMPLOYEE
ALTER TABLE Employees
RENAME COLUMN EMPAddress TO Alamat;
1.5.3 Merubah tipe data dari field
Format Perubahan tipe data dari field adalah
ALTER TABLE nama_tabel
ALTER COLUMN nama_kolomSET DATA TYPE new_data_type
7/25/2019 Modul Praktikum Sbd Ptiik 2013
11/70
11
Contoh perubahan tipe data pada tabel EMPLOYEE
ALTER TABLE EMPLOYEE
ALTER COLUMN ALAMAT SET DATA TYPE char (15)
1.5.4 Menambah Constraint
Format penambahan constraint
ALTER TABLE nama_tabel
ALTER COLUMN nama_kolomSET constraint
Contoh penambahan constraint
ALTER TABLE EMPLOYEE
ALTER COLUMN ALAMAT SET NOT NULL
1.5.5 Menghapus kolom
Format penghapusan kolom
ALTER TABLE nama_tabel
DROP COLUMN nama_kolom
Contoh penambahan constraint
ALTER TABLE EMPLOYEE
DROP COLUMN ALAMAT
1.5.6
Merubah Nama Objek DatabaseFormat Perubahan nama suatu tabel :
RENAME nama_tabelto nama_tabel_baru;
Contoh perubahan nama objek EMPLOYEE:
RENAME EMPLOYEE to PEGAWAI;
1.6 PENGHAPUSAN OBJEK DATABASE
Format Penghapusan suatu tabel :
7/25/2019 Modul Praktikum Sbd Ptiik 2013
12/70
12
DROP TABLE nama_tabel;
Contoh :
DROP TABLE PEGAWAI;
Berhati hati ketika Melakukan penghapusan objek/tabel. Karena ketika anda
menghapus suatu objek berarti :
a.
Semua data dan struktur dari table akan dihapus
b. Semua transaksi pending akan di-commit
c.Semua indeks akan dihapus
d. Perintah drop ini tidak bisa di-rollback
1.7 LATIHAN1. Implementasikan model relasioanal berikut ke DBMS :
2.
Modifikasi table MHS_KOTA sehingga mempunyai struktur seperti berikut
(perlihatkan hasilnya) :
Name Null? Type Constr.
NIM Not VARCHAR(15) FK PK
K_PROPINSI VARCHAR(9) FK
K_NEGARA VARCHAR(9) FK
K_KOTA VARCHAR(9) FK
ALAMAT VARCHAR(110)
7/25/2019 Modul Praktikum Sbd Ptiik 2013
13/70
13
KODE_POS VARCHAR(6)
3. Buatlah table MHS_KOTA2 yang memiliki struktur sama seperti table MHS_KOTA!
4.
Drop table MHS_KOTA!
5.
Ubah nama table MHS_KOTA2 menjadi MHS_KOTA!
BAB II - SIMPLE SQL QUERIES
TUJUAN BELAJAR :
Memahami operasi SELECT
Menampilkan data dari suatu tabel
2.1 SIMPLE SQL
Struktur sederhana sebuah query SQL adalah sebagai berikut.
SELECTnama_kolom
FROMnama_tabel
Perintah SELECT digunakan untuk melihat isi suatu tabel tertentu.Contoh melihat keseluruhan isi tabel DEPARTMENT
SELECT * FROM DEPARTMENT
Gambar 2.1 Contoh menampilkan keseluruhan isi table
Jika hanya mau melihat sebagian field dari tabel DEPARTMENT
SELECT DEPTNO, DEPTNAME, ADMRDEPT FROM DEPARTMENT
7/25/2019 Modul Praktikum Sbd Ptiik 2013
14/70
14
Gambar 2.2 Contoh menampilkan sebagian kolom suatu table
7/25/2019 Modul Praktikum Sbd Ptiik 2013
15/70
15
2.2 LATIHAN
1. Tampilkan seluruh data dari tabel ACT dan PROJECT!
2.
Tampilkan SALES_PERSON, REGION, SALES dari tabel SALES!
3. Tampilkan 5 kolom dari tabel EMPLOYEE! (kolom yang ditampilkan bebas)
7/25/2019 Modul Praktikum Sbd Ptiik 2013
16/70
16
BAB III - DATA MANIPULATION LANGUAGE
TUJUAN BELAJAR :
Memahami Statement DML (Data Manipulation Language)
Menyisipkan baris kedalam table
Merubah baris dalam table
Menghapus baris dari table
Mengontrol transaksi
3.1 DATA MANIPULATION LANGUAGE
Data Manipulation Language (DML) adalah suatu statement yang dijalankan pada saat kita
memerlukan :
Penambahan baris baru pada table
Mengupdate baris yang ada pada table
Menghapus baris yang ada pada table
Statement DML identic dengan operasi INSERT, UPDATEdan DELETE.
Istilah transaksi mengandung pengertian kumpulan Statement DML yang membentuk suatu
fungsi tertentu.
3.2 MENAMBAHKAN BARIS BARU KE DALAM TABEL
INSERT INTO :perintah ini digunakan untuk memasukkan data ke database.
Menambahkan baris baru kedalam table menggunakan perintah INSERT INTO.
INSERT INTO table [(column [, column ] ) ]
VALUES (value [, value] );
INSERT INTO STAFF (id, name, job, dept, salary)
values (111, Deny, Mgr, 20, 10000)
7/25/2019 Modul Praktikum Sbd Ptiik 2013
17/70
17
3.3 MENAMBAHKAN BARIS DENGAN NILAI NULL
Kolom yang tidak disebutkan dalam perintah INSERT INTO secara otomatis akan diisi
dengan nilai NULL.
Atau secara eksplisit memasukkan nilai NULL ke suatu kolom :
3.4 SINTAK STATEMENT UPDATE
Untuk memodifikasi baris data yang ada pada table digunakan perintah UPDATE.
Sintak dari perintah UPDATE :
UPDATE table
SET column = value [, column = value, ]
[WHERE condition];
3.5 MENGUPDATE BARIS DALAM TABEL
Berikut contoh perintah UPDATE untuk mengubah satu baris saja :
Jika klausa WHERE dihilangkan, maka perintah UPDATE akan mengubah nilai kolom dari
semua data atau record yang ada pada tabel :
INSERT INTO STAFF (id, name, job, ___ ___)
VALUES (190, Will, Acc);
INSERT INTO STAFF
VALUES 200 Smith Sec NULL NULL
UPDATE STAFF
SET salary = 50000.00
=
UPDATE staff
SET id = 200
7/25/2019 Modul Praktikum Sbd Ptiik 2013
18/70
18
3.6 STATEMENT DELETE
Baris data yang ada pada table dapat dihapus dengan menggunakan perintah DELETE.
Sintakpenulisannya :
3.7 MENGHAPUS BARIS DARI TABEL
Jika klausa WHERE disertakan pada perintah DELETE maka baris data tertentu yang akan
dihapus hanya yang memenuhi criteria pada WHERE :
1 row deleted
Tapi jika klausa WHERE dihilangkan, maka semua baris data dalam table akan dihapus :
Semua baris data di copy_staff akan terhapus.
3.8 MENGGUNAKAN SUBQUERY DALAM STATEMENT INSERT
Subquery dapat digunakan dalam statement INSERT :
3.9 TRANSAKSI DATABASE
Transaksi database berisi salah satu dari hal berikut :
Statement DML untuk melakukan manipulasi terhadap data yang telah ada.
Statement DDL untuk membuat, menghapus atau mengubah sebuah object database.
DELETE FROM STAFF
WHERE id = 200;
DELETE FROM copy_staff
INSERT INTO copy_staff
(SELECT id, name, job, dept, salary
FROM staff
WHERE id = 201)
VALUES (201, Kimura, Acc, 20, 20000);
7/25/2019 Modul Praktikum Sbd Ptiik 2013
19/70
19
3.10 LATIHAN
1. Buat table copy_employee yang mempunyai struktur yang sama dengan table
employee.
2.
Tambahkan baris data berikut kedalam table copy_employee
EMPNO FIRSTNME SALARY
68093 Alisa Aulia 1000
11039 Bayu Setiawan 2000
11093 Willy Wonka 500
11033 Jessica Alba 2500
11099 Morgan Kuffman 1200
3. Ubah nama yang terdapat pada row ke-2 menjadi Lebo Mariano
4. Ubah Salary menjadi 1700 untuk semua employee yang 2 digit empno
terbelakangnya 93. Periksa perubahan yang dibuat pada soal no 3 dan 4.
5.
Delete mahasiswa dengan nama Morgan Kuffman, kemudian periksa hasilnya :
6. Setelah itu hapus semua data dalam table copy_employee
7. Periksa hasilnya dengan me-list semua isi tabel
7/25/2019 Modul Praktikum Sbd Ptiik 2013
20/70
20
BAB IV - MENAMPILKAN DATA DARI BANYAK TABEL
TUJUAN BELAJAR :
Setelah mempelajari materi dalam bab ini, mahasiswa diharapkan mampu:
Dapat menulis statement SELECT yang mengakses data ke lebih dari satu tabel dengan
menggunakan operator join.
Menampilkan data yang tidak memenuhi kondisi join dengan menggunakan operator
outer join.
Melakukan join terhadap table itu sendiri (self join).
4.1 PENGGABUNGAN TABEL
Perintah select sederhana pada SQL merdupakan perintah untuk memilih satu atau
lebih kolom yang terdapat pada satu tabel. Kesulitan meningkat adalah ketika perintah
select menggunakan tabel sebanyak dua atau lebih tabel sebgai sumber data yang ingin
ditampilkan. Hal ini membuat banyak kemungkinan mengenai hasil akhir yang di dapat.
Ada dua tipe penggabungan tabel pada perintah SQL :1.Inner join
2.Outer join
Kedua tipe penggabungan tersebut akan dijelaskan secara detail pada bagian dibawah
ini.
4.2 INNER JOIN
Inner join adalah bentuk penggabungan yang paling sering digunakan pada
perintah SQL. Inner join dapat di klasifikasikan ke dalam bentuk :
4.2.1 Equi-join
Bentuk ini digunakan ketika dua tabel digabungkan berdasarkan kesamaan
kolom yang telah ditentukan; contohnya :
7/25/2019 Modul Praktikum Sbd Ptiik 2013
21/70
21
Gambar 4.1 : contoh equi-join
Table EMPLOYEE memiliki primary key EMPNO, dan memiliki foreign key
WORKDEPT dimana WORKDEPT ini merupakan primary key dari table yang
lain yaitu table DEPARTMENT dengan nama kolom DEPTNO. Relasi antara
EMPLOYEE dengan DEPARTEMENT disebut equi-join. Relasi antara dua
tabel ditulis dalam klausa WHERE. Berikut contoh mendapatkan record data
dengan menggunakan EquiJoin :
Gambar 4.2 : mendapatkan record data dengan equi-join
Contoh query lain Equi-join :
7/25/2019 Modul Praktikum Sbd Ptiik 2013
22/70
22
a.Menggunakan JOIN ON
Gambar 4.3 : contoh lain penulisan equi join menggunakan join on
b.
Menggabungkan tiga tabel
Gambar 4.4: Tabel Project, Department, dan Employee
Misalnya ingin didapatkan data PROJNO, DEPTNO, MGRNO, dan
LASTNAME dari DEPTNO = D21. Maka query untuk menampilkan data
tersebut adalah sebagai berikut:
7/25/2019 Modul Praktikum Sbd Ptiik 2013
23/70
23
Gambar 4.5: Hasil dari pencarian nomer proyek dari department D21 beserta
nomer manager dan nama managernya
4.1.1 Cross join
Cross join merupakan penggabungan dari tabel menggunakan metode Cartesian
product sederhana. Contohnya :
SELECT * FROM EMPLOYEE, DEPARTMENT
4.3 OUTER JOINS
Outer join merupakan bentuk penggabungan khusus yang digunakan pada perintah
SQL. Pada outer joins, table pertama yang ditentukan pada perintah SQL pada klausa
FROM, ditandai sebagai tabel KIRI dan table selain itu ditandai sebagai tabel KANAN.
Outer join dibagi menjadi tiga tipe :
Left outer join
Right outer join
Full outer join
7/25/2019 Modul Praktikum Sbd Ptiik 2013
24/70
24
Gambar 4.6 : perbedaan tipe outer join
Berikut ini adalah dua tabel yang akan digunakan sebagai contoh penjelasan masing-
masing tipe dari outer join.
Tabel Department
Tabel Project
7/25/2019 Modul Praktikum Sbd Ptiik 2013
25/70
25
Gambar 4.7 : Tabel department dan project yang akan digunakan sebagai contoh
4.3.1 Left outer join
Pada left outer join, hasil akhir merupakan perpaduan(union) dari hasil akhir
equi-join, termasuk beberapa baris dari tabel KIRI yang tidak cocok. Berikut
merupakan contoh query serta pengembaliannya dari left outer join :
SELECT *
FROM DEPARTMENT D
LEFT OUTER JOIN PROJECT P
ON P.DEPTNO = D.DEPTNO
Gambar 4.8 : pengembalian dari query left outer join
4.3.2 Right outer join
Pada right outer join, hasil akhir merupakan perpaduan(union) dari hasil akhir
equi-join, termasuk beberapa baris dari tabel KANAN yang tidak cocok. Berikut
merupakan contoh query serta pengembaliannya dari right outer join :
SELECT *
FROM DEPARTMENT D
RIGHT OUTER JOIN PROJECT P
ON P.DEPTNO = D.DEPTNO
7/25/2019 Modul Praktikum Sbd Ptiik 2013
26/70
26
Gambar 4.9 : pengembalian dari query right outer join
4.3.3
Full outer join
Pada full outer join, hasil akhir merupakan perpaduan(union) dari hasil akhir
equi-join, termasuk beberapa baris dari tabel KANAN dan KIRI yang tidak
cocok. Berikut merupakan contoh query serta pengembaliannya dari full outer
join :
SELECT *
FROM DEPARTMENT D
FULL OUTER JOIN PROJECT P
ON P.DEPTNO = D.DEPTNO
Gambar 4.10 : pengembalian dari query full outer join
Jika kita ingin menampilkan daftar dari siswa yang telah didaftarkan dan yang
belum didaftarkan pada beberapa subjek, maka kemungkinan permasalahan
diatas dapat diselesaikan dengan left outer join.
7/25/2019 Modul Praktikum Sbd Ptiik 2013
27/70
27
4.4 SELF JOIN
Seringkali sebuah table perlu dijoin-kan dengan table itu sendiri. Contoh:
Tampilkan nama department dari B01 dan nama dari department yang mendapat laporan
dari B01.
Gambar 4.11: Ilustrasi tabel yang akan ditampilkan
Gambar 4.12 : mendapatkan record data dengan self join
4.5 LATIHAN1.Tampilkan informasi ACTION (dengan ACTNO lebih besar dari 100) informasi dan
desainer nama setiap tindakan proyek (dari tabel PROJACT). Tampilkan informasi
ini diurutkan berdasar nama desainernya.
2.Tampilkan nama proyek yang dikerjakan oleh manajer di setiap department.
Tampilkan pula nama belakang manajer dan nama department tempat manajer itu
bekerja.
7/25/2019 Modul Praktikum Sbd Ptiik 2013
28/70
28
BAB V - RELATIONAL OPERATOR
TUJUAN BELAJAR :
Setelah mempelajari materi dalam bab ini, mahasiswa diharapkan mampu:
Memahami bermacam tipe fungsi yang tersedia dalam SQL
Menggunakan fungsi Karakter, Bilangan danTanggal dalam statement SELECT
Mengelompokkan data dengan Klausa GROUP BY
Meng-include atau meng-exclude suatu baris data dengan klausa HAVING
Operator relasional adalah tes dasar dan operasi yang dapat dilakukan pada data. Operator ini
meliputi:
- Operasi Matematika seperti +, -, * dan /
- Logical operator : AND, OR dan NOT
-
Fungsi Baris Tunggal : CONCAT, SUBSTR, LENGTH, LOWER, UPPER,
INITCAP, dsb
- Operator perbandingan : =, , >=,
7/25/2019 Modul Praktikum Sbd Ptiik 2013
29/70
29
5.1.1 Operator Presedence
Perkalian dan pembagian memiliki prioritas (precedence) lebih tinggi daripada
penambahan dan pengurangan.
5.1.2 Penggunaan tanda kurung
Penggunaan tanda kurung memiliki prioritas paling tinggi disbanding presedensi
operator yang lain.
5.2 FUNGSI BARIS TUNGGALFungsi baris tunggal beroperasi hanya pada baris tunggal dan mengembalikan satu nilai
per baris.
5.2.1 Fungsi Karakter
Sintak penulisan :
function_name(column|expression, [arg1, arg2, ])
SELECTLASTNAME, SALARY, 2 * SALARY + 300
FROM DB2ADMIN.EMPLOYEE;
SELECTLASTNAME, SALARY, 2 * (SALARY + 300)
FROM DB2ADMIN.EMPLOYEE;
7/25/2019 Modul Praktikum Sbd Ptiik 2013
30/70
30
Fungsi karakter menerima karakter sebagai input dan dapat mengembalikan nilai
karakter atau bilangan. Fungsi karakter terbagi menjadi :
Fungsi konversi, yaitu LOWER, UPPER, INITCAP
Fungsi manipulasi : CONCAT, SUBSTR, LENGTH, INSTR, LPAD, RPAD,
TRIM,REPLACE.
Penggunaan Fungsi Konversi & Manipulasi
SELECT EMPNO,LASTNAME, WORKDEPT
FROM EMPLOYEE
WHERE LOWER(LASTNAME) = 'adamson'
SELECT EMPNO,CONCAT(FIRSTNME,LASTNAME) NAMA, JOB,
LENGTH(LASTNAME)
FROM EMPLOYEE
7/25/2019 Modul Praktikum Sbd Ptiik 2013
31/70
31
5.2.2 Fungsi bilangan
Ada 3 (tiga) fungsi bilangan :
ROUND : Pembulatan decimal ke angka terdekat.
TRUNC : Memotong nilai decimal ke posisi yang dikehendaki
MOD : Mendapatkan sisa pembagian
SELECT ROUND(45.981,2), ROUND(45.981,0),
ROUND(45.981,-1)
FROMSYSIBM.DUAL
SELECT TRUNC(45.981,2), TRUNC(45.981,0),
TRUNC(45.981,-2)
FROMSYSIBM.DUAL
SELECT LASTNAME, SALARY, MOD(SALARY,5000)
FROM EMPLOYEE
WHERE JOB = 'MANAGER'
7/25/2019 Modul Praktikum Sbd Ptiik 2013
32/70
32
5.2.3 Fungsi Tanggal
5.2.4
Coalesce
Fungsi COALESCE digunakan untuk menggantikan nilai NULL pada sebuah
pada result set.
SELECT LASTNAME,(SYSDATE-HIREDATE)/7 AS WEEKS
FROM EMPLOYEE
WHERE WORKDEPT= 'A00'
SELECTDEPTNAME, COALESCE(MGRNO, 'UNKNOWN') ASMANAGER
FROMDEPARTMENT
7/25/2019 Modul Praktikum Sbd Ptiik 2013
33/70
33
7/25/2019 Modul Praktikum Sbd Ptiik 2013
34/70
34
BAB VICOLUMN FUNCTION AND GROUPING
TUJUAN BELAJAR :
Setelah mempelajari materi dalam bab ini, mahasiswa diharapkan mampu:
Menyebutkan fungsi kolom yang umum dalam DB2
Menggunakan fungsi kolom untuk menampilkan data
6.1 FUNGSI GROUPFungsi Group melakukan operasi pada dua atau lebih baris data dan memberikan satu
hasil per group.
Tabel EMPLOYEE
Tipe-tipe fungsi group yang bisa digunakan : AVG, COUNT, MAX, MIN,
STDDEV,SUM, VARIANCE.
Sintak (cara penulisan) dari penggunaan Fungsi Group :
SELECT [DISTINCT] {*, column [alias] group_function(column) }
FROM table;
[WHERE condition(s) ]
[GROUP BY column]
7/25/2019 Modul Praktikum Sbd Ptiik 2013
35/70
35
6.1.1 Penggunaan Fungsi Count
Fungsi COUNT digunakan untuk mencari jumlah baris dalam table.
6.1.2 Penggunaan fungsi AVG dan SUM
Penggunaan Fungsi MIN dan MAX
6.1.3 Mengelompokkan Data dengan Fungsi GROUP BY
Hasil dari query dapat dikelompokkan berdasarkan suatu criteria tertentu dengan
menggunakan klausa GROUP BY. Misal rata-rata gaji dikelompokkan
berdasarkan nomor department.
SELECT COUNT (*) FROM EMPLOYEE;
SELECT AVG(SALARY), SUM(SALARY)
FROM EMPLOYEE
WHERE JOB LIKE '%NAG%'
SELECT MIN(SALARY)AS GAJI_MIN, MAX(SALARY)AS GAJI_MAX
FROM EMPLOYEE
7/25/2019 Modul Praktikum Sbd Ptiik 2013
36/70
36
Contoh penggunaan dengan klausa group by
6.1.4 Klausa HAVING
Klausa WHERE tidak boleh digunakan pada query yang sudah dikelompokkan
dengan menggunakan Fungsi Group dengan klausa GROUP BY. Contoh
kesalahannya seperti ini :
SELECT WORKDEPT,AVG(SALARY)
FROM EMPLOYEE
GROUP BY WORKDEPT
7/25/2019 Modul Praktikum Sbd Ptiik 2013
37/70
37
HAVING adalah operator khusus, yang dapat digunakan hanya dengan klausa
GROUP BY untuk menyaring baris yang diinginkan dalam data dikelompokkan.
Contoh penggunaan klausa HAVING :
SELECT [DISTINCT] {*, column [alias] group_function(column) }
FROM table;
[WHERE condition(s) ]
[GROUP BY column]
[HAVING group_condition]
[ORDER BY column];
SELECT AVG(SALARY),JOB
FROM EMPLOYEE
GROUP BY JOB
HAVING AVG(SALARY)>20000
7/25/2019 Modul Praktikum Sbd Ptiik 2013
38/70
38
Penggunaan HAVING dengan WHERE :
6.2 LATIHAN
1.Hitung jumlah pekerja pria pada setiap job yang ada.
2.Hitung total gaji yang di dapat dari setiap department yang lebih dari 200000.
Tampilkan juga nama departmennya dan hasil query tidak boleh NULL.
3. Tampilkan total project yang dikerjakan oleh setiap department yang ada dan
tampilkan nama departmentnya.
SELECT JOB,SUM(SALARY)
FROM EMPLOYEE
WHEREJOB NOT LIKE '%MAN%'
GROUP BY JOB
HAVING SUM(SALARY) > 13000
ORDER BY SUM(SALARY)
7/25/2019 Modul Praktikum Sbd Ptiik 2013
39/70
7/25/2019 Modul Praktikum Sbd Ptiik 2013
40/70
40
Gambar 7.1Output Contoh Operasi Union
7.1.2 Union All
Serupa dengan union, operator union all juga menggabungkan dua data set,
namun union all akan menampilkan seluruh data set yang digabung walaupun hal itu
menyebabkan duplikasi data.
Contoh :
Dari sintaks tersebut akan ditampilkan seluruh pegawai yang memiliki nama
depan berawalan C ataupun pegawai yang memiliki nama belakang berawalan H tanpa
memperhatikan duplikasi data.
Gambar 7.2 Output Contoh Operasi Union All dimana Terdapat Data yang
Terduplikasi
7.2 INTERSECTION
7.2.1 Intersect
SELECT EMPNO, FIRSTNME, LASTNAME FROM EMPLOYEE WHERE FIRSTNME
LIKE 'C%'
UNION ALL
SELECT EMPNO, FIRSTNME, LASTNAME FROM EMPLOYEE WHERE LASTNAME
LIKE 'H%';
7/25/2019 Modul Praktikum Sbd Ptiik 2013
41/70
41
Intersection (operatornya adalah intersect) merupakan operasi yang menghasilkan
result set berupa data-data yang sama dari beberapa data set yang diinterseksi.
Contoh :
Dari sintaks tersebut akan ditampilkan pegawai dimana pekerjaannya adalah
analyst dan edlevel adalah 18.
Gambar 7.3Output Contoh Operasi Intersection
SELECT LASTNAME, EDLEVEL
FROM EMPLOYEE
WHERE JOB = 'ANALYST'
INTERSECT
SELECT LASTNAME, EDLEVEL
FROM EMPLOYEE
WHERE EDLEVEL = 18;
7/25/2019 Modul Praktikum Sbd Ptiik 2013
42/70
42
7.2.2 Intersect All
Serupa dengan intersect, operator intersect all juga menampilkan data-data yang
sama, namun intersect all akan menampilkan seluruh data walaupun hal itu
menyebabkan duplikasi data.
Contoh :
7.3 DIFFERENCE
7.3.1 Except
Difference (operatornya adalah except) merupakan operasi yang menghasilkan
nilai kembalian berupa set yang merupakan data-data dari set pertama dikurangi data-
data dari set kedua.
Contoh :
SELECT LASTNAME, EDLEVEL
FROM EMPLOYEE
WHERE JOB = 'ANALYST'
INTERSECT ALL
SELECT LASTNAME, EDLEVEL
FROM EMPLOYEE
SELECT * FROM EMPLOYEE
WHERE JOB = 'ANALYST'
EXCEPT
SELECT * FROM EMPLOYEE
WHERE EDLEVEL = 18;
7/25/2019 Modul Praktikum Sbd Ptiik 2013
43/70
43
Dari sintaks tersebut akan ditampilkan pegawai yang pekerjaannya adalah analyst,
namun edlevel bukan 18.
Gambar 7.4Output Contoh Operasi Difference
7.3.2 Except All
Serupa dengan except, operasi except all juga menghasilkan nilai kembalian
berupa set yang merupakan data-data dari set pertama dikurangi data-data dari set kedua,
namun except all akan menampilkan seluruh data walaupun hal itu menyebabkan
duplikasi data.
Contoh :
SELECT * FROM EMPLOYEE
WHERE JOB = 'DESIGNER'
EXCEPT ALL
SELECT * FROM EMPLOYEE
7/25/2019 Modul Praktikum Sbd Ptiik 2013
44/70
44
Gambar 7.5Output Contoh Operasi Difference Except All
7.4 OPERASI GABUNGAN DARI UNION, INTERSECTION, DAN DIFFERENCEUntuk menyelesaikan kasus tertentu, kita dapat menggabungkan operasi union,
intersect, maupun difference.
Contoh :
Gambar 7.6Output Contoh Operasi Gabungan dari Union, Intersection, dan Difference
7.5 LATIHAN
1.
Dapatkan data nomor departemen, nama departemen, nomor proyek, nama proyek,
dan tanggal dimulainya proyek, dimana deptno adalah D01 atau projno MA2111!
2. Dapatkan departemen yang memiliki jumlah pegawai lebih dari 3 dan departemen
yang berawalan A!
3. Dapatkan data nama departemen, nama proyek dan nomor act yang departemennya
berawalan A namun actno bukan 60!
((SELECT * FROM EMPLOYEE WHERE JOB = 'MANAGER'
UNION
SELECT * FROM EMPLOYEE WHERE SALARY > 70000)
INTERSECT
SELECT * FROM EMPLOYEE WHERE BONUS > 700)
EXCEPT
7/25/2019 Modul Praktikum Sbd Ptiik 2013
45/70
45
4. Dapatkan nomor pegawai, nama pegawai (firstnme dan lastname), nomor departemen,
nama departemen dan gaji yang memiliki job berawalan C dan nomor departemen
adalah E21 namun gaji pegawai > 40000!
7/25/2019 Modul Praktikum Sbd Ptiik 2013
46/70
46
BAB VIII - SUB QUERY
TUJUAN BELAJAR :
Setelah mempelajari materi dalam bab ini, mahasiswa diharapkan mampu:
Menggambarkan tipe persoalan yang dapat dipecahkan oleh sub query
Mendefinisikan sub query
Memahami tipe-tipe dari subquery
Menulis subquery baris tunggal dan baris berganda
8.1 MENGGUNAKAN SUBQUERY UNTUK MENYELESAIKAN MASALAH
Pengertian subquery akan dijelaskan melalui ilustrasi berikut ini :
Misal kita ingin membuat suatu query untuk mencari gaji pegawai yang lebih besar dari
gaji yang dimiliki oleh pegawai bernama ABEL.
Untuk memecahkan persoalan ini, kita membutuhkan dua query, satu query untuk
mencari gaji yang dimiliki oleh ABEL dan query lain untuk mencari pegawai yang
memiliki gaji lebih besar daripada gaji ABEL.
Inner query atau subquery akan menghasilkan suatu nilai yang nantinya dipakai oleh
outer query atau main query.
7/25/2019 Modul Praktikum Sbd Ptiik 2013
47/70
47
8.2 SINTAK SUBQUERY
Sintak (cara penulisan) sub query :
8.3 PENEMPATAN SUBQUERY
Berikut Beberapa contoh penempatan Sub Query dalam Sebuah Query :
Sub Query di SELECT
Mendapatkan Jumlah keseluruhan dari pegawai LakiLaki dan Perempuan
Hasil Resultnya :
Sub Query di FROM
Mendapatkan Jumlah keseluruhan dari pegawai Laki Laki dan
Perempuan(dengan subquery di FROM)
SELECTselect_list
FROM table
WHERE expr operator
select(selectcount(sex) as
jumlah_emp fromemployee where
sex='F')p,(selectcount(sex) as
jumlah_emp fromemployee where
sex='M')lfromsysibm.dual
selectp.jumlah_emp asjumlah_perempuan, l.jumlah_emp as
jumlah_laki_laki
from(selectcount(sex) asjumlah_emp fromemployee where
sex='F')p,
(selectcount(sex) asjumlah_emp fromemployee wheresex='M')l
7/25/2019 Modul Praktikum Sbd Ptiik 2013
48/70
48
Hasil Resultnya :
Sub Query di WHERE
Mendapatkan data nomer pegawai, lastname,dan salary dari pegawai yang
memiliki salary terendah
Hasil Resultnya :
8.4 PENGGUNAAN SUBQUERY
Penggunaan Sub Query untuk menyelesaikan masalah seperti yang sudah dijelaskan
sebelumnya :
selectempno, firstnme EMPNO FIRSTNME
selectempno,lastname,salary
fromemployee
wheresalary = (selectmin(salary) from
employee)
7/25/2019 Modul Praktikum Sbd Ptiik 2013
49/70
49
fromemployee
wheresalary >
(selectsalary
fromemployee
wherefirstnme = upper('eva'));
------ ---------
000010 CHRISTINE
000030 SALLY
8.5 PETUNJUK PENGGUNAAN SUBQUERY
Berikut petunjuk dari penggunaan Sub Query :
Letakkan subqueri di dalam tanda kurung
Tempatkan subqueri pada sisi kanan dari kondisi pembandingan
Klausa ORDER BY dalam subquery tidak diperlukan jika yang dibentuk adalah Top-
N analysis.
Gunakan operator baris tunggal dengan subquery baris tunggal dan operator baris
ganda dengan sub query baris ganda.
8.6 TIPE-TIPE SUBQUERY
Tipe-tipe dari subquery :
Single row, sub query baris tunggal
Multiple-row, sub query baris ganda
Multiple-column, sub query kolom ganda
8.7 SUBQUERY BARIS TUNGGAL
Single row subquery memberikan hasil hanya satu baris pada bagian subquery. Untuk
single row subquery ini yang digunakan adalah operator pembandingan :
= , > , >= , < ,
7/25/2019 Modul Praktikum Sbd Ptiik 2013
50/70
50
8.8 MENJALANKAN SUBQUERY BARIS TUNGGALBerikut ini contoh penggunaan Subquery baris tunggal :
selectfirstnme, workdept, salary
fromemployee
whereworkdept =
(selectworkdept
fromemployee
whereempno = 000010)
andsalary
(selectmin(salary)
fromemployee
whereworkdept = 'A00');
WORKDEPT GAJI_MINIMAL
-------- ------------
B01 94250.00
C01 68420.00
D11 44680.00
E01 80175.00
8.10.1 APA YANG SALAH DENGAN STATEMENT INI ?
Kesalahan dalam subquery yang mungkin terjadi adalah operator baris tunggal (=)
digunakan
pada subquery yang menghasilkan lebih dari satu baris, seperti pada contoh berikut :
Apa yang salah dengan statement ini ?
selectempno, lastname
fromemployee
wheresalary =
(selectmin(salary)
fromemployee
groupbyworkdept);
The result of a scalar fullselect, SELECT INTO
statement, or VALUES INTO statement is more than one
row.. SQLCODE=-811, SQLSTATE=21000,
DRIVER=4.12.79
7/25/2019 Modul Praktikum Sbd Ptiik 2013
52/70
52
Statement tersebut salah, karena : operator baris tunggal (single-row operator) digunakan
bersama dengan subquery baris ganda (multiple-row subquery).
8.10.2 APAKAH STATEMENT INI MENGHASILKAN SUATU BARIS DATA ?
selectlastname, workdept
fromemployee
whereworkdept =
(selectworkdept
fromemployee
wherelastname = upper('harya'));
LASTNAME WORKDEPT
-------- --------
8.11 SUBQUERY BARIS GANDA
Multiple Row Subquery adalah subquery yang menghasilkan lebih dari satu baris. Untuk
multiple row subquery ini yang digunakan adalah operator pembandingan : IN, ANY
atau ALL.
Ciri-ciri dari Subquery baris ganda :
Mengembalikan lebih dari satu baris
Digunakan dengan menggunakan Operator Baris-Ganda
7/25/2019 Modul Praktikum Sbd Ptiik 2013
53/70
53
8.11.1
PENGGUNAAN OPERATOR ANY DALAM SUBQUERY BARIS GANDAOperator ANY identik dengan operator SOME, yang membandingkan suatu nilai dengan
tiap nilai yang ada dalam subquery.
Operator =ANY ekuivalen dengan IN.
Operator ANY ekuivalen dengan MINIMUM
selectempno, lastname, workdept, salary
fromemployee
wheresalary < any
(selectsalary
fromemployee
whereworkdept = 'A00')
andworkdept 'A00';
EMPNO LASTNAME WORKDEPT
SALARY
------ ---------- -------- --------
000020 THOMPSON B01 94250.00
000030 KWAN C01 98250.00
000130 QUINTANA C01 73800.00
000140 NICHOLLS C01 68420.00
200140 NATZ C01 68420.00
000060 STERN D11 72250.00
.....
Operator ALL membandingkan suatu nilai dengan semua nilai yang ada dalam subquery.
Operator >ALL ekuivalen dengan MAKSIMUM.
Operator
7/25/2019 Modul Praktikum Sbd Ptiik 2013
54/70
54
fromemployee
wheresalary < all
(selectsalary
fromemployee
whereworkdept = 'A00')
andworkdept 'A00';
------ ---------- -------- --------
000270 PEREZ D21 37380.00
200240 MONTEVERDE D21 37760.00
000280 SCHNEIDER E11 36250.00
000290 PARKER E11 35340.00
000300 SMITH E11 37750.00
000310 SETRIGHT E11 35900.00
200310 SPRINGER E11 35900.00
200330 WONG E21 35370.00
200340 ALONZO E21 31840.00
8.12 LATIHAN
1.
Tampilkan Nama Departement, beserta jumlah pegawai laki laki dan jumlah
pegawai perempuan tiap masingmasing department.
2. Tampilkan semua pegawai yang memiliki gaji diatas rata rata gaji keseluruhan
pegawai.
3. Tampilkan nama department, nama pegawai, no pegawai, gaji dari pegawai yang
memiliki gaji lebih besar dari gaji pegawai dengan no_pegawai 000270
BAB IX - DATA CONCURRENCY AND LOCKING
7/25/2019 Modul Praktikum Sbd Ptiik 2013
55/70
55
BAB IX - DATA CONCURRENCY AND LOCKING
TUJUAN BELAJAR :
Memahami perbedaan semantik antara Cursor Stability dan Currently Committed
Memahami perbedaan antara Repeatable Read, Read Stability, Cursor Stability, dan
Uncommitted Read
Mampu menentukan isolation level untuk database pada saat run time menggunakan CLP
Sebelum membahas mengenai Data Concurrency and Locking, ada beberapa hal yang harus
dikenali, seperti transaksi.
Sebuah transaksi diawali dengan statement SQL kemudian diakhiri dengan COMMIT atau
ROLLBACK dimana COMMIT berarti membuat perubahan secara permanen terhadap
database, sedangkan ROLLBACK mengembalikan perubahan. Kedua statement tersebut akan
melepaskan lock pada row.
9.1 Concurrency and LockingYang dimaksud dengan Concurrency adalah keadaan dimana lebih dari satu user mengakses
resource pada saat yang bersamaan. Sedangkan Locking merupakan mekanisme untuk
menjamin integritas dan konsistensi data. Lock biasanya diperoleh secara otomatis
berdasarkan tingkat isolasi yang dapat ditetapkan.
9.2 Isolation Level
Isolation level dapat dianggap sebagai aturan yang mengatur bagaimana DB2 bekerja dengan
lock itu sendiri. DB2 menyediakan level proteksi yang berbeda untuk mengisolasi data antara
lain :
- Uncommitterd Read (UR)
- Cursor Stability (CS)
o Currently committed (CC)
- Read Stability (RS)
- Repeatable Read (RR)
7/25/2019 Modul Praktikum Sbd Ptiik 2013
56/70
56
Perbandingan Isolation Level
9.3 Lock Wait
- Secara default, aplikasi menunggu tanpa batas waktu untuk memperoleh lock yang
dibutuhkan.
-
LOCKTIMEOUT (db cfg)
o Menentukan jumlah detik untuk menunggu lock
o Nilai defaultnya adalah -1 atau menunggu tanpa batas waktu (infinite wait)
9.4 Deadlocks
- Terjadi ketika dua atau lebih aplikasi menunggu resource tanpa batas waktu
-
Setiap aplikasi menahan resource yang dibutuhkan oleh aplikasi lain
- Menunggu yang tidak pernah terselesaikan
Pada praktikum kali ini menggunakan database sample. Jika database sample sudah ada, anda
dapat menggunakan query dibawah ini untuk membuat ulang.
db2 force applications all
db2 drop db sample
7/25/2019 Modul Praktikum Sbd Ptiik 2013
57/70
57
Selanjutnya connect ke database sample
Untuk mempermudah mengetahui perbedaan isolation level, buatlah tabel sederhana dengan
satu kolom.
9.5 Cursor Stability with Currently Committed (CS with CC)
Untuk mengetahui perbedaan penggunaan CC dengan tanpa CC, kita buat keadaan tanpa CC
terlebih dahulu dengan cara mematikan CC. Dengan perintah dibawah ini, kita telah
mengetahui bahwa keadan CC adalah ON.
Matikan CC dengan perintah dibawah ini
Selanjutnya pada Terminal A, matikan auto-commit (secara default ON). Ketika auto-commit
aktif, CLP secara otomatis melakukan COMMIT setiap selesai mengeksekusi statement SQL,
sehingga kita harus menonaktifkannya untuk mengatur kapan suatu transaksi akan di
COMMIT. Perintah db2 +c akan menonaktifkan auto-commit. Kemudian cek kondisi dengan
perintah list command options
db2sampl
db2 connect to SAMPLE
db2 create table TB1 (COLUMN1 integer)
db2 insert into TB1 (select 10 from syscat.tables fetch first 9 rows
db2 +c
db2 get db cfg for sample
7/25/2019 Modul Praktikum Sbd Ptiik 2013
58/70
58
Connect ke database sample
Lakukan query select seperti berikut untuk memastikan nilai dari col1. Kemudian update nilai
dari col1.
Buka Terminal baru (terminal B) sebagai aplikasi kedua yang mencoba mengakses tabel.
Kemudian koneksikan ke database sample.
Lakukan query untuk mengukur wait time.
Query tersebut tidak mengembalikan result, karena diblok oleh query pada Terminal
sebelumnya(terminal A).
Lepaskan lock Pada terminal A dengan cara commit transaksi menggunakan perintah
Secara otomatis pada terminal B akan mereturn nilai wait time. Block oleh terminal A sudah
dilepaskan melalui proses COMMIT dan transaksi pada terminal B bisa dilanjutkan.
list command o tions
connect to sam le
select * from tab1
update tab1 set col1 = 25
Time db2 select * from tab1
commit
7/25/2019 Modul Praktikum Sbd Ptiik 2013
59/70
59
9.6 With Currently Committed
Pada terminal A, aktifkan currently committed kemudian disconnect database agar nilai baru
dapat berpengaruh.
Reset juga koneksi pada Terminal B
Pada terminal A, lakukan query update.
Pada Terminal B, lakukan koneksi ke database dan coba untuk mengembalikan nilai dari tab1
update db cfg for sample using cur commit on
connect reset
db2 connect reset
connect to sample
update tab1 set col1 = 30
7/25/2019 Modul Praktikum Sbd Ptiik 2013
60/70
60
Query berhasil mengembalikan result, karena tidak ada yang memblok akses terhadap data.
Namun nilai yang dikembalikan bukan dari nilai yang terbaru, karena pada terminal A belum
dilakukan query COMMIT.
Pada Terminal A, lakukan COMMIT terhadap proses update dengan perintah berikut.
Pada Terminal B, lakukan query berikut untuk melihat hasilnya.
connect to
Time db2 select * from tab1
7/25/2019 Modul Praktikum Sbd Ptiik 2013
61/70
61
Nilai yang dikembalikan adalah nilai terbaru, karena sudah dilakukan COMMIT pada
terminal A. Akhiri koneksi pada Terminal A dan B
9.7 Repeatable ReadKita harus mengganti isolation pada CLP di Terminal A menjadi Repeatable Read sebelum
terkoneksi ke database.
Selanjutnya lakukan query untuk mengamati nilai dari col1
Pada Terminal B, lakukan proses write dengan cara insert data ke tab1 yang sedang dilock
oleh terminal A
chan e isolation to RR
Select * from tab1 where col1 = 30
7/25/2019 Modul Praktikum Sbd Ptiik 2013
62/70
62
Dapat kita lihat bahwa operasi tersebut menunggu dan tidak menghasilkan result, karena
diblok oleh query yang terdapat pada terminal A. Untuk melepaskan lock maka pada terminal
A, harus dilakukan proses commit terlebih dahulu. Sehingga secara otomatis proses penulisan
data pada terminal B sukses. Akhiri koneksi pada terminal B dan terminal A.
9.8 Skenario Phantom Read : Read Stability
Kita harus merubah isolation level pada Terminal A menjadi Read Stability sebelum
terkoneksi ke database, menggunakan perintah dibawah ini.
Lakukan pengamatan terhadap nilai dari col1 saat ini.
Pada terminal B, connect ke database, kemudian lakukan proses insert data.
Dapat kita lihat bahwa query tidak menunggu terminal A untuk commit dan proses insert data
berhasil.
Selanjutnya lakukan query dibawah ini pada Terminal A untuk mengetahui isi dari tab1.
Query tersebut mereturn 11 rows dimana sebelumnya hanya 10. Satu row bertambah
meskipun kita mengeksekusi query SQL yang sama dalam transaksi yang sama. Hal ini
karena Read Stability tidak menghalangi kemunculan phantom rows.
change isolation to RS
connect to sample
Select * from tab1 where col1 = 30
7/25/2019 Modul Praktikum Sbd Ptiik 2013
63/70
63
Pada Terminal A, commit operasi update, kemudian akhiri koneksi pada Terminal A dan B
9.9 Uncommited Read : Cursor StabilityAplikasi A akan mengeksekusi query yang melakukan proses update dengan RR. Aplikasi B
akan mencoba membaca baris yang sama dengan menggunakan CS dan UR.
Pada terminal A, ganti isolation level menjadi Repeatable Read, kemudian koneksi ke
database sample. Lakukan update pada col1.
Pada terminal B, lakukan koneksi ke database sample, kemudian lakukan pembacaan data
dengan query select seperti dibawah ini
Query select tersebut akan menunggu Terminal A untuk commit sebelum membaca data.
Untuk melepaskan lock, maka pada Terminal A harus melakukan proses Commit seperti
dibawah ini
7/25/2019 Modul Praktikum Sbd Ptiik 2013
64/70
64
Pada terminal B kita bisa lihat bahwa query sudah dapat mengembalikan result. Block oleh
Terminal A sudah dilepaskan dan transaksi pada Terminal B sudah bisa membaca data yang
tercommit.
Akhiri koneksi dengan perintah db2 connect reset pada Terminal B
9.10 Skenario Uncommited Read : Uncommited Read
Eksekusi query berikut pada Terminal A
Kemudian eksekusi query pembaca pada Terminal B
Dapat dilihat bahwa query select dibawah isolation level Uncommitted Read tidak menunggu
Terminal A untuk COMMIT sebelum membaca data. Bahkan nilai yang dikembalikan
berasal dari transaksi yang belum tercommit pada Terminal A.
db2 chan e isolation to UR
connect to sam le
7/25/2019 Modul Praktikum Sbd Ptiik 2013
65/70
65
Jika transaksi pada Terminal A mengeksekusi rollback, data yang terdapat pada Terminal B
tidak menggambarkan data yang sebenarnya pada tab1. Fenomena ini dikenal sebagai dirty
read. Pada terminal A, lakukan commit, kemudian akhiri koneksi pada terminal A dan B.
BAB X - BACKUP AND RECOVERY
TUJUAN BELAJAR :
Mendeskripsikan prinsip utama dan metode untuk backup dan recovery
Mendeskripsikan bagaimana pembagian data logging, termasuk circular logging dan
archival logging
Melakukan backup dan restore table space
Mendiskusikan konfigurasi parameter dan recovery history file dan mengunakannya
untuk menangani berbagai skenario backup dan recovery
Backup adalah perkerjaan utama untuk system administrator, tanpa itu kita tidak dapat
menjamin bahwa data kita akan tetap tersedia nantinya. System administrator bertanggung
jawab untuk :
Menetapkan aturan backup.
Memaksa aturan dan memastikan bahwa aturan telah dilaksanakan dengan benar.
Menguji recovery menggunakan hasil dari backup.
10.1 Gambaran Backup dan Recovery
Pada t1, dilakukan operasi backup database
Pada t2, terjadi masalah yang merusak database
Pada t3, semua data yang ter-commit ditemukan kembali
7/25/2019 Modul Praktikum Sbd Ptiik 2013
66/70
66
10.2 Database Logging
Tipe Log :
1. Tipe log berdasarkan pembagian file log
Primary Log merupakan PRE-ALLOCATED
Secondary Log merupakan ALLOCATED sesuai kebutuhan
Untuk operasi keseharian, pastikan bahwa kita tetap menggunakan pembagian
primary log
2.
Tipe log berdasarkan informasi yang tersimpan di dalam log
Active logs:
Informasi tidak dikeluarkan (tidak pada tablespace disk)
Archive logs
Semua Informasi dikeluarkan
Tipe Logging
Circular logging
o Tipe default dari logging
o Log ditulis kembali ketika isinya telah dikeluarkan, dan tidak perlu untuk
melakukan crash recovery
7/25/2019 Modul Praktikum Sbd Ptiik 2013
67/70
67
jika transaksi panjang menggunakan primary dan secondary log, terjadi
kondisi log yang penuh dan pesan error SQL0964C dikembalikan
tidak dapat melakukan roll-forward recovery
Archival logging
o Diaktifkan dengan LOGARCHMETH1 parameter db cfg
o Segera setelah enable, kita diminta untuk melakukan offline backup
o File log tidak di delete - disimpan online atau offline
o Memungkinkan untuk roll-forward recovery dan online backup
10.3 Backup
Mode Backup
Offline Backup
o Tidak mengizinkan aplikasi atau proses lain untuk megakses database
o Hanya bisa dilakukan jika menggunakan circular logging
Online Backup
o Mengizinkan aplikasi atau proses lain untuk mengakses database ketika backup
terjadi
Sintaks dan Contoh
BACKUP DATABASE
[ONLINE] [TO ]
7/25/2019 Modul Praktikum Sbd Ptiik 2013
68/70
68
Contoh Offline Backup
backup database sample to C:\backups
Contoh Online Backup
backup database sample online to C:\backups
Ketentuan nama file
Tipe Backup:
0 = Full Backup
2 = Tablespace Backup
10.4 Incremental Backup
Cocok untuk database yang besar
10.5 Database Recovery
Tipe Database Recovery
Crash recovery
o
Menjaga database dari kesalahan yang tidak konsisten
7/25/2019 Modul Praktikum Sbd Ptiik 2013
69/70
69
Version Recovery
o Menyimpan kembali database dari sebuah backup
o database akan dikembalikan ke keadaan saat tersimpan dalam backup
o
beberapa perubahan yang dibuat setelah backup akan hilang
Rollforward recovery
o Membutuhkan archival logging untuk dapat digunakan
o dilakukan melalui log untuk menggunakan kembali perubahan di atas backup
o memungkinkan untuk roll forward ke akhir log atau pada waktu tertentu
o Minimal data loss
Sintaks dan Contoh
RESTORE DATABASE
[ONLINE][FROM ]
[TAKEN AT ]
[WITHOUT PROMPTING]
Contoh Offline Restore
SAMPLE.0.DB2INST.NODE0000.CATN0000.20110718131210.001
restore database sample
from C:\backups
taken at 20110718131210
10.6 Tablespace backup dan restore
Memperbolehkan user untuk backu sebagian database
hanya dapat digunakan jika archival logging enable
banyak table space dapat ditetapkan
table space dapat di restore dari tiap database backup atau table space backup
Menggunakan kata kunci TABLESPACE untuk menetapkan table space
Contoh : Backup online tablespace 'tblsp1'
backup database sample
7/25/2019 Modul Praktikum Sbd Ptiik 2013
70/70
tablespace(tblsp1)online to C:\backups
restore database sample
tablespace(tblsp1)online from C:\backups
without prompting
10.7 Latihan
1. Lakukan Backup offline dan online pada database sample!
2. Lakukan perubahan yang ter-commit pada database sample!
3.
Drop database sample!
4. Kembalikan database sample sesuai keadaan semula ketika di backup!