Professional Documents
Culture Documents
DAFTAR ISI
iv
Politeknik Telkom Database Management System
Overview
Tujuan
1.1 Pendahuluan
Basis data yang dicontohkan di atas memiliki data yang cukup banyak.
Data mahasiswa untuk setiap angkatan, jumlah mata kuliah yang diadakan
untuk semester 1 sampai 6, dan berbagai data lain yang harus disimpan di
dalam tempat penyimpanan data (storage). Ada alat yang disediakan untuk
membantu menangani penganturan data ini. Database management system
(DBMS) adalah software yang dirancang untuk membantu dalam penganturan
kumpulan data yang berjumlah besar.
2
Politeknik Telkom Database Management System
4
Politeknik Telkom Database Management System
pangkat dari nilai 2 berdasarkan posisi digitnya. Digit pertama dimulai dari
kanan.
Contoh:
57 = 111001 2
1. Cache
- Memori paling cepat dan mahal
- Tidak perlu mengatur cache pada sistem basisdata
- Diatur oleh perangkat keras sistem komputer
2. Main Memory
- Penampung data yang siap diolah dan instruksi-instruksi yang
ingin dijalankan
- Daya tampung sampai dengan megabyte (MB) atau gigabyte
(GB), tapi masih terlalu mahal untuk menampung keseluruhan
basisdata
- Bersifat volatile (data hilang jika power mati)
3. Flash memory/EEPROM (electrically erasable programmable read-only
memory)
- Kecepatan membaca data menyamai main memory 100
nanoseconds (nanoseconds = 1/1000 microseconds). Namun
kecepatan penulisan data 4-10 microseconds dan tidak bisa
langsung menimpa data yang sudah ada. Untuk menimpa data
harus menghapus semua bank data.
- Bersifat non-volatile
- Pengganti magnetic disk yang dapat menyimpan data 5-10 MB,
biasanya berada dalam alat elektronik yang memiliki sistem
computer contohnya kamera digital
4. Magnetic-disk storage
- Keseluruhan data disimpan dalam magnetic-disk
- Kapasitas disk dari range satuan GB sampai ratusan GB
- Data yang siap diproses dipindahkan ke main memory, dan jika
data selesai diproses harus dipindahkan kembali ke magnetic-
disk
- Data dalam disk akan selamat jika power mati maupun jika ada
sistem crash
5. Optical storage
- Contoh compact disk (CD) kapasitas 640 MB, digital video disk
(DVD) kapasitas 4.7 – 8.5 GB.
- Proses pembacaan dan penulisan menggunakan laser
- Versi CD/DVD :
o Record-once : disk yang hanya bisa ditulis sekali tapi
bisa dibaca berkali-kali atau write-once,read-many
(WORM) disk. Contoh: CD-R, DVD-R
6
Politeknik Telkom Database Management System
1.5.2 Magnetic-Disk
Track 0 pada disk terletak pada bagian paling dalam dari disk. Pada
track ini terdapat pits atau lubang kecil. Daerah diantara pits disebut dengan
lands. Perubahan pits dan lands atau sebaliknya direpresentasikan dengan
bilangan biner ‗1‘. Jika ada perubahan, direpresentasikan dengan bilangan biner
‗0‘.
bertugas untuk melakukan pengecekan pada saat sector dibaca sama dengan
perhitungan checksum pada saat data ditulisa pada sector.
Tugas lain dari disk controller sebagai mengatur ulang bad sector.
Pada saat disk controller mendeteksi kerusakan pada disk, disk controller
secara logic melakukan mapping sector ke lokasi fisik yang berbeda.
Pada saat penulisan atau pembacaan data, disk head bergerak pada
track dimana terdapat sector yang menyimpan data. Waktu yang diperlukan
disk head untuk bergerak menuju track yang tepat adalah seek time. Rasional
delay adalah waktu tunggu yang diperlukan block untuk berputar dibawah disk
head, waktu yang dilakukan untuk rata-rata setengah putaran biasanya kurang
dari seek time. Transfer time adalah waktu yang diperlukan untuk menbaca
atau menuliskan data pada block setelah head berada di posisinya, waktu
untuk disk untuk berputar satu block.
10
Politeknik Telkom Database Management System
Rangkuman
Soal
Table Mata_kuliah
Kode_mk Nama_mk
IS007 Basis Data
CA008 Manajemen Bisnis
Kode_mk sebagai primary key
12
Politeknik Telkom Database Management System
Latihan
Daftar Pustaka
14
Politeknik Telkom Database Management System
2 ARSITEKTUR BASISDATA
Overview
Tujuan
Arsitektur BasisData 15
Politeknik Telkom Database Management System
16
Politeknik Telkom Database Management System
Arsitektur BasisData 17
Politeknik Telkom Database Management System
Virtual Memory
Virtual Memory adalah fitur dari sistem operasi yang memberikan tempat
penyimpanan yang nyata daripada yang diberikan oleh main memory dan
memberikan keleluasaan dalam penggunaan main memory.
SGA
SGA
SGA adalah memory area yang meliputi data dan control informasi untuk
instance.
18
Politeknik Telkom Database Management System
PGA
Program Global Area (PGA) adalah memory yang terdiri dari data dan
control information untuk masing-masing proses server. Proses dalam oracle
server memberikan layanan bagi client. Masing-masing proses server memiliki
PGA sendiri-sendiri yang dibuat saat proses di server dimulai. PGA diakses
secara eksklusif oleh server proses, dan PGA ditulis dan dibaca hanya oleh
kode oracle.
Dengan SGA infrastruktur yang dinamis, ukuran database buffer cache, shared
pool, large pool, java pool, dan steam pool dapat berubah tanpa shutting
down instance.
Arsitektur BasisData 19
Politeknik Telkom Database Management System
JDBC/ODBC Server
User Process PGA
Process 1
SGA
Gambar 2.3 Process Structure
Pada multi-process ini dapat dikategorikan menjadi dua grup yaitu user
process dan oracle process.
a. User process, saat user menjalankan program aplikasi seperti oracle
Tools.
b. Oracle Process/server process, digunakan untuk mengeksekusi perintah
SQL, membaca blok data dari disk ke shared databse buffer di SGA,
mengembalikan hasil dari data yang diminta.
c. Untuk meningkatkan perforamansi dan untuk mengakomodasi banyak
user multi-process oracle menggunakan proses tambahan disebut
background process.
Arsitektur BasisData 21
Politeknik Telkom Database Management System
Rangkuman
Soal
22
Politeknik Telkom Database Management System
Latihan
1. Buatlah makalah tentang instance yang ada pada minimal tiga DBMS
yang anda ketahui.
2. Buatlah makalah tentang maintenance instance pada Oracle
Arsitektur BasisData 23
Politeknik Telkom Database Management System
Daftara pustaka
24
Politeknik Telkom Database Management System
3 Database Administration
Basic Administration
Overview
Basic administration merupakan kumpulan dari fungsi - fungsi yang ada pada
System Database Administration, seperti installasi, konfigurasi, security,
monitoring dan tuning. Bab ini akan membahas mengenai konfigurasi dan
konsep dasar security pada database oracle . Sebagai alat bantu, maka
digunakan aplikasi dari Oracle, yaitu Oracle Enterprise Manager.
Tujuan
26
Politeknik Telkom Database Management System
28
Politeknik Telkom Database Management System
b. Untuk linux/unix
Arahkan direktori ke lokasi oracle database diinstall /
ORACLE_HOME, pilih direktori bin, kemudian ketik
$ ./emctl start dbconsole.
1. Halaman Home
Halaman ini berisi status dari database instance yang akan diatur, dan
terbagi menjadi 10 macam status database :
a. General
General memberikan kondisi dari database ( yang ditunjukkan
dengan tanda panah hijau atau merah ), tanggal database
dihidupkan, nama database instance, versi database, nama
hostname server dan nama listener
30
Politeknik Telkom Database Management System
b. Host CPU
Pada Host CPU diperlihatkan status yang menunjukkan seberapa
besar CPU percentage yang dipakai oleh database tersebut
ataupun proses lain pada server.
c. Active Session
Active Session memperlihatkan berapa jumlah CPU yang dimiliki
oleh server, berapa banyak session milik user yang sedang aktif (
status sedang menggunakan User I/O, CPU atau Waiting )
d. SQL Response Time
Dalam SQL Response Time, akan ditunjukan berapa lama proses
untuk melakukan suatu sql process, tetapi terlebih dahulu kita
harus menetapkan baseline ( dasar perbandingan awal )
e. Diagnostic Summary
Diagnostic summary memperlihatkan jenis dan jumlah error
pada database atau policy database/server.
f. Space Summary
Space Summary memberikan kondisi berapa banyak database
size, apakah terdapat problem pada tablespace, dan berapa
persen disk space yang tersisa di server tersebut.
g. High Availability
High availability menunjukkan perkiraan berapa waktu yang
digunakan database untuk recovery, waktu saat backup database
terakhir dijalankan, dan apakah database menggunakan flashback
technology atau archivelog.
h. Alert
Alert menunjukkan pesan / status yang lebih detail mengenai
error/warning yang ada pada database, sehingga lebih mudah
dilihat oleh user
i. Related Alert
Related Alert memberikan pesan warning/error yang lebih detail
dari sisi server, seperti sisa disk yang dimiliki server, processor
yang digunakan, dan memory.
j. Job Activity
Job Activity menunjukkan job apa saja yang kita lakukan
terhadap database , dan kondisi job tersebut
2. Halaman Performance
32
Politeknik Telkom Database Management System
3. Halaman Administration
a. Database Administration
Database administration berisi pengaturan mengenai instance
database.
- Storage
Storage mengatur semua komponen database yang
berhubungan dengan disk pada server, seperti controlfile,
tablespace, temporary tablespace group, datafile, rollback
segment, redo / archive log
- Database Configuration
Database configuration mengatur tentang parameter –
parameter pada database ( spfile/pfile parameter ), memory
database ( share, db buffer, java pool, large pool ), undo
parameter ( undo retention, undo tablespace ), dan
database feature usage yang berisi list feature yang
sudah/belum dipakai oleh database tersebug
- Database Scheduler
Berisi pengaturan job/scheduler yang akan dijalankan
terhadap suatu database.
- Statistic Management
Berisi pengaturan mengenai pengambilan statistic dari
database, baik secara berkala ( AWR, gather statistic)
ataupun manual.
- Change Database
Mengatur mengenai metode penggunaan disk secara ASM (
Automatic Storage Management ) ataupun Locally Managed.
Database Administration - Basic Administration 33
Politeknik Telkom Database Management System
- Resource Manager
Berisi pengaturan besarnya Resource yang bisa/tidak bisa
oleh user / profil tertentu dan prioritas terhadap user /
profil tertentu.
- Policies
Berisi pengaturan mengenai policies dari suatu database, hal
apa saja yang boleh dan tidak boleh dilakukan, apa saja yang
dianggap error, warning atau hanya status biasa saja.
a) Schema
Schema berisi pengaturan mengenai object – object yang dimiliki
oleh suatu database
- Database Object
Database Object berisi pngaturan object – object standard
yang dimiliki oleh suatu database, seperti table, views,
synonim, index, dll.
- Program
Program berisi pengaturan mengenai script – script yang
dibuat dan dijalankan via database, seperti procedur,
function, trigger, dll.
- XML Database
XML Database mengatur mengenai penggunaan xml sebagai
database.
- Users & Previleges
User & Previleges berisi pengaturan mengenai user, roles
maupun profile. Bisa dibilang juga sebagai basic security
database.
- Materialized Views
34
Politeknik Telkom Database Management System
4. Halaman Maintenance
a. Authentification
Memberikan pengaturan terhadap bagaimana cara untuk
mengakses suatu database. Authentification dibagi menjadi
beberapa bagian :
- Authentification by Operating system
Memberikan pengaturan hak akses dari sisi user Operating
System. Pada beberapa operating system, database oracle
dapat langsung diakses lewat operating system dengan
menggunakan ―sqlplus /‖.
- Authentification by Network
Memberikan pembatasan hak akses dari sisi network,
misalnya menggunakan SSL, Kerberos, Public Key, dan third
party lainnya.
- Authentification by Database
Membatasi hak akses dari sisi database, yaitu dengan user
password database
- Authentification by Multitier system
Membatasi hak akses dari sisi system lain, misal hanya bisa
akses ke database dari server tertentu saja.
- Authentification by Database Administrator
Membatasi hak akses dari sisi user – user database yang
memiliki role tertentu saja, misal SYSDBA dan SYSOPR
b. Authorization
Authorization merupakan kegiatan untuk melakukan pembatasan
terhadap user apa saja yang bisa mengakses database, dan
memberikan pengaturan resource dan hak yang dimiliki user
tersebut. Authorization dibagi menjadi :
- Previleges
Merupakan hak yang dimiliki oleh user untuk menjalankan
perintah SQL atau akses ke object milik user lain.
36
Politeknik Telkom Database Management System
Selain atribut diatas, pada saat dilakukan pembuatan user juga harus
ditambahkan akses terhadap system previlieges, object previliges dan
role untuk user tersebut.
Sebaiknya sebuah user account dibuat sesuai dengan pekerjaan yang
akan dilakukan oleh user tersebut, contohnya : user yang mengakses
database untuk fungsi reporting hanya diberi hak untuk select ke table.
38
Politeknik Telkom Database Management System
Status After
User Account Description Installation
DBSNMP User yang digunakan untuk Open
melakukan proses monitoring
dalam Oracle Enterprise Manager
Rangkuman
40
Politeknik Telkom Database Management System
Pilihan Ganda
42
Politeknik Telkom Database Management System
Latihan
44
Politeknik Telkom Database Management System
4 Konsep Prosedural
Overview
Tujuan
Konsep Prosedural 45
Politeknik Telkom Database Management System
SQL
SQL Aplikasi
SQL
IF … THEN
SQL;
ELSE Aplikasi
SQL;
END IF;
RPC
Aplikasi
46
Politeknik Telkom Database Management System
DECLARE
-- berisi deklarasi variable, konstanta,
-- prosedur, ataupun fungsi
BEGIN
-- berisi statemen-statemen yang akan dieksekusi
EXCEPTION
-- berisi perintah untuk mengatasi kesalahan
-- yang mungkin muncul
END;
o Blok DECLARE dan EXCEPTION bersifat opsional, hanya dituliskan saat
dibutuhkan. Bagian yang wajib adalah BEGIN dan END.
4.2.1 Prosedur
Konsep Prosedural 47
Politeknik Telkom Database Management System
Contoh
4.2.2 Fungsi
Fungsi adalah blok PL/SQL yang dapat mengembalikan nilai. Karena itu
perlu ditambahkan statemen RETURN untuk proses pengembalian nilai.
48
Politeknik Telkom Database Management System
Contoh
v_NamaSupp supplier.nama_supp%TYPE;
BEGIN
-- Mengambil nama supplier berdasar parameter
SELECT nama_supp INTO v_NamaSupp FROM supplier
WHERE UPPER(kode_supp) = UPPER(pi_kode);
-- Mengembalikan nilai
RETURN v_NamaSupp;
END;
4.2.3 Trigger
Trigger adalah blok PL/SQL yang disimpan dalam database dan akan
diaktivasi ketika melakukan statemen-statemen SQL (INSERT, DELELTE, atau
UPDATE) terhadap sebuah tabel. Aktivasi trigger didasarkan pada event yang
terjadi pada tabel tersebut.
Konsep Prosedural 49
Politeknik Telkom Database Management System
Contoh
50
Politeknik Telkom Database Management System
Konsep Prosedural 51
Politeknik Telkom Database Management System
Rangkuman
IF … THEN
SQL;
ELSE Aplikasi
SQL;
END IF;
RPC
Aplikasi
52
Politeknik Telkom Database Management System
Konsep Prosedural 53
Politeknik Telkom Database Management System
END;
Akan menghasilkan error.
3. Perbedaan antara prosedur dan fungsi adalah pada proses pengembalian
nilai pada saat pemanggilan.
4. Trigger akan diaktivasi untuk setiap proses INSERT, DELETE, maupun
UPDATE terhadap table apabila pada trigger tersebut tidak
dispesifikasikan event apa yang bisa mengaktivasinya.
54
Politeknik Telkom Database Management System
6. execute prc_upd_bil;
nama VARCHAR2(10);
BEGIN
RETURN nama;
END;
Konsep Prosedural 55
Politeknik Telkom Database Management System
56
Politeknik Telkom Database Management System
Pilihan Ganda
Konsep Prosedural 57
Politeknik Telkom Database Management System
58
Politeknik Telkom Database Management System
Konsep Prosedural 59
Politeknik Telkom Database Management System
Latihan
END;
8. Pada blok :
-- statemen cetak bilangan ganjil
...
tambahkan statemen SQL untuk mencetak bilangan ganjil antara 1
hingga 5.
9. Pada blok :
-- statemen cetak bilangan genap
...
tambahkan statemen SQL untuk mencetak bilangan genap antara 1
hingga 5.
(Untuk soal nomor 5 - 6 perhatikan fungsi
berikut)
60
Politeknik Telkom Database Management System
ket BOOLEAN;
BEGIN
-- statemen cek bilangan prima
...
-- akan mengembalikan TRUE bila merupakan
-- bilangan prima, dan FALSE bila bukan
...
END;
Konsep Prosedural 61
Politeknik Telkom Database Management System
62
Politeknik Telkom Database Management System
Overview
Pada sebuah blok PL/SQL dapat ditempatkan suatu kontrol untuk pengecekan
yang dilakukan sebelum statemen-statemen dalam blok PL/SQL dieksekusi.
Kontrol inilah yang kemudian disebut sebagai percabangan (decision control /
branching). Secara garis besar terdapat dua statemen percabangan : statemen
IF dan statemen CASE.
Tujuan
TRUE FALSE
5.1.1 Statemen IF
64
Politeknik Telkom Database Management System
Contoh
Keterangan
- IF v_stok = 0 THEN
DBMS_OUTPUT.PUT_LINE(‘Persediaan barang telah
habis’);
END IF;
IF kondisi THEN
statemen-statemen A;
ELSE
statemen-statemen B;
END IF;
Contoh
66
Politeknik Telkom Database Management System
Keterangan
- IF v_stok = 0 THEN
DBMS_OUTPUT.PUT_LINE(‘Persediaan barang telah
habis’);
ELSE
DBMS_OUTPUT.PUT_LINE(‘Persediaan barang masih
ada’);
END IF;
IF kondisi_1 THEN
statemen-statemen A;
ELSIF kondisi_2 THEN
statemen-statemen B;
...
ELSIF kondisi_n THEN
statemen-statemen N;
[ELSE
statemen-statemen lain;]
END IF;
Pada struktur ini, minimal terdapat dua kondisi yang harus diperiksa
dan satu tambahan kondisi khusus yang akan mengatasi kejadian dimana
semua kondisi yang didefinisikan tidak terpenuhi (bernilai FALSE).
Mula-mula dilakukan pengecekan terhadap kondisi_1, jika TRUE maka
statemen-statemen A akan dieksekusi dan kemudian mengeksekusi statemen
yang berada di bawah blok pemilihan. Tapi bila FALSE maka akan dilakukan
pengecekan selanjutnya untuk kondisi_2. Jika kondisi_2 TRUE maka
statemen-statemen B akan dieksekusi sebelum statemen di bawah blok
pemilihan dieksekusi, dan seterusnya. Apabila seluruh kondisi ELSIF tidak
terpenuhi, maka statemen pada blok ELSE yang akan dieksekusi.
Contoh
v_pct_fgaji NUMBER(5,2);
v_gaji_col NUMBER;
BEGIN
-- Penentuan nilai gaji yang digunakan
-- untuk menentukan presentasi kenaikan gaji
SELECT gaji INTO v_gaji_col
FROM pegawai
WHERE UPPER(no_peg) = UPPER(pi_no_peg);
-- Menetapkan persentase kenaikan gaji
IF v_gaji_col >= 3000000 THEN
v_pct_fgaji := 5.00;
ELSIF v_gaji_col >= 2000000 THEN
v_pct_fgaji := 8.00;
ELSIF v_gaji_col >= 1000000 THEN
v_pct_fgaji := 10.00;
ELSE
v_pct_fgaji := 15.00;
END IF;
68
Politeknik Telkom Database Management System
Keterangan
- IF v_gaji_col >= 3000000 THEN
v_pct_fgaji := 5.00;
ELSIF v_gaji_col >= 2000000 THEN
v_pct_fgaji := 8.00;
ELSIF v_gaji_col >= 1000000 THEN
v_pct_fgaji := 10.00;
ELSE
v_pct_fgaji := 15.00;
END IF;
Jika gaji pegawai saat ini adalah p dan presentase kenaikan gaji yang baru
adalah n, maka besarnya kenaikan gaji yang diperoleh adalah :
p ≥ 3.000.000 n = 0.05
2.000.000 ≤ p < 3.000.000 n = 0.08
1.000.000 ≤ p < 2.000.000 n = 0.10
p < 1.000.000 n = 0.15
- UPDATE pegawai
SET gaji = ROUND((1+v_pct_fgaji/100)*gaji, 4)
WHERE no_peg = pi_no_peg;
Berdasarkan besarnya nilai n yang diperoleh, jika gaji pegawai saat ini adalah
p dan gaji yang baru adalah q, maka besarnya update gaji yang baru adalah :
(kenaikan gaji dibulatkan ke puluhan ribu terdekat)
p ≥ 3.000.000 q = 1.05 p
2.000.000 ≤ p < 3.000.000 q = 1.08 p
1.000.000 ≤ p < 2.000.000 q = 1.10 p
p < 1.000.000 q = 1.15 p
Struktur ini memiliki sebuah ekspresi setelah keyword CASE yang akan
dibandingkan dengan tiap nilai pada blok WHEN. Kondisi WHEN yang
pertama kali ditemukan bernilai TRUE akan dieksekusi dan dilanjutkan ke
statemen di bawah blok pemilihan CASE.
Contoh
v_namaHari VARCHAR2;
BEGIN
-- Penentuan nama hari berdasar nomor urut hari
v_namaHari :=
CASE pi_noHari
WHEN 1 THEN ‘Senin’
WHEN 2 THEN ‘Selasa’
WHEN 3 THEN ‘Rabu’
WHEN 4 THEN ‘Kamis’
WHEN 5 THEN ‘Jumat’
WHEN 6 THEN ‘Sabtu’
70
Politeknik Telkom Database Management System
Keterangan
- v_namaHari :=
CASE pi_noHari
WHEN 1 THEN ‘Senin’
WHEN 2 THEN ‘Selasa’
WHEN 3 THEN ‘Rabu’
WHEN 4 THEN ‘Kamis’
WHEN 5 THEN ‘Jumat’
WHEN 6 THEN ‘Sabtu’
WHEN 7 THEN ‘Minggu’
ELSE ‘Tidak terdefinisi’
END CASE;
Contoh
/*Prosedur untuk menaikkan gaji pegawai*/
CREATE OR REPLACE PROCEDURE prc_upd_gaji
( pi_no_peg VARCHAR2) IS
v_pct_fgaji NUMBER(5,2);
v_gaji_col NUMBER;
BEGIN
-- Penentuan nilai gaji yang digunakan
-- untuk menentukan presentasi kenaikan gaji
SELECT gaji INTO v_gaji_col
FROM pegawai
WHERE UPPER(no_peg) = UPPER(pi_no_peg);
Keterangan
- CASE
WHEN v_gaji_col >= 3000000 THEN
v_pct_fgaji := 5.00;
WHEN v_gaji_col >= 2000000 THEN
v_pct_fgaji := 8.00;
WHEN v_gaji_col >= 1000000 THEN
v_pct_fgaji := 10.00;
ELSE
v_pct_fgaji := 15.00;
END CASE;
Jika gaji pegawai saat ini adalah p dan presentase kenaikan gaji yang baru
adalah n, maka besarnya kenaikan gaji yang diperoleh adalah :
p ≥ 3.000.000 n = 0.05
2.000.000 ≤ p < 3.000.000 n = 0.08
1.000.000 ≤ p < 2.000.000 n = 0.10
p < 1.000.000 n = 0.15
Rangkuman
74
Politeknik Telkom Database Management System
Statemen CASE
o Simple CASE
CASE (ekspresi)
WHEN nilai_1 THEN statemen_1;
WHEN nilai_2 THEN statemen_2;
...
WHEN nilai_n THEN statemen_n;
[ELSE statemen_lain;]
END CASE;
o Searched CASE
CASE
WHEN ekspresi_1 = nilai_1 THEN statemen_1;
WHEN ekspresi_2 = nilai_2 THEN statemen_2;
...
WHEN ekspresi_n = nilai_n THEN statemen_n;
[ELSE statemen_lain;]
END CASE;
11. Statemen dalam blok IF hanya akan dieksekusi bila kondisi IF terpenuhi.
12. Untuk pengecekan yang melibatkan lebih dari dua kondisi, penggunaan
statemen IF-THEN-ELSIF atau CASE akan lebih efisien.
78
Politeknik Telkom Database Management System
Latihan
80
Politeknik Telkom Database Management System
Overview
Tujuan
6.1 Iterasi
Struktur iterasi (looping) memungkinkan eksekusi blok statemen
secara berulang selama kondisi yang didefinisikan bernilai TRUE. Iterasi ini
sendiri terbagi menjadi tiga jenis : simple loop (infinitif), FOR, dan WHILE.
Statemen EXIT atau EXIT WHEN dapat digunakan untuk keluar dari
kontrol iterasi menuju statemen-statemen di bawah blok iterasi (setelah
posisi END LOOP).
TRUE FALSE
LOOP
statemen-statemen;
END LOOP;
82
Politeknik Telkom Database Management System
Contoh
BEGIN
-- Pengecekan bila parameter input < 1
IF n_akhir < 1 THEN
DBMS_OUTPUT.PUT_LINE(‘Nilai input minimal 1’);
ELSE
-- Iterasi cetak baris sejumlah n_akhir
LOOP
DBMS_OUTPUT.PUT_LINE(‘Baris ke-’||
TO_CHAR(n_awal));
n_awal := n_awal + 1;
EXIT WHEN n_awal > n_akhir;
END LOOP;
END IF;
END;
Output :
Baris ke-1
Baris ke-2
Baris ke-3
Contoh - 1
BEGIN
-- Pengecekan bila parameter input < 1
IF n_akhir < 1 THEN
DBMS_OUTPUT.PUT_LINE(‘Nilai input minimal 1’);
ELSE
-- Iterasi cetak angka sejumlah n_akhir
FOR i IN 1 .. n_akhir LOOP
DBMS_OUTPUT.PUT(i);
END LOOP;
DBMS_OUTPUT.NEW_LINE;
END IF;
END;
Contoh - 2
BEGIN
-- Pengecekan bila parameter input < 1
IF n_akhir < 1 THEN
84
Politeknik Telkom Database Management System
Output :
12345
54321
Contoh
BEGIN
-- Pengecekan bila parameter input < 1
IF n_akhir < 1 THEN
DBMS_OUTPUT.PUT_LINE(‘Nilai input minimal 1’);
ELSE
-- Iterasi cetak baris sejumlah n_akhir
WHILE n_awal < n_akhir LOOP
DBMS_OUTPUT.PUT_LINE(‘Baris ke-’||
TO_CHAR(n_awal));
n_awal := n_awal + 1;
END LOOP;
END IF;
END;
Output :
Baris ke-1
Baris ke-2
Baris ke-3
Kedua statemen ini – EXIT dan EXIT WHEN – digunakan untuk keluar
dari blok iterasi tanpa melanjutkan proses yang sedang dilakukan.
IF kondisi THEN
EXIT;
END IF;
86
Politeknik Telkom Database Management System
6.2 Cursor
-- Deklarasi cursor
DECLARE
CURSOR nama_cursor IS
statemen SELECT;
-- Membuka cursor
OPEN nama_cursor;
-- Menangkap isi cursor
FETCH nama_cursor INTO nama_variabel;
-- Menutup cursor
CLOSE nama_cursor;
Contoh
-- Deklarasi cursor
CURSOR cur_customer IS
SELECT kode_cust, nama_cust from customer
ORDER BY kode_cust;
-- Deklarasi variabel
vRec cur_customer%ROWTYPE;
BEGIN
-- Membuka cursor
OPEN cur_customer;
-- Menutup cursor
CLOSE cur_customer;
END;
Atribut Deskripsi
%FOUND Baris ditemukan
%NOTFOUND Baris tidak ditemukan
Jumlah baris yang telah
%ROWCOUNT
ditangkap melalui FETCH
Bernilai TRUE bila cursor
%ISOPEN
masih dalam keadaan terbuka
Contoh, bila ingin mengecek cursor dalam keadaan terbuka atau tidak :
IF nama_cursor%ISOPEN THEN
statemen-statemen;
END IF;
88
Politeknik Telkom Database Management System
Atribut Deskripsi
Berasosiasi dengan SELECT, bernilai TRUE
SQL%NOTFOUND bila query menghasilkan NULL dan FALSE bila
query menghasilkan data
Kebalikan SQL%NOTFOUND, bernilai FALSE bila
SQL%FOUND query menghasilkan NULL dan TRUE bila query
menghasilkan data
Bernilai TRUE saat eksekusi query, dan
SQL%ISOPEN
otomatis FALSE saat eksekusi selesai
Menunjukkan banyaknya baris yang dihasilkan
SQL%ROWCOUNT
dari sebuah query
-- Deklarasi variabel
vNama customer.nama_cust%TYPE;
BEGIN
-- Secara implisit mendeklarasikan, membuka,
-- menangkap data, dan menutup cursor setelah
-- cursor selesai diproses
SELECT nama_cust INTO vNama
FROM customer
WHERE UPPER(kode_cust) = pi_kode;
DBMS_OUTPUT.PUT_LINE(‘Nama customer :
’||vNama);
END IF;
END;
90
Politeknik Telkom Database Management System
Contoh
vc_nama VARCHAR2(40);
no_peg_col pegawai.no_peg%TYPE;
gaji_col pegawai.gaji%TYPE;
BEGIN
-- Pengambilan data berdasar nama depan
SELECT SUBSTR(nama_dpn||’ ‘||nama_blkng,1,40),
no_peg, gaji
INTO vc_nama, no_peg_col, gaji_col
FROM pegawai
WHERE UPPER(nama_dpn) LIKE
‘%’||UPPER(pi_nama)||’%’;
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE (‘Data tidak ditemukan’);
WHEN TOO_MANY_ROWS THEN
DBMS_OUTPUT.PUT_LINE (‘Lebih dari satu data
ditemukan’);
END;
Output :
Data tidak ditemukan
Lebih dari satu data ditemukan
92
Politeknik Telkom Database Management System
Contoh
e_nopeg EXCEPTION;
BEGIN
-- Update gaji karyawan dengan NIP tertentu
UPDATE pegawai
SET gaji = pi_gaji
WHERE no_peg = pi_nopeg;
COMMIT;
EXCEPTION
WHEN e_nopeg THEN
DBMS_OUTPUT.PUT_LINE (‘Data tidak ditemukan’);
END;
Output :
Data tidak ditemukan
Keterangan
Untuk kasus ini, tidak bisa digunakan exception NO_DATA_FOUND karena
NO_DATA_FOUND hanya menangkap error akibat SELECT INTO saja.
Contoh
e_invalid_fk EXCEPTION;
PRAGMA EXCEPTION_INIT(e_invalid_fk, -2291);
94
Politeknik Telkom Database Management System
BEGIN
-- Insert data karyawan baru
INSERT INTO pegawai
VALUES (pi_nopeg, INITCAP(pi_nama), pi_pos_id,
pi_tgl_masuk);
COMMIT;
EXCEPTION
WHEN DUP_VAL_ON_INDEX THEN
DBMS_OUTPUT.PUT_LINE (‘Duplikasi NIP’);
WHEN e_invalid_fk THEN
DBMS_OUTPUT.PUT_LINE (‘POS_ID tidak
terdaftar’);
END;
Output :
Duplikasi NIP
POS_ID tidak terdaftar
Keterangan
Nomor error ―-2291‖ disebabkan penggunaan nilai pada kolom foreign key
tidak terdapat pada kolom primary key dari tabel induknya.
o nomor_error harus berada dalam rentang -20999 dan -20000. Rentang ini
sengaja disediakan untuk digunakan user.
o pesan_error adalah pesan kesalahan yang ingin dimunculkan.
o TRUE|FALSE adalah parameter optional, dengan nilai default FALSE.
TRUE bertujuan untuk menangkap exception-exception sebelumnya
bersama exception ini. FALSE bertujuan menggantikan exception
terdahulu dengan exception ini.
Contoh - 1
BEGIN
-- Update gaji karyawan dengan NIP tertentu
UPDATE pegawai
SET gaji = pi_gaji
WHERE no_peg = pi_nopeg;
COMMIT;
END;
Contoh - 2
96
Politeknik Telkom Database Management System
BEGIN
-- Insert data karyawan baru
INSERT INTO pegawai
VALUES (pi_nopeg, INITCAP(pi_nama),
pi_tgl_masuk);
COMMIT;
EXCEPTION
WHEN DUP_VAL_ON_INDEX THEN
RAISE_APPLICATION_ERROR(-20101, ‘Duplikasi
NIP’);
END;
Output :
Data tidak ditemukan
Duplikasi NIP
Keterangan
Contoh-1 merupakan contoh penggunaan RAISE_APPLICATION_ERROR
pada bagian executable statemen dan Contoh-2 adalah contoh penggunaan
pada exception handler.
Rangkuman
98
Politeknik Telkom Database Management System
9. EXIT dan EXIT WHEN : digunakan untuk keluar dari blok iterasi tanpa
melanjutkan proses yang sedang dilakukan.
EXIT WHEN kondisi;
IF kondisi THEN
EXIT;
END IF;
10. Cursor adalah pointer yang menunjuk ke suatu bagian memori untuk
menyimpan hasil instruksi SQL (biasanya merupakan multiple row) dan
cursor digunakan untuk menunjuk (pointer) ke salah satu baris data.
11. Empat tahap dalam menggunakan cursor :
o deklarasi cursor (DECLARE)
o membuka cursor (OPEN)
o pengambilan data ke dalam cursor (FETCH)
o menutup cursor (CLOSE)
12. Jenis-jenis cursor :
o Eksplisit cursor : harus dibuka dan ditutup secara manual.
-- Deklarasi cursor
DECLARE
CURSOR nama_cursor IS
statemen SELECT;
-- Membuka cursor
OPEN nama_cursor;
-- Menangkap isi cursor
FETCH nama_cursor INTO nama_variabel;
-- Menutup cursor
CLOSE nama_cursor;
13. Exception handling adalah cara mengatasi setiap kesalahan (error) atau
peringatan (warning) yang muncul karena suatu perintah dengan
menempatkan blok exception handler:
14. Jenis-jenis exception :
o Predefned exception : kesalahan internal yang dibangkitkan secara
otomatis tiap kali suatu perintah menimbulkan kondisi yang sesuai
dengan jenis kesalahan tersebut.
o User defined exception : harus dideklarasikan manual oleh user
layaknya variabel.
nama_exception EXCEPTION;
Untuk membangkitkan exception ini :
RAISE nama_exception;
o Non-predefined exception : setelah dideklarasi, exception ini
diasosiasikan ke sebuah error internal sehingga exception ini
dibangkitkan secara otomatis.
nama_exception EXCEPTION;
PRAGMA EXCEPTION_INIT (nama_exception,
nomor_error);
15. RAISE_APPLICATION_ERROR adalah prosedur yang disediakan untuk
membuat dan membangkitkan exception. Dapat digunakan pada bagian
executable statemen mapun exception handler.
RAISE_APPLICATION_ERROR(nomor_error, pesan_error
[,TRUE|FALSE]);
100
Politeknik Telkom Database Management System
102
Politeknik Telkom Database Management System
CURSOR cur_customer IS
SELECT cust_id, cust_name FROM customer
WHERE UPPER(cust_name) LIKE UPPER('%eni%')
ORDER BY cust_id;
v_Rec cur_customer%ROWTYPE;
v_Row INTEGER := 0;
BEGIN
OPEN cur_customer;
v_Row := cur_customer%rowcount;
DBMS_OUTPUT.PUT_LINE(‘Jumlah row = ’||v_Row);
CLOSE cur_customer;
END;
8. Jika output query :
SELECT count(cust_id) FROM customer
WHERE UPPER(cust_name) LIKE UPPER('%eni%')
ORDER BY cust_id;
adalah :
8
Maka output dari blok PL/SQL di atas adalah :
Jumlah row = 8
v_Row := cur_customer%rowcount;
DBMS_OUTPUT.PUT_LINE(‘Jumlah row = ’||v_Row);
CLOSE cur_customer;
Maka output dari blok PL/SQL di atas menjadi :
Jumlah row = 7
10. Dengan prosedur RAISE_APPLICATION_ERROR, tidak perlu
menggunakan statemen RAISE untuk membangkitkan sebuah exception.
104
Politeknik Telkom Database Management System
Latihan
106
Politeknik Telkom Database Management System
Overview
Tujuan
7.1 Index
Index adalah objek database yang dapat dibuat untuk meningkatkan
performansi dari query. Index juga dapat dibuat secara otomatis oleh server
saat dibuat primary key atau unique constraint.
Index dapat dibuat dengan dua cara : secara otomatis saat primary key
atau unique constraint dibuat dan secara manual menggunakan statemen
CREATE INDEX.
Contoh
Output :
o Index dapat dibuat oleh user pemilik schema atau user lain yang memiliki
system priviledge CREATE ANY INDEX atau yang mempunyai object
priviledge INDEX atas tabel tersebut.
o Apabila sebuah kolom atau kombinasi kolom sudah di-index, akan
muncul pesan kesalahan saat dibuat index lain terhadap kolom tersebut.
Contoh
Output :
Contoh
110
Politeknik Telkom Database Management System
Contoh
/*Menghapus index*/
DROP INDEX idx_pos_gaji;
Prosedur dan fungsi adalah blok PL/SQL yang berdiri sendiri dan
disimpan sebagai objek database untuk melakukan tugas spesifik. Kedua objek
ini hanya perlu dibuat sekali dan dapat dipanggil sewaktu-waktu untuk tujuan
yang sama
7.2.1 Prosedur
Contoh
EXE[CUTE] nama_prosedur(daftar_parameter);
o Bila prosedur dieksekusi dalam blok PL/SQL, maka statemen EXECUTE
tidak perlu dituliskan.
Contoh
Keterangan
- SET SERVEROUTPUT ON untuk mengaktifkan variabel SERVEROUTPUT
agar DBMS_OUTPUT.PUT_LINE dapat dieksekusi.
112
Politeknik Telkom Database Management System
7.2.2 Fungsi
Fungsi adalah blok PL/SQL yang dapat mengembalikan nilai. Karena itu
perlu ditambahkan statemen RETURN untuk proses pengembalian nilai.
Contoh
vNamaSupp supplier.nama_supp%TYPE;
BEGIN
-- Mengambil nama supplier berdasar parameter
SELECT nama_supp INTO vNamaSupp FROM supplier
WHERE UPPER(kode_supp) = UPPER(pi_kode);
-- Mengembalikan nilai
RETURN vNamaSupp;
END;
Contoh
/*Pemanggilan fungsi*/
DECLARE
nama supplier.nama_supp%TYPE;
BEGIN
-- Memasukkan nilai fungsi ke variabel nama
nama := cari_supp(‘SU-10001’);
Contoh
/*Pemanggilan fungsi*/
SELECT cari_supp(‘SU-10001’) from DUAL;
7.2.3 Parameter
114
Politeknik Telkom Database Management System
Contoh
vstok INTEGER;
BEGIN
-- Mengambil nilai stok dari barang
-- (nilai stok adalah bilangan positif)
SELECT stok_barang INTO vstok FROM barang
WHERE UPPER(nama_barang) = UPPER(pi_brg);
Contoh
BEGIN
-- Mengambil nama supplier berdasar parameter
SELECT nama_supp INTO vNamaSupp FROM supplier
WHERE UPPER(kode_supp) = UPPER(pi_kode);
END;
BEGIN
-- Eksekusi prosedur
cari_supp(‘SU-10001’, nama);
END;
116
Politeknik Telkom Database Management System
Contoh
vHasil supplier.nama_supp%TYPE;
BEGIN
-- Mengambil nama supplier berdasar parameter
SELECT nama_supp INTO vHasil FROM supplier
WHERE UPPER(kode_supp) = UPPER(vParam);
END;
BEGIN
-- Mencetak nilai parameter input
DBMS_OUTPUT.PUT_LINE (vLokal);
-- Eksekusi prosedur
cari_supp(vLokal);
Tingkat Lanjut Konsep Prosedural 117
Politeknik Telkom Database Management System
END;
118
Politeknik Telkom Database Management System
Rangkuman
16. Index adalah objek database yang dapat dibuat untuk meningkatkan
performansi dari query.
17. Index dapat dibuat dengan cara :
Otomatis : dibuat secara otomatis oleh server saat pembuatan tabel
dengan primary key atau unique constraint.
Manual : dibuat secara manual dengan statemen CREATE INDEX.
CREATE INDEX [schema.]index
ON [schema.]tabel ({kolom [ASC|DSC]});
20. Fungsi adalah blok PL/SQL yang dapat mengembalikan nilai. Karena itu
perlu ditambahkan statemen RETURN untuk proses pengembalian nilai.
CREATE [OR REPLACE] FUNCTION nama_fungsi
(parameter1 tipedata, parameter2 tipedata,...)
RETURN tipe_data_fungsi IS
variable_variabel_lokal tipedata;
BEGIN
statemen_statemen;
...
RETURN nilai_fungsi;
END;
21. Parameter adalah nilai yang dilewatkan dalam sebuah prosedur atau
fungsi. Ada tiga jenis parameter : parameter input, output, dan input-
output.
Parameter input : menyimpan nilai yang akan digunakan sebagai input
pada badan prosedur maupun fungsi. Ditandai dengan mode IN.
Parameter output : menampung nilai hasil dari suatu proses yang
dilakukan di dalam prosedur atau fungsi. Ditandai dengan mode
OUT.
Parameter input-output : berfungsi sebagai parameter input maupun
output. Ditandai dengan mode IN OUT.
120
Politeknik Telkom Database Management System
Pada studi ini, kasus inventory akan digunakan sebagai contoh dalam
penerapan index, prosedur, maupun fungsi.
o barang
CREATE TABLE BARANG
(
BRG_ID VARCHAR2(8) NOT NULL,
BRG_NAME VARCHAR2(50) NOT NULL,
BRG_STOK INTEGER DEFAULT 0,
CONSTRAINT PK_BARANG PRIMARY KEY(BRG_ID)
);
o pasok
CREATE TABLE PASOK
(
PAS_ID VARCHAR2(8) NOT NULL,
PAS_DATE DATE DEFAULT SYSDATE,
PAS_SUPP VARCHAR2(8),
PAS_BRG VARCHAR2(8),
PAS_AMT INTEGER DEFAULT 0,
CONSTRAINT PK_PASOK PRIMARY KEY(PAS_ID),
CONSTRAINT FK_PASOK_SUPPLIER FOREIGN
KEY(PAS_SUPP) REFERENCES SUPPLIER(SUPP_ID),
Tingkat Lanjut Konsep Prosedural 121
Politeknik Telkom Database Management System
122
Politeknik Telkom Database Management System
Bulan : __________*
Tahun : __________
8 DATABASE-TRIGGER
Overview
Apabila kita menginginkan suatu aksi yang dapat memicu terjadinya aksi atau
perubahan yang lain pada data yang kita miliki. Kita dapat menggunakan
trigger. Trigger akan memicu sebuah aksi terjadi pada sebuah data atau
memicu untuk membangkitkan trigger yang lain.
Tujuan
124
Politeknik Telkom Database Management System
8.4 SINTAKS
CREATE [OR REPLACE] TRIGGER [user.]nama_trigger
{BEFORE | AFTER | INSTEAD OF}
{DELETE | INSERT | UPDATE [OF nama_kolom [,
nama_kolom] ...]}
[OR {DELETE | INSERT | UPDATE [OF column [,
column] ...]}]...
ON [user.]{nama_tabel | nama_view}
[{REFERENCING {OLD [AS] old_value | NEW [AS]
new_value} ...]
FOR EACH {ROW | STATEMENT} [WHEN (condition)]
PL/SQL_BLOCK
Nama trigger sebaiknya dengan jelas mencerminkan tabel yang
diaplikasikan. Perintah DML trigger, status before/after, dan apakah row
level atau statement level.
Bagian Keterangan Nilai yang mungkin
BEFORE
ketika trigger berelasi
trigger timing AFTER
ke event
INSTEAD OF
manipulasi data pada
INSERT
tebel/ view yang
trigger event UPDATE
menyebabkan trigger
DELETE
terpacu
berapa kali body ROW
trigger type
trigger dieksekusi STATEMENT
trigger body apa action dari trigger Block PL/SQL lengkap
126
Politeknik Telkom Database Management System
Row-level trigger dieksekusi untuk setiap row yang dimanipulasi pada suatu
transaksi. Dengan kata lain, row-level trigger mengerjakan trigger action
satu kali untuk setiap row yang sedang dimanipulasi. Penerapan trigger ini
ditunjukkan oleh adanya klausa FOR EACH ROW.
Kita mungkin akan berhubungan dengan data lama (old) dan data baru
(new) yang terjadi dalam transaksi. Dalam trigger, dikenal istilah alias atau
referensi, yaitu sejenis variabel yang menyimpan nilai dari suatu kolom
dalam tabel. Alias terbagi menjadi dua, yaitu:
:old → variabel yang menyimpan nilai lama kolom sebelum trigger
dieksekusi.
:new → variabel yang menyimpan nilai baru kolom setelah trigger
dieksekusi.
c. Instead of Trigger
Instead of trigger hanya diperuntukkan bagi view dan diaktivasi jika
terjadi perubahan pada base table (tabel asli). Trigger ini tidak dapat
menggunakan UPDATE OF nama_kolom maupun BEFORE dan AFTER
trigger.
128
Politeknik Telkom Database Management System
Table penjualan
no_nota id_obat jumlah total
2110 DT01 10 40000
Table histori_harga
id_obat harga_asli persen_laba berlaku
2110 3200 25 14-MAR-2006
Trigger created.
130
Politeknik Telkom Database Management System
Contoh 10.1
Trigger dimaksudkan untuk mengupdate tabel obat secara otomatis jika
terjadi insert pada tabel penjualan. Alias :new.jumlah dan :new.id_obat
berisi data baru tabel penjualan. Sedangkan stok dan id_obat merupakan
kolom dari tabel obat.
Untuk mengetahui kebenaran dari trigger, maka kita bisa mencoba statement
berikut:
Terlihat bahwa stok obat berkurang secara otomatis setiap terjadi insert pada
penjualan.
Contoh 10.2
Perhatikan penggunaan :old dan :new.
:new.persen_laba)/100)
9 WHERE id_obat = :old.id_obat;
10 END IF;
11 END;
12 /
Trigger created.
Contoh 10.3
Perhatikan baik-baik contoh trigger berikut ini.
132
Politeknik Telkom Database Management System
8 END IF;
9 END;
10 /
Trigger created.
Berikut ini perbaikan dari trigger di atas yang tidak akan menyebabkan
pelanggaran constraint:
Trigger created.
1 row updated.
134
Politeknik Telkom Database Management System
Keterangan:
DISABLE : untuk menonaktifkan trigger yang sudah dibuat
ENABLE : untuk mengaktifkan kembali trigger yang sudah di DISABLE.
Contoh 10.4 :
Untuk men-disable trigger UPDATE_PEGAWAI, gunakan sintaks berikut:
Rangkuman
136
Politeknik Telkom Database Management System
Latihan
pembayaran
meeting_room
PK id_pembayaran memiliki style
PK id_mr
pembayaran_kartu PK id_punya_style PK id_style
pembayaran_tunai nama_mr
tgl_pembayaran kapasitas nama_style
tarif_mr
id_reservasi id_mr
ukuran
id_style
pesan_fasilitas fasilitas
reservasi PK id_pesan_fasilitas PK id_fasilitas
PK id_reservasi
jum_pesan_fasilitas nama_fasilitas
pemesan tgl_reservasi biaya_total_fasilitas harga_fasilitas
kegunaan id_reservasi jum_min_fasilitas
PK id_pemesan id_fasilitas jum_max_fasilitas
jum_org
nama_pemesan tgl_awal
alamat_pemesan tgl_akhir
no_telp jam_awal
jam_akhir
id_pemesan
id_punya_style
id_petugas
banquet
pesan_banquet
PK id_banquet
PK id_pesan_banquet
petugas nama_banquet
jum_pesan_banquet jenis_banquet
PK id_petugas biaya_total_banquet harga_banquet
id_reservasi jum_min_banquet
nama_petugas id_banquet jum_max_banquet
jabatan
138
Politeknik Telkom Database Management System
9 Query Optimization
Overview
Tujuan
Tahap yang harus dilakukan pada saat melakukan optimalisasi query adalah
evaluation plan yaitu secara tepat menentukan algoritma apa yang akan
digunakan dan bagaimana mengeksekusi algoritma tersebut pada operasi-
operasi yang ada.
140
Politeknik Telkom Database Management System
Optimizer Mode :
a. Cost based optimizer
Optimizer akan memutuskan rencana eksekusi (execution plan ) mana
yang terbaik dan paling efisien dengan mempertimbangkan pada
ketersediaan path aksesnya dan juga berdasar pada statistik informasi
untuk skema objek (tabel/indeks) yang di akses oleh sebuah sql
statement.
Secara konsep, pendekatan cost-based terdiri atas 3 langkah berikut :
Optimizer membangkitkan seperangkat rencana eksekusi yang
potensial untuk SQL Statement berdasar pada ketersediaan path dan
petunjuk tentang sql statement tersebut.
Optimizer memperhitungkan cost pada tiap rencana eksekusi
berdasarkan statistik pada kamus data untuk distribusi data dan
karakteristik maupun informasi tentang penyimpanan dari tabel ,
indeks , dan partisi yang di akses oleh sebuah sql statement.
Optimizer membandingkan biaya setiap execution plan, dan
kemudian memilih plan dengan biaya paling rendah
Note :
• Cost dapat diartikan sebagai sebuah nilai resource yg dibutuhkan
untuk eksekusi sql statement dr beberapa execution plannya
• Optimizer menghitung cost dari tiap kemungkinan metode akses
dan urutan pen-joinan berdasar estimasi resource seperti CPU
time, memori,I/O untuk ekseskusi statement sql menggunakan plan
• Execution plan secara serial dengan cost besar butuh waktu
eksekusi lebih banyak daripada cost yg kecil
• Execution plan secara parallel, penggunaan resource tidak langsung
berpengaruh pada waktu yg dibutuhkan untuk eksekusi statement
sql
Jika suatu ekspresi aljabar relasional mengandung lebih dari satu operasi
primitif (select, project, join) maka ada dua cara untuk melaksanakan operasi-
operasi ini:
a. Materialization
Evaluasi Materialization: evaluasi satu operasi pada satu waktu, dimulai
dari yang paling dalam. Gunakan hasil antara (intermediate result) untuk
materialisasi (membuat relasi temporer) untuk mengevaluasi operasi level
berikutnya.
Contoh: pada gambar di bawah, hitung dan simpan
balance 2500 (account)
142
Politeknik Telkom Database Management System
kemudian hitung join antara relasi temporer denga customer, simpan lagi
sebagai relasi temporer, lakukan proyeksi pada customer-name untuk
relasi temporer tersebut.
b. Pipelining
Evaluasi Pipelining: merupakan evaluasi beberapa operasi secara
bersamaan dan berikan hasil dari satu operasi ke operasi berikutnya.
Contoh: di ekspresi sebelumnya, jangan simpan hasil dari
balance 2500 (account)
Melainkan, berikan tuple langsung ke join. Dengan cara yang sama, jangan
simpan hasil join, berikan tuple langsung ke proyeksi. Cost yang
dibutuhkan untuk melakukan pipelining lebih murah dari materialisasi
karena tidak perlu menyimpan relasi temporer di disk. Namun, pipelining
tidak selalu bisa dilakukan – misal, sort, hash-join. Agar pipelining efektif,
gunakan algoritma yang membangkitkan output tuple pada saat tuple
diterima sebagai input terhadap operasi tersebut. Pipeline dapat
dilakukan dengan dua cara: demand driven dan producer driven
Ekuivalences Rules
1. Conjunctive selection operation
( E ) ( ( E ))
2. Selection operation
1 2 1 2
( ( E )) ( ( E ))
1 2 2 1
3. Projection operation
t1 ( t 2 ( ( tn ( E )) )) t1 ( E )
4. Combine selection with cartesian product and theta join
a. (E1 X E2) = E1 E2
b. 1(E1 2 E2) = E1 1 2 E2
5. Theta join operation (and natural joins) are commutative.
E1 E2 = E2 E1
6. (a.) Natural join are associative:
(E1 E2) E3 = E1 (E2 E3)
7. The selection operation distributes over the theta join operation under
the following two conditions:
(a) When all the attributes in 0 involve only the attributes of one
of the expressions (E1) being joined.
0E1 E2) = (0(E1)) E2
(b) When 1 involves only the attributes of E1 and 2 involves
only the attributes of E2.
1 E1 E2) = (1(E1)) ( (E2))
144
Politeknik Telkom Database Management System
9.2 Sorting
Sorting kumpulan record pada beberapa (search) key merupakan operasi
yang sangat berguna. Key dapat berupa atribut tunggal atau daftar atribut
terurut. Sorting perlu dilakukan dalam berbagai situasi, termasuk hal penting
berikut:
1. Sorting record merupakan langkah pertama dalam bulk-loading tree index
2. Sorting berguna untuk menghilagkan salinan duplikasi pada kumpulan
record
3. Algoritma yang digunakan secara luas untuk melakukan operasi aljabar
relasional yang sangat penting, yang disebut join ,memrlukan tahap sorting
Algoritma sorting :
a. Two-way Merge Sort Sederhana
Algoritma ini hanya memanfaatkan 3 page memory utama dan hanya
direpresentasikan untuk tujuan pedagogikal. Walaupun seluruh file tidak
muat dalam memory utama yang tersedia, kita dapat menyortirnya
dengan memecah file tersebut menjadi subfile yang lebih kecil, menyortir
subfile tersebut kemudian menggabungkan subfile tersebut dengan
menggunakan sejumlah kecil memory utama pada waktu tertentu. Pada
tahap pertama, halaman dalam file dibaca satu per satu. Setelah halaman
dibaca, record didalamnya disortir dan halaman tersortir (sorted run
panjangnya satu halaman) ditulis. Quicksort atau teknik sorting dalam
memory yang lain dapat digunakan untuk menyortir record pada
halaman. Pada tahap berikutnya, pasangan run dari output dari tahap
sebelumnya dibaca dan digabungkan untuk menghasilkan run yang
panjangnya 2 kali lipat panjang sebelumnya.
Jika jumlah halaman dalam file inputan 2k, untuk beberapa k maka :
- tahap 0 menghasilkan 2k run tersortir masing-masing satu halaman
- tahap 1 menghasilkan 2k-1 run tersortir masing-masing dua halaman
- tahap 2 menghasilkan 2k-2 run tersortir masing-masing empat
halaman, dan seterusnya sampai tahap k menghasilkan satu run 2 k
halaman tersortir.
Dalam tiap tahap, kita membaca setiap halaman dalam file,
memproses dan menulisnya. Oleh karena itu, kita mempunyai dua disk
I/O per halaman, per tahap. Jumlah tahap adalah [log2 N]+1 dimana N
adalah jumlah halaman dalam file. Biaya keseluruhan adalah 2N ([log2
N]+1) I/O.
Algoritma ini hanya memerlukan tiga halaman buffer dalam memory
utama. Observasi ini memunculkan hal penting, jadi sekalipun kita
mempunyai ruang buffer yang lebih, algoritma two-way merge sort
sederhana tidak akan memanfaatkanya secara efektif.
gambar 11.2 a
146
Politeknik Telkom Database Management System
Contoh :
Dibawah ini terdapat file input dengan 7 buah halaman. Sorting tersebut
memerlukan 2 tahap dan pada tiap tahap kita membaca dan menulis tujuh
halaman , dengan total 56 I/O. Hasil ini sesuai dengan analisis sebelumnya
karena:
2x7 ([log2 N7+1)= 56.
gambar 11.2 b
ket : dark page pada gambar menunjukan apa yang akan terjadi pada file
delapan halaman; jumlah tahap tetap empat ([log2 8+1=4), tetapi kita
membaca dan menulis halaman tambahan dalam tiap tahap dengan total
64 I/O.
b. External Sorting
Algoritma ini memerlukan lebih dari tiga halaman buffer. Selain itu
algoritma ini juga melakukan 2 modifikasi penting pada two-way merge
sort :
Pada tahap 0, baca B halaman dan sortir secara internal untuk
menghasilkan run [N/B] masing-masing B halaman (kecuali run
terakhir, yang mungkin berisi lebih sedikit halaman).
Tahap i=1,2,... gunakan B-1 halaman buffer untuk input dan gunakan
sisa halaman untuk output; dengan demikian kita melakukan (B-1)
cara penggabungan dalam tiap tahap
gambar 11.2 c
Contoh :
Terdapat 5 buffer untuk mensort 108 halaman file,maka yang dilakukan
adalah :
- tahap 0 menghasilkan [108/5]= 22 run tersortir, masing-masing 5
halaman kecuali run terakhir yang panjangnya 3 halaman
- tahap 1 menghasilkan [22/4]= 6 run tersortir, masing-masing 20
halaman kecuali run terakhir yang panjangnya 8 halaman
- tahap 2 menghasilkan [6/4]= 2 run tersortir, satu dengan 80 dan satu
dengan 28 halaman
- tahap 3 menggabungkan dua run yang dihasilkan pada tahap 2 untuk
menghasilkan file tersortir.
Contoh :
Sid Sname Rating Age
rating > 8(S2)
28 Yuppy 9 35.0
31 Lubber 8 55.5
44 Guppy 5 35.0
58 Rusty 10 35.0
Tabel S2
148
Politeknik Telkom Database Management System
partisi, dan terdapat satu halaman output per partisi. Setelah proyeksi,
tuple diisi ke halaman buffer output yang di hash menurut h.
Pada akhir partisi, kita mempunyai B-1 partisi, masing-masing berisi
kumpulan tuple yang menggunakan nilai hash umum.
Dua tuple yang tercakup dalam partisi yang berbeda dijamin tidak
menjadi duplikat karena mereka mempunyai nilai hash yang berbeda.
Jadi, jika dua tuple merupakan duplikat, maka mereka berada dalam
partisi yang sama.
- tahap eliminasi duplikat
kita membaca B-1 partisi satu per satu untuk menghilangkan duplikat.
}
Tabel S1
9.3.4 Set-Difference
Operasi set-difference (R-S) menghasilkan salah satu contoh relasi yang berisi
semua tuple yang terjadi baik pada R dan S. Relasi R dan S harus union
compatible, dan skema hasil ditentukan identik dengan skema R.
Contoh :
}
Tabel S1
S1- S2
Sid Sname Rating Age
28 Yuppy 9 35.0
31 Lubber 8 55.5
44 Guppy 5 35.0
58 Rusty 10 35.0
Tabel S2
9.3.5 Algoritma Join
Ada beberapa algoritma berbeda untuk implementasi join, yaitu :
a. Nested-loop join
Algoritma untuk menghitung theta join r s
for each tuple tr in r do begin
for each tuple ts in s do begin
test pair (tr,ts) to see if they satisfy
the join condition
if they do, add tr • ts to the result.
end
end
Dimana r disebut sebagai relasi luar (outer relation) dan s sebagai relasi
dalam (inner relation) dari join. Algoritma join ini tidak membutuhkan
indeks sehingga dapat digunakan dalam kondisi join apapun.
Query Optimization 151
Politeknik Telkom Database Management System
Kelemahan dari algoritma ini adalah mempunyai cost yang mahal, karena
harus memeriksa setiap pasangan tuple di kedua relasi. Dalam keadaan
paling buruk (worst case), jika hanya mempunyai memory yang mampu
menampung satu blok dari masing-masing relasi, perkiraan cost adalah
nr * Bs + br
Jika relasi yang lebih kecil dapat masuk seluruhnya ke dalam memory,
maka gunakan itu sebagai relasi bagian dalam. Mengurangi biaya menjadi
br + bs disk access.
Contoh :
Terdapat catalog berisi informasi berikut ini:
- ncustomer = 10,000
- fcustomer = 25, sehingga bcustomer=10000/25=400
- ndepositor=5000
- fdepositor=50, sehingga bdepositor=5000/50=100
- V(customer-name,depositor) = 2500, rata-rata tiap nasabah punya dua rekening
Jawab :
Dengan mengasumsikan worst case, maka perkiraan biaya akan menjadi
– 5000*400 + 100 = 2,000,100 disk acess dengan depositor sebagai relasi
luar (outer relation)
– 1000*100+400 = 1,000,400 disk access dengan customer sebagai relasi
bagian luar
Jika relasi yang lebih kecil (depositor) dapat masuk seluruhnya di
memory, maka perkiraan biaya akan menjadi 500 disk access.
d. Merge-join
Join jenis ini dapat digunakan hanya untuk equi-join dan natural join
dimana masing-masing blok hanya perlu dibaca sekali (asumsi semua tuple
hasil join dapat masuk ke dalam memory) sehingga jumlah blok akses
yang diperlukan untuk merge join adalah Br+bs+cost untuk mengurutkan
relasi yang belum urut
Hybrid merge-join: Jika satu relasi telah diurutkan, sementara yang
lainnya mempunyai indeks sekunder B+-tree pada atribut joinnya, maka:
- Gabungkan relasi yang telah urut tersebut dengan nilai-nilai di node leaf
pada B+-tree
- Urutkan hasil pada tuple yang belum terurut berdasarkan alamat-
alamat fisik penyimpanan tuple relasi yang belum terurut
- Pelaksanaan operasi join dilakukan berdasarkan urutan alamat fisik
relasi yang belum terurut tersebut
penelusuran secara sequensial lebih efisien dar penelusuran
secara acak
154
Politeknik Telkom Database Management System
e. Hash-join
Hash join berlaku untuk equi-join dan natural join.
156
Politeknik Telkom Database Management System
Rangkuman
Latihan
158
Politeknik Telkom Database Management System
10 DATABASE ADMINISTRATION
SECURITY
Overview
Isu security data merupakan salah satu isu yang semakin berkembang saat ini,
kebutuhan akan tingkat keamanan data yang semakin tinggi membuat dba
harus benar-benar menjaga kemamana data untuk tetap menjaga integritas
dan kerahasiaan suatu data.
Tujuan
Jaringan
Komunikasi
Kabel yang
tidak
erkoneksi, DBMS dan Program
radiasi Database Aplikasi
Aturan / Kesalahan mekanisme
amandemen yang keamanan
tidak diotorisasi, Akses yang terlalu luas
penduplikatan data, Pencurian program
pencurian data, Kesalahan program
kehilangan data
akibat gangguan
listrik
160
Politeknik Telkom Database Management System
Keamanan Data :
1. Otorisasi :
2. Tabel View :
162
Politeknik Telkom Database Management System
Penyalahgunaan Database :
System security meliputi akses dan penggunaan database pada level system,
semisal username dan password, ruang disk yang dialokasikan ke user, dan
operasi system yang diperbolehkan pada user. Database security meliputi
akses dan penggunaan database object dan perlakuan yang bisa diberikan oleh
user terhadap object dari database.
Tingkat kerusakan suatu database dan sejauh mana database tersebut dapat
diperbaiki tergantung pada hal-hal berikut :
1. apakah ada hardware & software alternatif yang dapat digunakan
2. kapan backup terakhir dilakukan
3. waktu yang diperlukan untuk me-restore system
4. apakah data yang hilang dapat dipulihkan
Query Optimization 163
Politeknik Telkom Database Management System
164
Politeknik Telkom Database Management System
b. Enkripsi
Enkripsi adalah pengkodean data dengan algoritma khusus sehingga data
tidak dapat dibaca oleh program tanpa kunci deskripsi. Selain itu
enkripsi juga memproteksi data yang ditransmisikan melalui jalur
komunikasi.
Jenis enkripsi :
1. Symmetric encryption : kunci enkripsi = kunci dekripsi
Contoh : Data Encryption Standard (DES) yang dikembangkan IBM
2. Asymmetric encryption : kunci ekripsi ≠ kunci dekripsi
Contoh : RSA
d. Prosedur
Berbagai mekanisme pengamanan data tidak efektif bila tidak
dikendalikan dan digunakan sebagaimana mestinya. Untuk menangani hal
tersebut maka harus menggunakan prosedur berkaitan dengan
mekanisme keamanan. Seperti penentuan prosedur untuk menentukan
otorisasi user, password, prosedur recovery dll.
e. View
Merupakan metode pembatasan bagi pengguna untuk mendapatkan
model database yang sesuai dengan kebutuhan perorangan. Metode ini
dapat menyembunyikan data yang tidak digunakan atau tidak perlu
dilihat oleh pengguna.
166
Politeknik Telkom Database Management System
f. Backup
Untuk menjaga keberadaan system dan menjaganya dari kerusakan maka
dilakukan backup. Backup yang dilakukan tidak hanya backup data tetapi
juga backup aplikasi dan system operasi. Dalam melakukan backup
semua detail harus dispesifikasikan dengan jelas dalam prosedur.
Penyimpanan backup dilakukan pada lokasi yang aman (dari segi
kemanan fisik seperti tahan api, tahan banjir dan dari pencurian) dan
pada lokasi yang berbeda. Waktu backup bisa dilakukan sekaligus pada
selang waktu tertentu seperti setiap bulan, setiap minggu atau setiap
hari. Tetapi backup lebih sering dilakukan secara berkala / incremental.
g. Recovery
Salah satu cara untuk menjaga keamanan datanbase adalah dengan
melakukan recovery. Recovery dilakukan berdasarkan tipe crash yang
terjadi pada database, seperti kegagalan media, software dan hardware
juga bergantung pada metode recovery yang digunakan oleh DBMS.
Prosedur recovery hendaknya selalu diuji untuk menjamin
keberhasilanya, idealnya diuji secara regular dalam interval waktu
tertentu.
168
Politeknik Telkom Database Management System
170
Politeknik Telkom Database Management System
User created.
Membuat Role
CREATE ROLE manager;
Role created.
Grant previledge ke role
GRANT create table, create view
TO manager;
Grant succeeded.
Grant role ke user
GRANT manager TO DEHAAN, KOCHHAR;
Grant succeeded
Profile dapat diberikan kepada setiap user, atau default profile untuk setiap
user. Profile hanya dapat diberikan kepada user, dan setiap user hanya
memiliki satu profile.
Sebelum membuat profile harus ditentukan terlebih dahulu nilai yang pas
untuk setiap resource limit
172
Politeknik Telkom Database Management System
10.6.1 Sintaks
CREATE PROFILE profile LIMIT
[FAILED_LOGIN_ATTEMPTS max_value]
[PASSWORD_LIFE_TIME max_value]
[ {PASSWORD_REUSE_TIME|PASSWORD_REUSE_MAX}
max_value]
[PASSWORD_LOCK_TIME max_value]
[PASSWORD_GRACE_TIME max_value]
[PASSWORD_VERIFY_FUNCTION
{function|NULL|DEFAULT} ]
Parameter Keterangan
PROFILE Member nama profile yang akan
dibuat
FAILED_LOGIN_ATTEMPTS Menentukan jumlah maks yang
diperbolehkan user untuk gagal
login sebelum account di lock.
PASSWORD_LIFE_TIME Menentukan lama hari
penggunaan pwd yang dipakai. Jika
PASSWORD_GRACE_TIME
ditentukan, maka pwd akan
expire setelah masa grace.
174
Politeknik Telkom Database Management System
Contoh 12.2
Buat profile
CREATE PROFILE (nama_profile) LIMIT
FAILED_LOGIN_ATTEMPTS 3
PASSWORD_LIFE_TIME 60
PASSWORD_REUSE_TIME 60
PASSWORD_REUSE_MAX 5
PASSWORD_LOCK_TIME 1/24
PASSWORD_GRACE_TIME 10;
10.7 Views
Views digunakan untuk memonitor user dari database yang kita buat,
metadata views yang digunakan untuk memonitor user adalah :
DBA_users : berisi informasi seluruh user yang dimiliki oleh DBA
DBA_TS_Quotas : berisi informasi tentang tablespace quota bagi setiap
pemakai.
V$session : untuk melihat user yang sedang connect ke system
Contoh 12.3 :
10.8 Trigger
Trigger adalah blok PL/SQL yang disimpan dalam database dan dijalankan
secara implisit sebagai respon terhadap perubahan yang telah ditentukan
dalam database.
176
Politeknik Telkom Database Management System
Artinya, data dimasukkan ke dalam basis data dalam bentuk plainteks dan
akan meninggalkan basis data dalam bentuk plainteks pula. Strategi ini
diterapkan dengan menggunakan database procedure call. Salah satu contoh
penggunaannya adalah dengan menerapkan trigger setiap kali pengguna
memanggil operasi select .
Operasi select terhadap data yang diproteksi akan memicu trigger untuk
mengenkripsi data tersebut. Jika pengguna yang bersangkutan adalah pengguna
yang memiliki hak autorisasi untuk melihat data, maka data akan didekripsi
ketika ditampilkan. Jika sebaliknya, data akan ditampilkan masih dalam bentuk
terenkripsi. Enkripsi internal basis data dapat dilakukan dengan whole database
encryption atau dengan column encryption.
Dengan enkripsi data secara internal, pada umumnya kunci akan disimpan di
dalam tabel di dalam basis data yang sama. Artinya, data yang diproteksi
dengan enkripsi tidak terpisah dengan kunci yang digunakan untuk
mengenkripsi dan mendekripsinya. Meskipun kunci umumnya disimpan dalam
tabel dengan akses terbatas, hal ini tentu saja akan meningkatkan resiko
keamanan data karena setiap orang yang dapat mengakses basis data juga
dapat mengakses kunci.
178
Politeknik Telkom Database Management System
Virtual Private Database (VPD) atau row level security (RLS) atau biasa disebut
juga fine-grained access control (FGAC) merupakan teknologi yang dapat
membatasi akses terhadap baris-baris (row) data dari beberapa objek
database yaitu tabel dan view secara run-time.
Ketika user secara langsung atau tidak memasuki tabel atau view yang
berkaitan dengan VPD security policy, server secara dinamis memodifikasi
SQL statement user. Modifikasi ini berdasarkan pada suatu kondisi yang
diberikan oleh suatu fungsi yang mengimplementasi kan security policy. Setiap
user diberikan security policy yang berbeda terhadap tabel dan view yang di-
query.
180
Politeknik Telkom Database Management System
Tabel
Paket
Security
USER Langkah 1 Langkah 2
Policy
Langkah 5
Langkah 4
Where Langkah 3
Predicate
182
Politeknik Telkom Database Management System
184
Politeknik Telkom Database Management System
Overview
Transaksi dalam basisdata bisa berjalan lebih dari satu dalam waktu yang
hampir bersamaan (konkuren). Diperlukan penjadwalan dan aturan-aturan
(protocol) yang harus dipatuhi oleh transaksi-transaksi tersebut untuk tetap
menjaga agar data konsisten dan dalam keadaan serializability dengan
menghindari terjadinya kendala pengaksesan data yang salah satunya adalah
deadlock.
Tujuan
186
Politeknik Telkom Database Management System
11.1 Transaksi
Transaksi adalah satu unit pekerjaan lojik yang terdiri dari serangkaian
aksi atau operasi, dengan keseluruhan aksi atau operasi tersebut harus sukses
dijalankan atau gagal seluruhnya.
11.2 Penjadwalan
11.3 Serializability
Pada saat terjadi beberapa transaksi dijalankan hampir bersamaan,
maka yang akan terjadi adalah penjadwalan nonserial. Dalam penjadwalan
nonserial akan terdapat kemungkinan bahwa proses transaksi yang satu akan
diselingi dengan proses transaksi yang lain. Hal ini kemungkinan dapat
menyebabkan data menjadi tidak konsisten.
188
Politeknik Telkom Database Management System
11.4.1 Lock
S X
S Compatible Incompatible
X Incompatible Incompatible
Tabel 13.1
Pada saat T2 akan mengakses suatu data Q yang sudah di lock oleh
transaksi lain T1 ( T1 <> T2 ) dengan mode-lock yang incompatible antara
kedua transaksi, maka concurrency control manager tidak akan memberikan
grant lock ke T2 sebelum lock transaksi T1 terhadap data Q tersebut
dilepaskan /di-unlock .
190
Politeknik Telkom Database Management System
T1 :
lock-X(B);
read(B);
B := B - 50;
write(B);
unlock(B);
lock-X(A);
read(A);
A := A + 50;
write(A);
unlock(A).
T2 :
lock-S(A);
read(A);
unlock(A);
lock-S(B);
read(B);
unlock(B);
display(A + B).
Tabel penjadwalan 1
Conncurency
T1 T2
control-manager
Lock-X(B)
Grant X(B,T1)
Read (B)
B:=B-50
Write (B)
Unlock (B)
Lock-S(A)
Grant S(A,T2)
Read (A)
Unlock (A)
Lock –S(B)
Grant S(B,T2)
Read (B )
Unlock (B)
Display (A+B)
Lock –X(A)
Grant X(A,T1)
Read (A)
A:=A+50
Write (A)
Unlock (A)
192
Politeknik Telkom Database Management System
T3 :
lock-X(B);
read(B);
B := B - 50;
write(B);
lock-X(A);
read(A);
A := A + 50;
write(A);
unlock(B);
unlock(A).
T4 :
lock-S(A);
read(A);
lock-S(B);
read(B);
display(A + B);
unlock(A);
unlock(B).
11.4.2 Deadlock
T5 T6
Lock –X(C)
Read (C)
C:=C*1.1
Write (C)
Lock –X(D)
Read (D)
D:=D*1.2
Write (D)
Lock –S(C)
Lock –S(D)
bahwa hal tersebut akan mengantarkan pada keadaan data yang tidak
konsisten.
Aturan dari two – phase protocol adalah bahwa setiap transaksi yang
meminta untuk dapat melakukan lock atau unlock data terdiri dari dua fase:
- Growing Phase, yaitu transaksi boleh melakukan lock terhadap data.
- Shrinking Phase, yaitu transaksi boleh melakukan unlock terhadap
data, tetapi tidak boleh meminta untuk melakukan lock baru terhadap
data.
yang melakukan pembacaan dan atau penulisan data yang sama yang
sebelumnya sudah pernah dirubah/ditulis oleh transaksi yang mengalami
kegagalan dan belum COMMIT). Hal ini dapat terjadi pada two-phase
protocol.
196
Politeknik Telkom Database Management System
Granularitas item data adalah ukuran dari satu unit data yang terdiri
dari kumpulan item data yang akan disinkronisasi pada skema concurrency
control
Granularitas item data :
- Seluruh basis data
- Page
- Record
- Field
Rangkuman
1. Transaksi adalah satu unit pekerjaan lojik yang terdiri dari serangkaian
aksi atau operasi, dengan keseluruhan aksi atau operasi tersebut harus
sukses dijalankan atau gagal seluruhnya.
2. Untuk menjamin integritas data, sangat diharuskan bagi sistem basis
untuk tetap menjaga properti-properti berikut pada transaksi:
- Atomicity. Basisdata harus mencerminkan dengan benar seluruh
operasi transaksi atau tidak sama sekali.
- Consistency. Segala perubahan yang konsisten pada basisdata
mencerminkan dan sesuai dengan yang seharusnya terjadi dalam
dunia nyata.
- Isolation. Walaupun beberapa transaksi dieksekusi secara hampir
bersamaan, sistem harus menjamin bahwa proses transaksi yang satu
tidak mengganggu proses transaksi yang lainnya. Sehingga seolah-olah
transaksi satu dieksekusi setelah transaksi lain berakhir dieksekusi.
- Durability. Setelah transaksi selesai dengan sukses, maka
perubahan data dalam basisdata adalah permanen, walaupun terjadi
kegagalan.
3. Sangat dimungkinkan terjadi lebih dari satu transaksi berjalan dan
dieksekusi hampir bersamaan (konkuren). Maka diperlukan suatu
penjadwalan untuk menjaga konsistensi dari data.
4. Serializability adalah suatu cara untuk menjadwalkan proses-proses
transaksi yang dijalankan hampir bersamaan dengan tetap menjaga
konsistensi data seolah-olah proses dari transaksi-transaksi tersebut
dijalanakan secara serial.
3 Merupakan suatu cara/metoda yang digunakan untuk tetap menjaga
serializability pada data yang diakses oleh lebih dari satu transaksi. Yaitu,
apabila salah satu transaksi mengakses sebuah item data maka tidak akan
ada transaksi yang dapat memodifikasi data tersebut. Karena data sudah
―dikunci‖ atau di ―lock‖ oleh transaksi yang bersangkutan.
4 Terdapat dua mode-lock pada data:
- Shared –mode lock (dinotasikan dengan S).
- Exclusive – mode lock (dinotasikan dengan X)
198
Politeknik Telkom Database Management System
5. Untuk tetap menjaga serializability dan consistency data pada saat terjadi
beberapa transaksi, metode locking dapat digunakan. Namun metode
locking dapat memungkinkan pada suatu keadaan yang tidak diinginkan.
6. Keadaan tersebut adalah deadlock, yaitu keadaan pada saat beberapa
transaksi saling menunggu untuk mengakses data yang sedang di lock oleh
transaksi lain.
7. Keadaan deadlock dapat dihindari. Yang diperlukan adalah bahwa setiap
transaksi harus mengikuti serangkaian aturan yang disebut dengan locking
protocol. Salah satu locking protocol adalah two-phase protocol.
8. Aturan dari two – phase protocol adalah bahwa setiap transaksi yang
meminta untuk dapat melakukan lock atau unlock data terdiri dari dua
fase:
- Growing Phase, yaitu transaksi boleh melakukan lock terhadap
data.
- Shrinking Phase, yaitu transaksi boleh melakukan unlock terhadap
data, tetapi tidak boleh meminta untuk melakukan lock baru
terhadap data.
9. Namun dengan two – phase protocol akan menghadapkan pada suatu
kondisi yang disebut dengan Cascading rollback.
10. Cascading rollback adalah keadaan pada saat terjadi kegagalan pada salah
satu transaksi dan menyebabkan beberapa transaksi yang terkait harus
melakukan rollback.
11. Untuk mencegahnya maka two phase locking protocol dikembangkan
menjadi strict two phase locking protocol. Aturannya adalah:
- sama dengan aturan dari two phase locking protocol
- Untuk setiap exclusive mode-lock dipaksa harus dipegang oleh
transaksi sebelum terjadinya COMMIT.
12. Granularitas item data adalah ukuran dari satu unit data yang terdiri dari
kumpulan item data yang akan disinkronisasi pada skema concurrency
control
13. Granularitas item data terdiri dari :
- Seluruh basis data
- Page
- Record
- Field
Soal
6. Pada saat keadaan darurat, solusi apakah yang bisa dilakukan oleh
administrator database untuk mengatasi masalah deadlock?
200
Politeknik Telkom Database Management System
Latihan
Daftar Pustaka
202
Politeknik Telkom Database Management System Practice
12 TUNING
Overview
Tujuan
Tuning 203
Politeknik Telkom Database Management System
12.1 PENDAHULUAN
Oracle 10g adalah salah satu produk software yang mampu dioptimisasikan
dengan baik. Penggunaan tuning secara teratur mampu mengoptimisasikan
performansi system dan mencegah bottlenecks. Dalam hal ini, pengertian
tuning adalah suatu cara untuk meningkatkan performansi (DBMS ORACLE)
dengan mengacu pada segala aspek yang ada dalam basis data. Sedangkan,
Beberapa hal yang menyebabkan bottlenecks antara lain :
Memory Contention (Perebutan Memory)
- Perebutan memory terjadi ketika proses-proses
membutuhkan memory lebih dari apa yang sudah tersedia.
Jika hal ini terjadi, system akan mempertukarkan data antara
memory dan disk.
- Dengan pengalokasian memory yang tepat pada stuktur
database, mampu mengurangi resiko terjadinya Memory
Contention
Disk I/O Contention (Perebutan disk I/O)
- Perebutan source Disk I/O disebabkan oleh manejemen
memory yang buruk, distribusi teblespace dan file antar disk
yang buruk, ataupun kombinasi dari kedua factor tersebut.
- Perebutan ini dapat dicegah dengan menentukan kebutuhan
I/O untuk masing-masing bagian database yang berbeda-
beda
CPU Contention (Perebutan CPU)
- Walaupun kernel OpenVMS biasanya mengalokasikan
resource CPU secara efektif, masih saja banyak proses yang
bersaing untuk mendapatkan CPU cycles, dan hal ini dapat
menyebabkan perebutan resource CPU. Jika anda
menginstal Oracle Database 10g pada lingkungan
multiprocessor, maka kemungkinan akan terjadi perbedaan
level perebutan pada masing-masing CPU.
- Untuk performansi database yang optimal, juga lakukan
tuning pada operating system.
Oracle Resource Contention (Perebutan resource Oracle)
Biasa terjadi pada Oracle seperti pada Locks dan Latches.
204
Politeknik Telkom Database Management System Practice
Dasar-Dasar
Hal yang paling efektif untuk melakukan tuning adalah didapatkannya terlebih
dahulu dasar performansi yang sudah tetap yang dapat digunakan untuk
pembandingan jika terjadi sesuatu pada performansi. Kebanyakan database
administrator (DBA) tahu bahwa system mereka berjalan dengan baik dan
dapat mudah diidentifikasi puncak dari periode penggunaannya. Sebagai
contoh, puncak periode dapat terjadi antara 10.00 am dan 12.00 pm dan juga
antara 1.30 pm dan 3.00 pm. Hal ini juga mencakup batch window dari jam
12.00 am sampai 6.00 am.
2. Bottleneck Elimination
Tuning biasanya menyertakan perbaikan suatu masalah performansi.
Bagaimanapun, tuning harus menjadi bagian dari siklus hidup suatu aplikasi—
melalui analisis, desain, coding, produksi, dan perawatan tahapan-tahapan.
Kadang-kadang, fase tuning ditinggalkan sampai sistem diproduksi. Saat ini,
tuning menjadi suatu reactive fire-fighting exercise, dimana cara menghindari
bottleneck yang terpenting adalah mengidentifikasi dan memperbaiki.
2. Identifikasi Masalah
Apakah akibat dari slowdown? Misal, apakah seluruh instance melambat?
Apakah ada sebuah single user,operasi khusus,program, atau aplikasi
khusus?
Tuning 207
Politeknik Telkom Database Management System
Jika terdapat penggunaan CPU yang tinggi, maka periksa apakah CPU
tersebut digunakan secara efektif. Apakah sebagian besar penggunaan CPU
merupakan akibat dari sejumlah kecil high-usage program yang
menggunakan CPU, atau CPU yang dikonsumsikan oleh distributed workload.
208
Politeknik Telkom Database Management System Practice
Jika CPU digunakan oleh sejumlah kecil high-usage program, maka lihat
kembali program-program tersebut yang menyebabkan masalah. Cek
apakah beberapa proses tunggal mengkonsumsi full power dari sebuah
CPU. Bergantung pada proses tersebut, dapat saja ini merupakan indikasi
bahwa CPU/proses membatasi beban kerja yang dapat diberhentikan
dengan membagi atau melakukan paralelisasi aktivitas proses.
a. Proses Non-Oracle
Jika program tersebut bukan program oracle, maka identifikasi
apakah program secara sah membutuhkan sejumlah CPU.
b. Proses Oracle
Jika sejumlah kecil proses Oracle mengkonsumsi sebagian besar
resource CPU, maka gunakan SQL_TRACE dan TKPROF untuk
mengidentifikasi SQL atau PL/SQL statements agar terlihat
apakah query atau unit program PL/SQL tertentu dapat di-tuning.
Sebagai contoh, SELECT statement dapat menyebabkan CPU-
intensive jika eksekusinya melibatkan pembacaan banyak data di
cache yang bisa saja dihindari dengan SQL optimization yang lebih
baik.
Tuning 209
Politeknik Telkom Database Management System
FROM V$RSRC_CONSUMER_GROUP
V$STATISTICS_LEVEL
210
Politeknik Telkom Database Management System Practice
b. Event tunggu
Event tunggu merupakan statistic yang meningkat dari suatu proses server
atau urutan untuk mengindikasikan bahwa proses server ini menunggu suatu
event selesai sebelum proses lain bisa berlanjut. Data event tunggu
menunjukkan gejala bervariasi dari masalah yang mungkin dapat mengubah
performansi, seperti perebutan hambatan, dan perebutan buffer. Ingat bahwa
hal ini hanya gejala dari masalah, bukan kasus nyata.
Event tunggu dikelompokan menjadi class-class. Class event tunggu
mencakup: Administrative, Application, Cluster, Commit, Concurrency,
Configuration, Idle, Network, Other, Scheduler, System I/O, dan User I/O.
Suatu proses server dapat menunggu untuk hal berikut:
Suatu resource sudah tersedia, seperti buffer atau hambatan
Sebuah aksi untuk menyelesaikan, seperti suatu I/O
Banyak pekerjaan yang harus dilaksanakan, seperti menunggu client
untuk meningkatkan statement SQL yang dieksekusi berikutnya.
Event yang mengidetifikasi bahwa suatu proses server menunggu
untuk banyak pekerjaan dikenal dengan idle events.
Statistik event tunggu mencakup jumlah waktu suatu event menunggu dan
waktu event tunggu selesai. Jika inisialisasi parameter TIMED_STATISTICS
diset true, maka kita juga dapat melihat berapa lama setiap resource ditunggu.
Untuk meminimumkan user response time yaitu dengan cara mengurangi
pemakaian waktu oleh proses server menunggu penyelesaian suatu event.
Tidak semua event tunggu mempunyai waktu tunggu yang sama. Maka dari itu
sangat penting untuk menguji event dengan waktu total tunggu lebih baik dari
event tunggu dengan suatu angka kejadian yang tinggi. Biasanya, hal ini baik
untuk memasang parameter dinamis TIMED_STATISTICS ke true paling tidak
ketika performansi monitoring.
V$SESSION_WAIT
View V$SESSION_WAIT memperlihatkan resource atau event
dimana session aktif menunggu.
V$SESSION
View V$SESSION terdiri dari statistic tunggu yang sama yang terdiri
dalam V$SESSION_WAIT view. Jika teraplikasi, view ini juga terdiri
informasi detail pada objek yang session-nya sedang ditunggu (object
number, block number, file number, dan row number), ditambah
tanggung jawab blocking session untuk yang sedang ditunggu.
V$SESSION_EVENT
View V$SESSION_EVENT menyediakan kesimpulan dari semua
event yang session-nya ditunggu dari awal.
V$SESSION_WAIT_CLASS
View V$SESSION_WAIT_CLASS menyediakan jumlah tunggu dan
pemakaian waktu ditiap class dari event tunggu untuk tiap session.
V$SESSION_WAIT_HISTORY
View V$SESSION_WAIT_HISTORY memperlihatkan sepuluh event
tunggu terakhir untuk setiap session aktif.
V$SYSTEM_EVENT
View V$SYSTEM_EVENT menyediakan suatu kesimpulan dari semua
event tunggu pada instansiasi sejak awal.
V$EVENT_HISTOGRAM
View V$EVENT_HISTOGRAM memperlihatkan suatu histogram
dari jumlah tunggu, maksimum tunggu, dan total waktu tunggu pada
suatu basis event.
V$FILE_HISTOGRAM
View V$FILE_HISTOGRAM memperlihatkan suatu histogram dari
waktu tunggu selama single block reads untuk tiap file.
V$SYSTEM_WAIT_CLASS
View V$SYSTEM_WAIT_CLASS menyediakan instansiasi total
waktu yang luas untuk jumlah tunggu dan pemakaian waktu di tiap
class event tunggu.
V$TEMP_HISTOGRAM
View V$TEMP_HISTOGRAM meperlihatkan suatu histogram dari
waktu tunggu selama single block reads untuk tiap temporary file.
212
Politeknik Telkom Database Management System Practice
Memeriksa waktu tunggu dan timing data yang berelasi ketika menampilkan
performansi reaktif tuning. Event dengan waktu terdaftar diantara mereka ada
indikasi yang kuat dari performansi bottleneck. Contohnya, lihat
V$SYSTEM_EVENT, kita dapat melihat banyak buffer busy waits. Ini bisa jadi
banyak proses masuk ke block yang sama dan harus menunggu yang lain
sebelum mereka bisa masuk. Solusinya bisa jadi menggunakan automatic
segment space management atau membagi untuk object di pertanyaan.
d. Statistic System
Statistic system dikombinasikan dengan event tunggu data untuk menemukan
bukti selanjutnya dari penyebab suatu permasalahan performansi.
Contohnya, jika V$SYSTEM_EVENT mengindikasikan event tunggu terbesar
(dalah hal ini waktu tunggu) maka event itu merupakan event buffer busy
waits, lalu lihat statistik buffer tunggu spesifik tersedia pada view
V$WAITSTAT untuk melihat tipe block mana yang mempunyai jumlah tunggu
tertinggi dan waktu tunggu tertinggi.
Statistik tersedia untuk banyak V$ views. Beberapa view umum terdiri dari
berikut ini:
V$ACTIVE_SESSION_HISTORY
View ini menunjukkan aktifitas session database aktif, tersampel setiap detik.
V$SYSSTAT
Hal ini terdiri statistic keseluruhan untuk banyak bagian yang berbeda dari
Oracle, termasuk rollback, logical dan physical I/O, dan parse data. Data dari
V$SYSSTAT digunakan untuk menghitung rasio, seperti buffer cache hit ratio.
V$FILESTAT
Hal ini terdiri file detail I/O statistik untuk tiap file, termasuk jumlah dari I/O
untuk tiap file dan rataan waktu baca.
V$ROLLSTAT
Hal ini terdiri rollback detail dan undo segment statistic untuk tiap segment.
V$ENQUEUE_STAT
Hal ini terdiri enqueue statistics detail untuk tiap enqueue, termasuk jumlah
waktu suatu enqueue diminta dan jumla waktu suatu enqueue ditunggu, dan
waktu tunggu.
Tuning 213
Politeknik Telkom Database Management System
V$LATCH
Hal ini terdiri pemakaian latch statistic detail untuk tiap latch, termasuk
jumlah waktu tiap latch diminta dan jumlah waktu latch ditunggu
e. Segment-Level Statistik
Kita dapat mengumpulkan segment-level statistic untuk membantu
memusatkan masalah performansi yang diasosiasikan dengan segment
individual. Mengoleksi dan melihat segment-level statistic merupakan cara
yang baik untuk identifikasi efektifitas table atau indeks pada suatu instance.
Setelah melihat event tunggu dan statistic system untuk mengidentifikasi
masalah performansi, kita dapat menggunakan segment-level statistics untuk
menemukan spesifik tabel atau indeks yang menyebabkan masalah. Kita dapat
menyeleksi segment tertinggi dari V$SEGMENT_STATISTICS yang
menyebabkan buffer tunggu sibuk. Lalu kita dapat fokus pada usaha kita pada
mengeliminasi masalah pada segment tersebut.
Kita dapat melakukan queri statistic segment-level melalui performansi
dinamis view berikut:
V$SEGSTAT_NAME View ini terdaftar segment statistik terkoleksi,
sebaik property dari tiap statistik (untuk instansiasi, jika ini suatu
statistic yang sederhana).
V$SEGSTAT ini sangat efisien, real-time monitoring view yang
memperlihatkan nilai statistik, nama statistik, dan informasi dasar
lainnya.
V$SEGMENT_STATISTICS ini user-friendly view dari nilai statistik.
Ada kalanya untuk semua kolom dari V$SEGSTAT, mempunyai
informasi tentang hal sepewrti itu sebagai pemilik segment dan nama
table space. Hal ini membuat statistic mudah dimengerti, tapi lebih
mahal.
Memeriksa Muatan
Biasanya, event wait merupakan data pertama yang diperiksa. Akan tetapi, jika
memiliki laporan dasar, maka periksa untuk mengetahui apakah muatan telah
berubah. Tanpa memperhatikan apakah ada dasar atau tidak, hal tersebut
berguna untuk mengetahui apakah tingkat penggunaan sumber daya tinggi.
Mengubah Muatan
Statistik profile muatan dalam beberapa detik menunjukkan perubahan dalam
keluaran (yaitu, instance melakukan lebih pekerjaan setiap detik). Statistik
melalui transaksi mengidentifikasi perubahan dalam karakteristik aplikasi
dengan membandingkan hal ini dengan koresponden statistik dari laporan
dasar.
Tuning 215
Politeknik Telkom Database Management System
Note:
Tidak semua gejala dapat dibuktikan dengan event tunggu.
Tuning 217
Politeknik Telkom Database Management System
Avg
Total Wait wait Waits
Event Waits Timeouts Time (s) (ms) /txn
--------------------------- --------- --------- ---------- ------ ---------
log file parallel write 2,181 0 28 13 41.2
SQL*Net more data from clie 516,611 0 27 0 9,747.4
db file parallel write 13,383 0 13 1 252.5
218
Politeknik Telkom Database Management System Practice
Read Consistency
Sistem Anda mungkin membutuhkan waktu roll back yang besar untuk
mengubah menjadi suatu blok-blok data untuk memantain bentuk yang
konsisten. Berikut contoh scenario-skenario yang ada :
220
Politeknik Telkom Database Management System Practice
Jika ada banyak transaksi yang kecil dan sebuah query aktif long-
running sedang berjalan pada sebuah table yang sama dimana
perubahan terjadi, maka query mungkin perlu untuk me-roll back
perubahan itu, supaya tercipta read-consistency terhadap suatu
tabel. Bandingkan V$SYSSTAT statistics berikut untuk memeriksa
apakah hal berikut terjadi :
Ke konsistenan perubahan statistik mengindikasikan waktu
dari sebuah blok database memiliki rollback entries yang
menunjukkan sebuah pembacaan suatu blok data yang
konsisten. Proses yang menghasilkan perubahan
kekonsistenan yang besar dapat membutuhkan resources
yang besar juga.
Kekonsistenan yang memiliki statistic menghitung
banyaknya proses baca secara logis dalam consistent mode.
Jika ada segment roll-back yang besar, maka system membutuhkan
waktu roll-back sebuah tabel transaksi yang banyak, selama delay
block cleanout untuk mendapatkan blok yang memiliki SCN dari suatu
transaksi yang sudah commit. Ketika Oracle meng-commit sebuah
transaksi, semua blok yang sudah berubah tidak perlu diupdate lagi
dengan commit SCN. Dalam kasus ini, hal tersebut dilakukan pada
saat yang diinginkan ketika blok data dibaca atau diupdate. Hal inilah
yang disebut delayed block cleanout.
Angka rasio dari V$SYSSTAT statistics seharusnya mendekati angka
1 : ratio
= transaction tables consistent reads - undo records applied /
transaction tables consistent read rollbacks
222
Politeknik Telkom Database Management System Practice
Note:
PCTUSED bukan kebalikan dari PCTFREE.
Parse-Related Statistics
Semakin banyak aplikasi parses, semakin berpotensi untuk contention exist,
dan system semakin lama untuk menunggu. Jika parse time CPU menunjukkan
persentase waktu CPU besar, maka waktu lebih banyak digunakan untuk
parsing dibandingkan eksekusi statement.Jka kasus ini terjadi, maka aplikasi ini
sepertinya menggunakan literal SQL dan juga SQL tidak dapat di-share, atau
share-pool tidak perlu disetting.
Ada sebuah angka statistic yang tersedia untuk mengidentifikasi jumlah waktu
yang dibutuhkan Oracle untuk parsing. Query parse berkaitan dengan statistic
dari V$SYSSTAT. Contohnya :
SELECT NAME, VALUE
FROM V$SYSSTAT
WHERE NAME IN ( 'parse time cpu', 'parse time elapsed',
'parse count (hard)', 'CPU used by this session' );
SQL Tuning
Tujuan
Tujuan dari tuning sistem adalah untuk mengurangi waktu respon sistem
terhadap end user, atau untuk mengurangi resource yang digunakan untuk
memproses pekerjaan yang sama. Kita dapat memenuhi kedua tujuan ini
dalam beberapa cara:
1. Jika suatu query yang biasa dieksekusi perlu untuk mengakses suatu
persentase kecil dari data dalam tabel, maka query tersebut dapat
dieksekusi dengan lebih efisien dengan menggunakan indeks. Dengan
membuat indeks, kita dapat mengurangi jumlah pemakaian resource.
224
Politeknik Telkom Database Management System Practice
2. Jika seorang user mencari dua puluh baris pertama dari 10000 baris
yang diberikan oleh perintah pengurutan yang spesifik, dan jika query
(dan perintah pengurutan) dapat dipenuhi oleh indeks, maka user
tidak perlu untuk mengakses dan mengurutkan 10000 baris untuk
melihat dua puluh baris.
Tuning 225
Politeknik Telkom Database Management System
1. Tentukan periode mana pada hari anda akan menguji; biasanya pada saat-
saat dimana aplikasi berada pada proses puncak.
2. Mendapatkan statistika system operasi dan Oracle pada awal dan akhir
periode. Minimum statistika Oracle yang didapatkan sebaiknya file I/O
(V$FILESTAT), statistika system (V$SYSTAT), dan statistika SQL
226
Politeknik Telkom Database Management System Practice
Misal :
SELECT *
FROM V$FILESTAT;
Tuning 227
Politeknik Telkom Database Management System
Note:
228
Politeknik Telkom Database Management System Practice
ADDM
Automatic Database Diagnostic Monitor (ADDM) menganalisa informasi yang
dikumpulkan oleh AWR tentang masalah-masalah performansi yang mungkin
terjadi dengan Oracle database, termasuk high-load SQL statement.
Tuning 229
Politeknik Telkom Database Management System
Catatan:
Petunjuk yang dijelaskan pada bab ini berdasarkan produksi SQL yang
akan sering dieksekusi. Kebanyakan teknik yang jarang digunakan di
sini dapat digunakan dengan sah pada statement khusus atau aplikasi-
aplikasi yang jarang berjalan di mana performansi tidaklah kritis.
230
Politeknik Telkom Database Management System Practice
Sebuah scan tabel secara penuh tidak berarti tidak efisien. Hal tersebut
mungkin efisien untuk melakukan scan tabel penuh pada tabel kecil, atau
untuk melakukan scan tabel penuh untuk membuat metode join yang lebih
baik (misalnya, hash join) untuk sejumlah baris yang dikembalikan.
Jika ada dari kondisi-kondisi ini yang tidak optimal, maka pertimbangkan untuk
merestrukturisasi SQL statement atau indeks-indeks yang tersedia pada tabel.
Tuning 231
Politeknik Telkom Database Management System
diberikan, mungkin Anda akan dapat dengan cepat dan mudah menulis sebuah
statement baru yang memenuhi kebutuhan.
Jangan menggunakan fungsi SQL pada klausa predikat atau klausa WHERE.
Ekspresi-ekspresi yang menggunakan kolom, seperti fungsi menyatakan kolom
tersebut sebagai argumen, menyebabkan optimizer mengabaikan kemungkinan
menggunakan sebuah indeks pada kolom tersebut, bahkan indeks yang unik,
hingga terdapat fungsi yang berdasarkan indeks yang dapat terdefinisi yang
dapat digunakan.
232
Politeknik Telkom Database Management System Practice
Ekspresi ini mencegah optimizer dari menandai kardinalitas valid atau estimasi
selektif dan dapat mempengaruhi rencana dan metode join secara
keseluruhan.
Misalnya:
Juga:
Ketika Anda perlu menggunakan fungsi SQL pada filter atau predikat join,
jangan menggunakannya pada kolom di mana Anda ingin memiliki sebuah
indeks; lebih baik gunakan pada sisi berlawanan predikat, seperti pada
statement berikut:
Tuning 233
Politeknik Telkom Database Management System
TO_CHAR(numcol) = varcol
daripada:
varcol = TO_CHAR(numcol)
Catatan:
Oracle Form dan Report adalah alat pengembangan yang
hebat yang mengizinkan aplikasi logis dikodekan menggunakan
PL/SQL (trigger atau unit program). Hal ini membantu
mengurangi kompleksitas SQL dengan mengizinkan logik
kompleks diatasi dengan Form atau Report. Anda juga dapat
invoke sisi server package PL/SQL yang menjalankan beberapa
SQL statement pada sebagai ganti sebuah SQL statement yang
besar dan kompleks. Karena package adalah unit server,
terdapat beberapa isu yang mengelilingi klien hingga basis data
dan lalu lintas jaringan.
Selalu lebih baik menulis SQL statement yang terpisah untuk tugas-tugas yang
berbeda, tapi jika Anda harus menggunakan satu SQL statement, maka Anda
dapat membuat sebuah statement yang sangat kompleks menjadi kurang
kompleks dengan menggunakan operator UNION ALL.
SELECT info
FROM tables
WHERE ...
AND somecolumn BETWEEN DECODE(:loval, 'ALL',
somecolumn, :loval)
AND DECODE(:hival, 'ALL', somecolumn, :hival);
Tertulis seperti yang terlihat, basis data tidak dapat menggunakan sebuah
indeks pada kolom somecolumn, karena ekspresi melibatkan kolom yang
menggunakan kolom yang sama pada kedua sisi BETWEEN.
Hal ini bukanlah sebuah masalah jika ada beberapa pemilihan lain yang ketat
dan dapat diindekskan, Anda dapat menggunakannya untuk mengakses tabel
driving. Akan tetapi, hal ini bukanlah masalahnya. Seringkali, Anda mungkin
ingin menggunakan sebuah indeks pada kondisi seperti yang telah ditunjukkan
tapi perlu mengetahui nilai dari :loval, dan seterusnya. Dengan informasi ini,
Anda dapat menghilangkan kasus ALL, yang tidak seharusnya menggunakan
indeks.
Jika Anda ingin menggunakan indeks kapan pun nilai real diberikan untuk :loval
dan :hival (jika Anda mengharapkan jangkauan yang kecil, bahkan jangkauan di
mana :loval sama :hival), maka Anda dapat menulis ulang contoh di dalam
bentuk equivalent yang logis berikut:
Tuning 235
Politeknik Telkom Database Management System
Jika Anda menjalankan EXPLAIN PLAN pada query yang baru, maka Anda
kelihatannya akan mendapatkan rencana eksekusi yang diinginkan dan tidak
diinginkan. Akan tetapi, kondisi awal yang dievaluasi basis data untuk sebagian
UNION ALL adalah kombinasi kondisi :hival and :loval yaitu ALL. Basis data
mengevaluasi kondisi ini sebelum sebenarnya mendapatkan beberapa baris
dari rencana eksekusi untuk bagian dari query.
Ketika kondisi kembali salah untuk satu bagian dari query UNION ALL,
bagian tersebut tidak dievaluasi lebih lanjut. Hanya bagian dari rencana
eksekusi yang nilainya optimum yang diambil. Karena kondisi akhir pada :hival
and :loval dijamin tetap terpisah ekslusif, hanya satu setengah dari UNION
ALL yang dikembalikan ke baris. (ALL pada UNION ALL secara logis valid
karena eklusifitas ini. Ini membuat perencanaan dapat dijalankan tanpa
pengurutan yang mahal untuk menghilangkan baris-baris yang terduplikasi dua
setengah bagian dari query.)
Catatan:
Diskusi ini yang paling mudah untuk diaplikasikan pada
lingkungan OLTP, di mana jalur akses ke parent SQL maupun
subquery-nya dengan melalui kolom indeks dengan selektifitas
tinggi. Pada lingkungan DSS, bisa terdapat selektifitas rendah
pada parent SQL atau subquerynya, dan mungkin tidak
terdapat kolom indeks maupun join. Pada lingkungan DSS,
pertimbangkan penggunaan semijoin pada kasus EXISTS.
236
Politeknik Telkom Database Management System Practice
Catatan:
Anda harus memverifikasi ongkos optimizer dari statement
dengan angka aktual dari sumber daya yang digunakan
(BUFFER_GETS, DISK_READS, CPU_TIME from
V$SQLSTATS or V$SQLAREA). Situasi seperti data tidak
langsung (tanpa menggunakan histogram) dapat secara meluas
mempengaruhi estimasi ongkos optimizer pada sebuah
operasi.
Tuning 237
Politeknik Telkom Database Management System
Catatan:
Note 1: Ini menunjukkan baris yang berisikan EXISTS.
Note 2: Ini menunjukkan baris yang membuat subquery
suatu subquery terkolerasi.
Note 3: Ini menunjukkan baris dimana subqueries
terkorelasi terdapat highly selective predicate customer_id =
number.
SELECT /* IN example */
e.employee_id, e.first_name, e.last_name,
e.salary
FROM employees e
WHERE e.employee_id IN (SELECT o.sales_rep_id
/* Note 4 */
FROM orders o
WHERE o.customer_id =
144); /* Note 3 */
238
Politeknik Telkom Database Management System Practice
Catatan:
Note 3: Hal ini menunjukkan baris dimana subquerie terkorelasi
terdapat highly selective predicate customer_id = number
Note 4: Hal ini mengidentifikasikan bahwa suatu IN digunakan.
Subqueri tidak lagi berkorelasi, karena klausa IN menggantikan
penggabungan dalam subqueri.
Tuning 239
Politeknik Telkom Database Management System
Note:
240
Politeknik Telkom Database Management System Practice
Note:
Tuning 241
Politeknik Telkom Database Management System
Overview
Tujuan
242
Politeknik Telkom Database Management System Practice
DEFINISI
Sistem komputer sebagaimana peralatan mekanis/elektronis lainnya, juga
berpotensi mengalami kerusakan atau kegagalan operasi. Beberapa panyebab
kerusakan atau kegagalan operasi adalah:
Pada bab ini akan dibahas dua jenis operasi terhadap basis data dengan fungsi
yang berlawanan tapi memiliki ketergantungan satu sama lain.
utama berada maka proses recovery harus dilakukan secara manual dengan
terlebih dahulu diawali dengan proses penulisan kembali (Restore) dari salinan
basis data yang sudah dimiliki sebelumnya yang kemudian diikuti dengan
proses perbaikan basis data agar bisa kembali ke kondisi sebelum terjadi
kerusakan.
Operasi recovery secara manual ini mensyaratkan adanya salinan
basis data yang telah kita siapkan di media penyimpanan stabil seperti tape
atau CD-ROM. Proses penyalinan data-data ke media penyimpanan yang stabil
disebut dengan operasi backup. Operasi backup sendiri pada intinya adalah
melakukan penyalinan isi basis data utama di disk (tentu saja dilakukan ketika
basis data tersebut masih ddalam kondisi baik) ke media penyimpanan stabil
seperti tape atau disk. Hasil operasi recovery yang dilakukan secara manual
belum tentu benar-benar dapat mengembalikan basis data ke kondisi semula
sesaat sebelum kerusakan/ kehilangan basis data terjadi, karena hal itu sangat
tergantung hasil operasi backup terakhir yang dilakukan dengan terjadinya
kerusakan basis data. Semakin dekat saat operasi backup terakhir dengan
terjadinya kerusakan basis data, maka semakin tinggi pula tingkat keberhasilan
recovery untuk mengembalikan basis data ke kondisi semula.
244
Politeknik Telkom Database Management System Practice
ke disk, dan dapat berisi banyak item/ baris data. Karena digunakan untuk
menampung data, kita dapat menggunakan istilah blok data. Kita dapat
mengasumsikan bahwa tidak ada satupun item data yang menggunakan dua
atau lebih blok data.
Transaksi-transaksi yang berjalan di dalam sebuah sistem basis data
akan memasukkan data/ informasi dari disk ke dalam memori utama dan
kemudian mengeluarkan kembali data/ informasi tersebut ke dalam disk.
Operasi pemasukan (input) dan pengeluaran (output) ini dilakukan dalam
satuan-satuan blok data. Blok-blok data yang bersifat permanen yang ada di
dalam disk biasanya disebut dengan blok fisik (physical blocks), sementara
blok-blok data yang berada di dalam memori utama dan bersifat temporer
disebut dengan blok buffer(buffer blocks).
Perpindahan blok data dari/ke memori ke/dari disk dilakukan dengan
menggunakan dua buah operasi dasar berikut ini:
1. input (A), yang akan mentransfer blok fisik di disk
dimana A berada ke memori utama.
2. output (A), yang akan mentransfer blok buffer di
memori utama dimana A berada ke disk.
246
Politeknik Telkom Database Management System Practice
Setiap transaksi Ti mamiliki area kerja khusus di dalam memori utama untuk
tempat pengelolaan salinan dari semua item data yang diakses dan diubah oleh
transaksi tersebut. Transaksi Ti berinteraksi dengan sistem basis data dalam
melakukan pentransferan daata ke dan dari area kerja ke buffer sistem dengan
menggunakan dua buah operasi berikut ini:
1. read (X), berarti memberi harga X dari basis data ke variabel lokal
di memori bernama xi. Operasi yang dikerjakan sebagai berikut:
a. jika blok dimana X berada (kita sebut dengan Bx) tidak ada
di memori utama, lakukan input(Bx).
b. Isikan harga X yang ada di blok buffer ke variabel lokal xi.
248
Politeknik Telkom Database Management System Practice
250
Politeknik Telkom Database Management System Practice
252
Politeknik Telkom Database Management System Practice
Jika terjadi kegagalan sistem, skema recovery ini memakai dua prosedur
berikut ini:
Undo(Ti), yang merekam kembali nilai semua item data yang diubah
oleh transaksi Ti ke nilai awalnya.
Redo(Ti), yang membuat semua nilai item data yang diubah oleh
transaksi Ti ke nilai barunya.
Setelah terjadi kegagalan sistem/ basis data, skema recovery ini akan melihat
isi dari file log untuk mengetahui transaksi mana saja yang akan diulangi dan
transaksi mana saja yang akan dibatalkan. Keduanya dapat diketahui dengan
menggunakan aturan sebagai berikut:
Transaksi Ti harus dikembalikan ke kondisi awalnya (undo) jika
dalam file log terdapat record < Ti start > dan tidak ada record < Ti
commit >
Transaksi Ti harus dituntaskan (redo) jika dalam file log terdapat
record < Ti start > dan record < Ti commit >
OPERASI BACKUP
Meskipun kerusakan pada isi media penyimpanan permanen (disk)
jarang terjadi tetapi kita tetap perlu waspada terhadap jenis kerusakan ini
yang sering kali terjadi tanpa kita duga sama sekali. Di sisi lain, kerusakan
bahkan kehilangan data juga bisa terjadi karena faktor eksternal misalnya
karena perusakan/penghapusan data baik di sengaja maupun tidak oleh
pemakai yang tidak memiliki otoritas, atau bisa pula terjadi karena pemakai
yang juga memiliki otoritas. Selain itu kerusakan data dapat pula terjadi karena
sistem/aplikasi eksternal misalnya virus, worm, dll. Kerusakan-kerusakan data
yang disebabkan oleh hal-hal yang telah disebutkan diatas dapat diantisipasi
dengan melakukan operasi backup secara periodik, misalnya setiap tengah
malam.
254
Politeknik Telkom Database Management System Practice
256
Politeknik Telkom Database Management System Practice
SOAL
258