DAFTAR ISI
1
1.1
1.2
1.3
1.4
1.5
1.5.1
1.5.2
1.6
2
2.1
2.1.1
2.1.2
2.1.3
2.1.4
3
3.1
3.1.1
3.2
3.3
Politeknik Telkom
5
5.1
5.1.1
5.1.2
6
6.1
6.1.1
6.1.2
6.1.3
6.1.4
6.2
6.2.1
6.2.2
6.3
6.3.1
6.3.2
6.3.3
6.3.4
7
7.1
7.1.1
7.1.2
7.1.3
7.2
7.2.1
7.2.2
7.2.3
8
8.1
8.2
8.3
8.4
ii
Politeknik Telkom
Politeknik Telkom
11.3
11.4
11.5
12
13
iv
Politeknik Telkom
Overview
Tujuan
1.
Politeknik Telkom
1.1
Pendahuluan
Politeknik Telkom
1.2
Sebelum masa DBMS dimulai, data disimpan dalam bentuk file. file
adalah sebutan untuk sekumpulan byte. File bisa berisi sederetan karakter
atau kode ASCII yang membentuk sebuah dokumen, atau bisa juga berupa
rangkaian instruksi untuk software aplikasi untuk dijalankan oleh
komputer.Misalnya data akademik, supaya informasinya tetap berada di
komputer maka data disimpan dalam bentuk file. Supaya pengguna dapat
melakukan perubahan data, maka dibuat program aplikasi mengikuti
kebutuhan masing-masing divisi. Setiap aplikadi memiliki file-file pada system
operasi yang digunakan untuk menyimpan data. Sehingga kemungkinan
terdapat data yang sama pada divisi yang berbeda. Data ini tiap tahun akan
bertambah mengikuti bertambahnya jumlah mahasiswa yang masuk pada
setiap ajaran baru. Kebutuhan akan fasilitas program aplikasi akan semakin
bertambah.
File-processing system menyimpan record dalam berbagai file dan
membutuhkan aplikasi yang berbeda untuk mengubah atau menambah record
kedalam file.
a.
b.
c.
d.
e.
f.
g.
Politeknik Telkom
1.3
Keunggulan DBMS
Keuntungan menggunakan DBMS untuk pengaturan data, yaitu:
a. Data berdiri sendiri (Data Independence): program aplikasi dan
data terpisah. Jadi jika terjadi perubahan aplikasi atau
penggunaan bahasa pemrograman yang berbeda, data tidak perlu
diubah.
b. Pengaksesan data yang efisien (Efficient data access): DBMS
menggunakan teknik penyimpanan dan pengambilan data dari
tempat penyimpanan data secara efisien. Kelebihan ini penting
karena biasanya data disimpan pada tempat penyimpanan
eksternal.
c. Integritas data dan keamanan terjamin (Data integrity and
security)
d. Administrasi data (Data administration): data dapat digunakan
oleh beberapa pengguna sekaligus, untuk itu pengaturan data
diperlukan untuk meminimalisasi redundancy data.
e. Dapat diakses bersamaan dan ada recovery saat terjadi
kegagalan (Concurrent access and crash recovery)
f. Mengurangi waktu pembangunan aplikasi (Reduced application
development time)
1.4
Sistem Bilangan
Politeknik Telkom
pangkat dari nilai 2 berdasarkan posisi digitnya. Digit pertama dimulai dari
kanan.
Contoh:
Bilangan binary dengan konversi ke decimal
Binary
1
10
111
Perhitungan
20 = 1
21 + 20 = 2 + 0
22 + 21 + 20 = 4 +2 + 1
Desimal
1
2
7
1.5
Penyimpana Data
1.5.1
Ada beberapa tipe media penyimpanan fisik yang umum ada dalam
sistem komputer. Berikut ini adalah media penyimpanan yang diklasifikasikan
dari kecepatan pengaksesan data, harga per unit data dan reliability.
Dasar Penyimpanan Data
Politeknik Telkom
1.
2.
3.
4.
5.
Cache
- Memori paling cepat dan mahal
- Tidak perlu mengatur cache pada sistem basisdata
- Diatur oleh perangkat keras sistem komputer
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)
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
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 magneticdisk
- Data dalam disk akan selamat jika power mati maupun jika ada
sistem crash
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
Politeknik Telkom
6.
Tape Storage
- Digunakan untuk back up data.
- Magnetic tape lebih murah daripada magnetic disk, tapi
pengaksesan data lebih lambat karena tape storage harus
mengakses ada secara sekuensial yaitu dari rekaman data paling
awal
- Kapasitas 40 300 GB
Politeknik Telkom
1.5.2
Magnetic-Disk
Politeknik Telkom
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.
Penghubung antara disk dengan computer antara lain ATA (AT
attachment) dan SCSI (small-computer-system interconnect; dibaca scuzzy).
ATA adalah versi terbaru dan lebih cepat dari IDE (Integrated drive
electronics). IDE adalah interface yang digunakan pada awal IBM PC.
1.6
SQL Review
SQL atau Structured query language adalah database language yang sering
digunakan. SQL memiliki beberapa bagian:
1. Data Definition language (DDL)
SQL DDL, perintah untuk create, update dan delete skema relasi.
Contoh :
Create table barang(
Kode_barang varchar(4)
constraint pk_kode_barang primary key,
Nama_barang varchar(20));
Drop table barang;
Alter table barang add ( tipe_barang varchar(20));
2.
Politeknik Telkom
3.
10
Politeknik Telkom
Rangkuman
1. Basis data adalah kumpulan data yang didefinisikan sebagai rangkaian
aktifitas dari satu organisasi atau lebih yang saling berhubungan.
4.
5.
6.
7.
8.
11
Politeknik Telkom
Soal
1.
2.
3.
4.
5.
6.
7.
12
Nim
Kode_mk
Hari
jam
ruang
30108123
IS007
Senin
08-00-10-00
201
Nim dank ode_mk sebagai foreign key
Buatlah perintah SQL untuk masukkan data sesuai dengan data di
atas!
Politeknik Telkom
Latihan
1.
2.
13
Politeknik Telkom
Daftar Pustaka
Raghu Ramakrishnan / Johannes Gehrke Database Management System
Second edition.
Silberschatz-Korth-Sudarshan: Database System Concepts, Fourth
Edition.2001
Jogiyanto, H.M, 1990, Pengenalan Komputer, Andi offset, Yogyakarta
14
Politeknik Telkom
ARSITEKTUR BASISDATA
Overview
Tujuan
1.
Arsitektur BasisData
15
Politeknik Telkom
2.1
Database structure
16
Politeknik Telkom
2.1.1
Oracle Instance
2.1.2
Memory Structures
Arsitektur BasisData
17
Politeknik Telkom
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.
Virtual Memory menduplikasi memori dengan mengkombinasikan main
memory dan secondary storage. Sistem operasi mengakses virtual memory
dengan membuat secondary storage seperti main memory jika dilihat dari
program aplikasi.
SGA
Server
Process
1
PG
A
Server
Process
2
PG
A
background
Process
PG
A
SGA
Gambar 2.2 Struktur Memory
Memory Structure dasar yang berhubungan dengan Oracle instance adalah :
- System Global Area (SGA) : di-share oleh semua server dan
background process
- Program Global area (PGA) : Private untuk masing-masing server
dan background process. Satu PGA untuk masing-masing proses.
SGA adalah memory area yang meliputi data dan control informasi untuk
instance.
18
Politeknik Telkom
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.
Parameter dalam oracle SGA_TARGET menunjukkan sisa ruang untuk SGA.
Jika SGA_TARGET diisi 0, secara otomatis shared memory management di
disable.
Arsitektur BasisData
19
Politeknik Telkom
2.1.3
Process Structure
JDBC/ODBC
User Process
Server
Process 1
PGA
SGA
Gambar 2.3 Process Structure
Process adalah mekanisme dari sistem operasi untuk menjalankan rangkaian
perintah secara simultan. Process Structure pada Oracle berfungsi untuk
mengatur aktifitas yang terjadi bersamaan dan penyelesaiannya.
Saat menjalankan program oracle seperti Enterprise Manager, oracle server
menciptakan beberapa proses yaitu :
a. server process untuk mengeksekusi perintah dari aplikasi
b. background process supaya instance dapat berinteraksi dengan
instance yang lain dan dengan sistem operasi untuk mengatur
struktur memory, mengatur I/O untuk menuliskan data pada disk
dan melakukan task yang lain tergantung dari proses yang sedang
dilakukan oleh database
Politeknik Telkom
2.1.4
Storage Structure
Arsitektur BasisData
21
Politeknik Telkom
Rangkuman
1.
2.
3.
4.
Soal
1.
2.
3.
4.
5.
6.
7.
22
Politeknik Telkom
Latihan
1.
2.
Buatlah makalah tentang instance yang ada pada minimal tiga DBMS
yang anda ketahui.
Buatlah makalah tentang maintenance instance pada Oracle
Arsitektur BasisData
23
Politeknik Telkom
Daftara pustaka
Course manual Oracle Database 10g: administration workshop I
http://www.Isbu.ac.uk/oracle/oracle7/server/doc/SCN73/ch9.html
24
Politeknik Telkom
Database Administration
Basic Administration
Overview
25
Politeknik Telkom
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
1.
2.
3.
4.
3.1
26
Politeknik Telkom
3.1.1
27
Politeknik Telkom
3.1.2
28
Politeknik Telkom
2.
Untuk linux/unix
Arahkan direktori ke lokasi oracle database diinstall /
ORACLE_HOME, pilih direktori bin, kemudian ketik
$ ./emctl start dbconsole.
29
Politeknik Telkom
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
b.
c.
d.
e.
f.
g.
h.
i.
j.
Host CPU
Pada Host CPU diperlihatkan status yang menunjukkan seberapa
besar CPU percentage yang dipakai oleh database tersebut
ataupun proses lain pada server.
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 )
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 )
Diagnostic Summary
Diagnostic summary memperlihatkan jenis dan jumlah error
pada database atau policy database/server.
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.
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.
Alert
Alert menunjukkan pesan / status yang lebih detail mengenai
error/warning yang ada pada database, sehingga lebih mudah
dilihat oleh user
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.
Job Activity
Job Activity menunjukkan job apa saja yang kita lakukan
terhadap database , dan kondisi job tersebut
31
Politeknik Telkom
2.
Halaman Performance
32
Politeknik Telkom
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.
33
Politeknik Telkom
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
4.
Halaman Maintenance
35
Politeknik Telkom
3.2
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
c.
d.
e.
3.3
2.
3.
37
Politeknik Telkom
4.
5.
6.
7.
3.4
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
User Account
Description
DBSNMP
Open
SYS
Open
Open
SYSMAN
SYSTEM
Password is
created at
installation or
database
creation time.
Password is
created at
installation or
database
creation time.
39
Politeknik Telkom
Rangkuman
40
Politeknik Telkom
41
Politeknik Telkom
Pilihan Ganda
4.
A.
B.
C.
5.
A.
B.
C.
6
A.
B.
C.
1.
A.
B.
C.
2.
A.
B.
C.
3.
A.
B.
C.
42
Politeknik Telkom
A
B
C
8
A
B
C
43
Politeknik Telkom
Latihan
1.
2.
3.
4.
5.
44
Politeknik Telkom
Konsep Prosedural
Overview
Tujuan
45
Politeknik Telkom
4.1
Aplikasi
SQL
Aplikasi
RPC
46
Aplikasi
Politeknik Telkom
4.2
4.2.1
Prosedur
Konsep Prosedural
47
Politeknik Telkom
Contoh
/*Prosedur pengecekan stok lemari es*/
CREATE OR REPLACE PROCEDURE prc_stok_brg IS
v_stok
INTEGER;
BEGIN
-- Mengambil nilai stok dari barang lemari es
-- (nilai stok adalah bilangan positif)
SELECT stok_barang INTO v_stok FROM barang
WHERE UPPER(nama_barang) = UPPER(lemari es);
--Memeriksa nilai dari variabel v_stok
IF v_stok = 0 THEN
--Jika v_stok = 0, cetak keterangan ke layar
DBMS_OUTPUT.PUT_LINE(Persediaan barang telah
habis);
END IF;
END;
4.2.2
Fungsi
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;
48
Politeknik Telkom
Contoh
/*Fungsi pencarian nama supplier*/
CREATE OR REPLACE FUNCTION cari_supp
(pi_kode VARCHAR2)
RETURN supplier.nama_supp%TYPE IS
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.
CREATE [OR REPLACE] TRIGGER nama_trigger
BEFORE|AFTER [INSERT|DELETE|UPDATE] ON nama_tabel
FOR EACH ROW
DECLARE
-- berisi deklarasi variabel
BEGIN
-- berisi statemen-statemen yang akan dieksekusi
END;
Konsep Prosedural
49
Politeknik Telkom
Deskripsi
Diaktifkan
Diaktifkan
Diaktifkan
Diaktifkan
Diaktifkan
Diaktifkan
sekali
sekali
sekali
sekali
sekali
sekali
sebelum
setelah
sebelum
setelah
sebelum
setelah
statemen
statemen
statemen
statemen
statemen
statemen
INSERT
INSERT
UPDATE
UPDATE
DELETE
DELETE
Contoh
/*Trigger yang diaktivasi setelah UPDATE*/
CREATE OR REPLACE TRIGGER trg_upd_barang
AFTER UPDATE ON barang
FOR EACH ROW
BEGIN
-- Mencetak keterangan ke layar tiap kali terjadi
-- update terhadap tabel barang
DBMS_OUTPUT.PUT_LINE(Tabel
barang
telah
diupdate);
END;
4.3
Politeknik Telkom
Convention
v_prefix
c_prefix
p_prefix
e_prefix
cur_prefix
typ_prefix
trg_prefix
Konsep Prosedural
Contoh
v_product_name
c_tax
p_cust_id
e_chk_credit_limit
cur_orders
typ_customer
trg_ins_customer
51
Politeknik Telkom
Rangkuman
1.
Aplikasi
RPC
Aplikasi
52
Politeknik Telkom
Konsep Prosedural
53
Politeknik Telkom
1.
2.
3.
4.
5.
54
Politeknik Telkom
6. execute prc_upd_bil;
Akan menghasilkan output :
Nilai bil = 5
(Tanpa memperhatikan naming convention, untuk
soal nomor 7 9 perhatikan fungsi berikut)
CREATE OR REPLACE FUNCTION put_nama
(pi_nama VARCHAR2)
RETURN VARCHAR2 IS
nama VARCHAR2(10);
BEGIN
RETURN nama;
END;
7. SET serveroutput ON;
DECLARE
coba VARCHAR2(10);
BEGIN
coba := put_nama('12345');
DBMS_OUTPUT.PUT_LINE(coba);
END;
Akan menghasilkan output :
12345
8. SET serveroutput ON;
DECLARE
coba VARCHAR2(10);
BEGIN
coba := put_nama(12345);
DBMS_OUTPUT.PUT_LINE(coba);
END;
Akan menghasilkan output :
12345
Konsep Prosedural
55
Politeknik Telkom
56
Politeknik Telkom
Pilihan Ganda
1.
A.
B.
C.
2.
A.
B.
C.
3.
A.
B.
C.
4.
A.
B.
C.
5.
A.
B.
C.
Konsep Prosedural
57
Politeknik Telkom
A
B
C
8
A
B
C
58
D.
E.
15
Error
D
E
Cursor
Type
Politeknik Telkom
(Untuk soal
berikut)
nomor
10
perhatikan
trigger
A
B
C
10
A
B
C
Konsep Prosedural
59
Politeknik Telkom
Latihan
6.
7.
nomor
perhatikan
prosedur
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
berikut)
60
nomor
perhatikan
fungsi
Politeknik Telkom
BOOLEAN;
BEGIN
-- statemen cek bilangan prima
...
-- akan mengembalikan TRUE bila merupakan
-- bilangan prima, dan FALSE bila bukan
...
END;
10. Pada statemen :
ket
BOOLEAN;
Tambahkan inisialisasi nilai variabel dengan nilai awal adalah FALSE.
11. Pada blok :
-- statemen cek bilangan prima
...
tambahkan statemen SQL untuk meng-update nilai variabel ket menjadi
TRUE bila bilangan yang dimasukkan adalah bilangan prima.
12. Mengembalikan nilai variabel ket sebagai nilai balikan fungsi cek_prima.
(Untuk soal
berikut)
nomor
10
perhatikan
trigger
61
Politeknik Telkom
62
Politeknik Telkom
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
1.
2.
3.
63
Politeknik Telkom
5.1
Struktur Percabangan
TRUE
FALSE
5.1.1
Statemen IF
Politeknik Telkom
barang
telah
65
Politeknik Telkom
Politeknik Telkom
barang
telah
barang
masih
A;
B;
N;
lain;]
67
Politeknik Telkom
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
/*Prosedur untuk menaikkan gaji pegawai*/
CREATE OR REPLACE PROCEDURE prc_upd_gaji
( pi_no_peg
VARCHAR2) IS
v_pct_fgaji
v_gaji_col
NUMBER(5,2);
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
n = 0.05
< 3.000.000 n = 0.08
< 2.000.000 n = 0.10
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
2.000.000 p
1.000.000 p
p < 1.000.000
q = 1.05
< 3.000.000
< 2.000.000
q = 1.15
p
q = 1.08 p
q = 1.10 p
p
69
Politeknik Telkom
5.1.2
Statemen CASE
VARCHAR2;
hari berdasar nomor urut hari
Senin
Selasa
Rabu
Kamis
Jumat
Sabtu
Politeknik Telkom
Senin
Selasa
Rabu
Kamis
Jumat
Sabtu
Minggu
terdefinisi
namaHari
Tidak
71
Politeknik Telkom
NUMBER(5,2);
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
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;
72
Politeknik Telkom
n = 0.05
< 3.000.000 n = 0.08
< 2.000.000 n = 0.10
n = 0.15
73
Politeknik Telkom
Rangkuman
74
Politeknik Telkom
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;
75
Politeknik Telkom
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.
(Untuk soal nomor 3 5, perhatikan blok PL/SQL berikut)
SET serveroutput ON;
DECLARE
nilai INT;
BEGIN
nilai := 8;
IF nilai > 0 THEN
DBMS_OUTPUT.PUT_LINE('Statemen IF 1st');
END IF;
IF nilai < 10 THEN
DBMS_OUTPUT.PUT_LINE('Statemen IF 2nd');
END IF;
END;
13. Output dari eksekusi blok PL/SQL di atas adalah :
Statemen IF 2nd
14. Bila blok dalam BEGIN END, diganti menjadi :
nilai := 8;
IF nilai > 0 THEN
DBMS_OUTPUT.PUT_LINE('Statemen IF 1st');
ELSIF nilai < 10 THEN
DBMS_OUTPUT.PUT_LINE('Statemen IF 2nd');
END IF;
Maka output dari eksekusi blok PL/SQL di atas menjadi :
Statemen IF 1st
76
Politeknik Telkom
77
Politeknik Telkom
Politeknik Telkom
Latihan
Untuk soal nomor 1 3, perhatikan table employee_tab berikut :
emp_id
mgr_id
dept_id
emp_name
Sarah
John
Michael
George
Henk
Natalie
Matt
...
emp_salary
400
400
400
400
400
800
800
...
79
Politeknik Telkom
80
Politeknik Telkom
Overview
Tujuan
1.
2.
3.
81
Politeknik Telkom
6.1
Iterasi
TRUE
6.1.1
FALSE
Simple LOOP
82
Politeknik Telkom
Contoh
/*Prosedur cetak baris*/
CREATE OR REPLACE PROCEDURE prc_ctk_baris
(n_akhir INTEGER)IS
-- Inisialisasi variabel pengecekan iterasi
n_awal
INTEGER := 1;
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;
SQL> set serveroutput on;
SQL> exec prc_ctk_baris(3);
Output :
Baris ke-1
Baris ke-2
Baris ke-3
6.1.2
Statemen FOR
83
Politeknik Telkom
Contoh - 1
/*Prosedur cetak angka secara increment*/
CREATE OR REPLACE PROCEDURE prc_cetak_inc
(n_akhir INTEGER)IS
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
/*Prosedur cetak angka secara decrement*/
CREATE OR REPLACE PROCEDURE prc_cetak_dec
(n_akhir INTEGER)IS
BEGIN
-- Pengecekan bila parameter input < 1
IF n_akhir < 1 THEN
84
Politeknik Telkom
6.1.3
Statemen WHILE
85
Politeknik Telkom
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;
SQL> set serveroutput on;
SQL> exec prc_ctk_baris(3);
Output :
Baris ke-1
Baris ke-2
Baris ke-3
6.1.4
Kedua statemen ini EXIT dan EXIT WHEN digunakan untuk keluar
dari blok iterasi tanpa melanjutkan proses yang sedang dilakukan.
EXIT WHEN kondisi;
Perintah di atas identik dengan perintah berikut :
IF kondisi THEN
EXIT;
END IF;
86
Politeknik Telkom
6.2
Cursor
6.2.1
Cursor Eksplisit
87
Politeknik Telkom
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;
-- Menangkap isi cursor
LOOP
FETCH cur_customer INTO vRec;
EXIT WHEN cur_customer%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(vRec.kode_cust||
vRec.nama_cust);
END LOOP;
||
-- Menutup cursor
CLOSE cur_customer;
END;
Terdapat empat atribut yang dapat digunakan dalam pemrosesan
cursor ini :
Atribut
%FOUND
%NOTFOUND
%ROWCOUNT
%ISOPEN
Deskripsi
Baris ditemukan
Baris tidak ditemukan
Jumlah baris yang telah
ditangkap melalui FETCH
Bernilai TRUE bila cursor
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
6.2.2
Cursor Implisit
Deskripsi
89
Politeknik Telkom
DBMS_OUTPUT.PUT_LINE(Nama customer :
||vNama);
END IF;
END;
6.3
6.3.1
Predefined Exception
90
Politeknik Telkom
Kode Error
Deskripsi
91
Politeknik Telkom
Contoh
/*Prosedur cetak data karyawan*/
CREATE OR REPLACE PROCEDURE prc_ctk_karyawan
(pi_nama VARCHAR2)IS
vc_nama
no_peg_col
gaji_col
VARCHAR2(40);
pegawai.no_peg%TYPE;
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)||%;
-- Cetak data karyawan
DBMS_OUTPUT.PUT_LINE(Nama : ||vc_nama);
DBMS_OUTPUT.PUT_LINE(NIP : ||no_peg_col);
DBMS_OUTPUT.PUT_LINE(Gaji : ||gaji_col);
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;
SQL> set serveroutput on;
SQL> exec prc_ctk_karyawan (robby);
SQL> exec prc_ctk_karyawan (ahmad);
Output :
Data tidak ditemukan
Lebih dari satu data ditemukan
92
Politeknik Telkom
6.3.2
gaji karyawan*/
PROCEDURE prc_upd_gaji
VARCHAR2,
INTEGER) IS
EXCEPTION;
BEGIN
-- Update gaji karyawan dengan NIP tertentu
UPDATE pegawai
SET gaji = pi_gaji
WHERE no_peg = pi_nopeg;
-- Cek bila data tidak ditemukan
IF SQL%NOTFOUND THEN
RAISE e_nopeg;
END IF;
COMMIT;
EXCEPTION
WHEN e_nopeg THEN
DBMS_OUTPUT.PUT_LINE (Data tidak ditemukan);
END;
93
Politeknik Telkom
6.3.3
Non-predefined Exception
Contoh
/*Prosedur input data karyawan*/
CREATE OR REPLACE PROCEDURE prc_ins_peg
(pi_nopeg
VARCHAR2,
pi_nama
VARCHAR2,
pi_pos_id
VARCHAR2,
pi_tgl_masuk DATE DEFAULT SYSDATE) IS
e_invalid_fk
EXCEPTION;
PRAGMA EXCEPTION_INIT(e_invalid_fk, -2291);
94
Politeknik Telkom
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;
SQL> set serveroutput on;
SQL> exec prc_ins_peg (PI-10001, Lia, PO-001);
SQL> exec prc_ins_peg (PI-10022, Edi, PO-022);
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.
6.3.4
Prosedur RAISE_APPLICATION_ERROR
95
Politeknik Telkom
o
o
o
nomor_error harus berada dalam rentang -20999 dan -20000. Rentang ini
sengaja disediakan untuk digunakan user.
pesan_error adalah pesan kesalahan yang ingin dimunculkan.
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
/*Prosedur update gaji karyawan dengan exception
handling pada bagian executable statemen*/
CREATE OR REPLACE PROCEDURE prc_upd_gaji
(pi_nopeg
VARCHAR2,
pi_gaji
INTEGER) IS
BEGIN
-- Update gaji karyawan dengan NIP tertentu
UPDATE pegawai
SET gaji = pi_gaji
WHERE no_peg = pi_nopeg;
-- Cek bila data tidak ditemukan
IF SQL%NOTFOUND THEN
RAISE_APPLICATION_ERROR(-20100, Data tidak
ditemukan);
END IF;
COMMIT;
END;
Contoh - 2
/*Prosedur input data karyawan*/
CREATE OR REPLACE PROCEDURE prc_ins_peg
(pi_nopeg
VARCHAR2,
pi_nama
VARCHAR2,
pi_tgl_masuk DATE DEFAULT SYSDATE) IS
96
Politeknik Telkom
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;
SQL> set serveroutput on;
SQL> exec prc_upd_gaji (PI-10001,2000000);
SQL> exec prc_ins_peg (PI-10001, Lia);
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.
97
Politeknik Telkom
Rangkuman
7.
8. Jenis-jenis iterasi :
o
98
Politeknik Telkom
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
o
o
o
99
Politeknik Telkom
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
100
Politeknik Telkom
1.
2.
Statemen EXIT dan EXIT WHEN hanya dapat digunakan pada Simple
LOOP.
(Untuk soal 3 4, perhatikan blok PL/SQL berikut)
SET serveroutput ON;
DECLARE
v_awal
INTEGER := 1;
v_akhir
INTEGER := 0;
BEGIN
LOOP
DBMS_OUTPUT.PUT_LINE('Baris ke-'||
TO_CHAR(v_awal));
v_awal := v_awal + 1;
EXIT WHEN v_awal > v_akhir;
END LOOP;
DBMS_OUTPUT.NEW_LINE;
END;
3.
4.
101
Politeknik Telkom
6.
7.
102
Politeknik Telkom
103
Politeknik Telkom
9.
104
Politeknik Telkom
Latihan
1.
2.
3.
4.
5.
Buatlah sebuah fungsi yang akan mengembalikan nilai faktorial dari sebuah
parameter input.
Rumus faktorial :
n! = n x (n-1)
Contoh :
Input = 3 Output : 6 (didapat dari : 3! = 3x2x1 = 6)
Input = 5 Output : 120 (didapat dari : 5! = 5x4x3x2x1 = 120)
(Untuk soal nomor 6 7, perhatikan table berikut)
emp_id
mgr_id
dept_id
emp_name
Sarah
John
Michael
George
Henk
Natalie
Matt
...
emp_salary
410
360
430
320
400
810
870
...
105
Politeknik Telkom
6.
7.
106
Politeknik Telkom
Overview
Tujuan
1.
2.
3.
107
Politeknik Telkom
7.1
Index
7.1.1
Membuat Index
Index dapat dibuat dengan dua cara : secara otomatis saat primary key
atau unique constraint dibuat dan secara manual menggunakan statemen
CREATE INDEX.
Politeknik Telkom
Output :
TABLE_NAME
INDEX_NAME
UNIQUENESS
STATUS
-------------- -------------- -------------- -----PEGAWAI
PK_PEGAWAI
UNIQUE
VALID
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.
Apabila sebuah kolom atau kombinasi kolom sudah di-index, akan
muncul pesan kesalahan saat dibuat index lain terhadap kolom tersebut.
Contoh
/*Membuat index terhadap tabel*/
CREATE INDEX idx_pos_gaji ON pegawai(pos_id, gaji);
SQL>
2
3
Output :
TABLE_NAME
-------------PEGAWAI
PEGAWAI
INDEX_NAME
-------------PK_PEGAWAI
IDX_POS_GAJI
UNIQUENESS
-------------UNIQUE
NONUNIQUE
STATUS
-----VALID
VALID
109
Politeknik Telkom
7.1.2
Politeknik Telkom
7.1.3
Menghapus Index
7.2
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
111
Politeknik Telkom
Contoh
/*Prosedur pengecekan stok lemari es*/
CREATE OR REPLACE PROCEDURE prc_stok_brg IS
vstok
INTEGER;
BEGIN
-- Mengambil nilai stok dari barang lemari es
-- (nilai stok adalah bilangan positif)
SELECT stok_barang INTO vstok FROM barang
WHERE UPPER(nama_barang) = UPPER(lemari es);
--Memeriksa nilai dari variabel vstok
IF vstok = 0 THEN
--Jika vstok = 0, cetak keterangan ke layar
DBMS_OUTPUT.PUT_LINE(Persediaan barang telah
habis);
END IF;
END;
Contoh
SQL> set serveroutput on;
SQL> exec prc_stok_brg;
Keterangan
- SET SERVEROUTPUT ON untuk mengaktifkan variabel SERVEROUTPUT
agar DBMS_OUTPUT.PUT_LINE dapat dieksekusi.
112
Politeknik Telkom
7.2.2
Fungsi
Fungsi adalah blok PL/SQL yang dapat mengembalikan nilai. Karena itu
perlu ditambahkan statemen RETURN untuk proses pengembalian nilai.
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;
113
Politeknik Telkom
7.2.3
Parameter
114
Politeknik Telkom
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);
--Memeriksa nilai dari variabel vstok
IF vstok = 0 THEN
--Jika vstok = 0, cetak keterangan ke layar
DBMS_OUTPUT.PUT_LINE(Persediaan barang telah
habis);
END IF;
END;
SQL> set serveroutput on;
SQL> exec prc_stok_brg (lemari es);
115
Politeknik Telkom
116
Politeknik Telkom
supplier.nama_supp%TYPE;
BEGIN
-- Mengambil nama supplier berdasar parameter
SELECT nama_supp INTO vHasil FROM supplier
WHERE UPPER(kode_supp) = UPPER(vParam);
-- Memasukkan nilai hasil ke parameter
vParam := vHasil;
END;
Contoh blok PL/SQL yang mengeksekusi prosedur di atas :
/*Blok yang mengeksekusi prosedur*/
DECLARE
vLokal
VARCHAR2 := SU-10001;
BEGIN
-- Mencetak nilai parameter input
DBMS_OUTPUT.PUT_LINE (vLokal);
-- Eksekusi prosedur
cari_supp(vLokal);
Tingkat Lanjut Konsep Prosedural
117
Politeknik Telkom
118
Politeknik Telkom
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]});
18. Manipulasi terhadap index :
Mengganti nama index
ALTER INDEX [schema.]index RENAME TO
index_baru;
Menghapus index
DROP INDEX [schema.]index;
119
Politeknik Telkom
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 inputoutput.
120
Politeknik Telkom
supplier
CREATE TABLE SUPPLIER
(
SUPP_ID
VARCHAR2(8) NOT NULL,
SUPP_NAME
VARCHAR2(50) NOT NULL,
SUPP_ADDR
VARCHAR2(120)
CONSTRAINT PK_SUPPLIER PRIMARY KEY(SUPP_ID)
);
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)
);
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),
121
Politeknik Telkom
3.
supplier
SUPP_ID
SUPP_NAME
SUPP_ADDR
SP-10001
SP-10002
SP-10003
...
CV. KARYA
PT. MAJU
CV. MURAH
...
barang
BRG_ID
BRG_NAME
BRG_STOK
BR-10001
BR-10002
BR-10003
...
Lemari pakaian
Meja belajar
Kasur
...
15
17
23
...
pasok
PAS_ID
PS-10001
PS-10002
PS-10003
PS-10004
PS-10005
...
PAS_DATE
08/07/2008
08/07/2008
08/11/2008
08/12/2008
08/12/2008
...
PAS_SUPP
122
PAS_BRG
SP-10001 BR-10001
SP-10001 BR-10002
SP-10002 BR-10003
SP-10003 BR-10002
SP-10003 BR-10003
...
...
PAS_AMT
5
7
12
3
10
...
Politeknik Telkom
4.
5.
Tgl Pasok
o
6.
: _______________
: ____________________
____________________
Nama Barang
Jumlah Pasok
Nama Barang
Jumlah Pasok
123
Politeknik Telkom
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
1.
2.
3.
124
Politeknik Telkom
8.1
Definisi Trigger
Trigger adalah blok PL/SQL yang disimpan dalam database dan dijalankan
secara implisit sebagai respon terhadap perubahan yang telah ditentukan
dalam database.
Perintah DML seperti INSERT, UPDATE, dan DELETE adalah pemicu umum
terjadinya trigger. Operasi DDL seperti ALTER dan DROP juga dapat
memicu dijalankannya trigger.
8.2
8.3
Query Optimization
125
Politeknik Telkom
8.4
SINTAKS
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
Keterangan
ketika trigger berelasi
ke event
manipulasi data pada
trigger event
trigger type
trigger body
126
ROW
trigger dieksekusi
STATEMENT
Politeknik Telkom
8.5
TIPE TRIGGER
127
Politeknik Telkom
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
dieksekusi.
:new variabel yang menyimpan nilai baru kolom setelah trigger
dieksekusi.
Untuk DELETE, hanya alias :old saja, yaitu untuk menyimpan nilai
yang akan dihapus.
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
8.6
BATASAN TRIGGER
Query Optimization
129
Politeknik Telkom
8.7
STUDI KASUS
Tabel obat
id_obat
id_pemasok
merk
berat
stok
harga
DT01
P007
Decolgen
1.15
200
4000
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
130
Politeknik Telkom
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:
Query Optimization
131
Politeknik Telkom
: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.
SQL> CREATE OR REPLACE TRIGGER aft_upd_row_obat
2 AFTER UPDATE OF id_obat ON obat
3 FOR EACH ROW
4 BEGIN
5
IF UPDATING THEN
6
UPDATE histori_harga SET id_obat =
:new.id_obat
7
WHERE id_obat = :old.id_obat;
132
Politeknik Telkom
8
9
10
END IF;
END;
/
Trigger created.
UPDATE
obat
SET
id_obat='DT02'
WHERE
id_obat='DT01';
UPDATE
obat
SET
id_obat='DT02'
WHERE
id_obat='DT01';
UPDATE
obat
SET
id_obat='DT02'
WHERE
id_obat='DT01'
*
ERROR at line 1:
ORA-02292: integrity constraint
(SCOTT.SYS_C001394) violated - child record found
Query Optimization
133
Politeknik Telkom
Berikut ini perbaikan dari trigger di atas yang tidak akan menyebabkan
pelanggaran constraint:
SQL> CREATE OR REPLACE TRIGGER aft_upd_row_obat
2 AFTER UPDATE OF id_obat ON obat
3 FOR EACH ROW
4 BEGIN
5
IF UPDATING THEN
6
UPDATE histori_harga SET id_obat =
:new.id_obat
7
WHERE id_obat = :old.id_obat;
8
UPDATE
penjualan
SET
id_obat=:new.id_obat
9
where id_obat=:old.id_obat;
10
END IF;
11 END;
12 /
Trigger created.
SQL>
UPDATE
obat
id_obat='DT01';
1 row updated.
134
SET
id_obat='DT02'
WHERE
Politeknik Telkom
8.8
Pada saat diciptakan, trigger berstatus aktif (enable). Kita dapat mengubah
status trigger dengan perintah-perintah berikut:
8.9
Menonaktifkan Trigger
Sintaks:
ALTER TRIGGER nama_trigger DISABLE | ENABLE
Keterangan:
DISABLE :
ENABLE
Contoh 10.4 :
Untuk men-disable trigger UPDATE_PEGAWAI, gunakan sintaks berikut:
ALTER TRIGGER UPDATE_PEGAWAI DISABLE
Query Optimization
135
Politeknik Telkom
Rangkuman
1.
2.
3.
Trigger dibuat pada saat yang tepat jika diperlukan yaitu untuk
membentuk sebuah aksi tertentu terhadap suatu event dan
memusatkan operasi global
4.
5.
6.
7.
Pada Row Trigger, nilai dari kolom sebelum dan sesudah perubahan
data dapat dirujuk dengan menggunakan OLD dan NEW qualifier.
136
Politeknik Telkom
Latihan
pembayaran
PK
id_pembayaran
meeting_room
PK
id_mr
pembayaran_kartu
pembayaran_tunai
tgl_pembayaran
id_reservasi
memiliki
PK
nama_mr
tarif_mr
ukuran
style
id_punya_style
kapasitas
id_mr
id_style
PK
pemesan
PK
PK
id_reservasi
nama_pemesan
alamat_pemesan
no_telp
PK
petugas
id_petugas
nama_petugas
jabatan
1.
id_fasilitas
nama_fasilitas
harga_fasilitas
jum_min_fasilitas
jum_max_fasilitas
banquet
pesan_banquet
PK
fasilitas
PK
jum_pesan_fasilitas
biaya_total_fasilitas
id_reservasi
id_fasilitas
tgl_reservasi
kegunaan
jum_org
tgl_awal
tgl_akhir
jam_awal
jam_akhir
id_pemesan
id_punya_style
id_petugas
id_pemesan
id_pesan_fasilitas
id_style
nama_style
pesan_fasilitas
reservasi
PK
PK
id_banquet
id_pesan_banquet
jum_pesan_banquet
biaya_total_banquet
id_reservasi
id_banquet
nama_banquet
jenis_banquet
harga_banquet
jum_min_banquet
jum_max_banquet
Query Optimization
137
Politeknik Telkom
138
3.
4.
5.
Politeknik Telkom
Query Optimization
Overview
Tujuan
1.
2.
3.
4.
Query Optimization
139
Politeknik Telkom
9.1
Query Optimization
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 operasioperasi yang ada.
Politeknik Telkom
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
b.
Query Optimization
141
Politeknik Telkom
2.
terbanyak dan
142
Politeknik Telkom
kemudian hitung join antara relasi temporer denga customer, simpan lagi
sebagai relasi temporer, lakukan proyeksi pada customer-name untuk
relasi temporer tersebut.
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
143
Politeknik Telkom
Ekuivalences Rules
1. Conjunctive selection operation
( E ) ( ( E ))
2.
Selection operation
3.
Projection operation
4.
5.
6.
( ( E )) ( ( E ))
1
t1 ( t 2 ( ( tn ( E )) )) t1 ( E )
7.
144
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))
Politeknik Telkom
8.
L1 L2 ( E1....... E2 ) ( L1 ( E1 )) ...... ( L2 ( E2 ))
9.
9.2
Sorting
145
Politeknik Telkom
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
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
Query Optimization
147
Politeknik Telkom
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.
9.3
Operator Relational
9.3.1 Selection ( )
Selection merupakan salah satu operator yang digunakan untuk memilih
(select) baris dari suatu relasi.
Contoh :
Sid Sname
28
Yuppy
31
Lubber
44
Guppy
58
Rusty
Rating
9
8
5
10
Tabel S2
148
Age
35.0
55.5
35.0
35.0
Politeknik Telkom
9.3.2 Projection ()
Perhatikan query dibawah ini :
SELECT DISTINCT R.sid, R.bid
FROM Reserves R
Optomizer menterjemahkan query diatas menjadi aljabar relasional sid.rid
Reserves. Secara umum, operasi proyeksi merupakan bentuk attr1.attr2 (R).
Untuk melakukan proyeksi hal yang harus dilakukan adalah:
- membuang atribut yang tidak diinginkan (misalnya, yang tidak ditentukan
pada proyeksi )
- menghilangkan tuple duplikat apapun yang dihasilkan
contoh :
A
B
C
10
1
20
1
A,C
=
30
1
(r)
40
2
149
Politeknik Telkom
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.
9.3.3 Union ()
R S menghasilkan contoh relasi yang berisi semua tuple yang terjadi dalam
contoh relasi R atau contoh relasi S (atau keduanya). R dan S haruslah union
compatible dan skema hasil identik dengan skema R. Dua contoh relasi
dikatakan union compatible jika memenuhi syarat berikut :
memiliki jumlah field yang sama
field yang berurutan, dalam urutan dari kiri ke kanan, memiliki
doamain yang sama.
Perhatikan bahwa nama field tidak digunakan dalam menentukan
kompatibilitas union. Untuk memudahkan kita asumsikan bahwa field R S
mewarisi nama dari R jika field R punya nama.
Contoh :
Sid
22
31
58
Sname
Dustin
Lubber
Rusty
Rating
7
8
10
Age
45.0
55.5
35.0
Tabel S1
Sid
28
31
44
58
Sname
Yuppy
Lubber
Guppy
Rusty
Rating
9
8
5
10
Tabel S2
150
Age
35.0
55.5
35.0
35.0
}
S1 S2
Politeknik Telkom
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 :
Sid
22
31
58
Sname
Dustin
Lubber
Rusty
Rating
7
8
10
Tabel S1
Sid
28
31
44
58
Sname
Yuppy
Lubber
Guppy
Rusty
Rating
9
8
5
10
Age
45.0
55.5
35.0
S1- S2
Age
35.0
55.5
35.0
35.0
Tabel S2
151
Politeknik Telkom
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.
b. Block nested-loop join
Algoritma ini merupakan jenis lain nested-loop join di mana masingmasing blok dari inner relation dipasangkan dengan outer relation.
Algoritma block nested-loop join :
for each block Br of r do begin
for each block Bs of s do begin
for each tuple tr in Br do begin
for each tuple ts in Bs do begin
Check if (tr,ts) satisfy the join condition
if they do, add tr ts to the result.
end
end
end
end
152
Politeknik Telkom
Query Optimization
153
Politeknik Telkom
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 alamatalamat 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
e. Hash-join
Hash join berlaku untuk equi-join dan natural join.
Query Optimization
155
Politeknik Telkom
5.
156
Politeknik Telkom
Rangkuman
1.
2.
3.
4.
5.
Query Optimization
157
Politeknik Telkom
Latihan
1.
2.
158
Politeknik Telkom
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
1.
2.
3.
Query Optimization
159
Politeknik Telkom
10.1
Jaringan
Komunikasi
Kabel yang
tidak
erkoneksi,
radiasi
Database
Aturan /
amandemen yang
tidak diotorisasi,
penduplikatan data,
pencurian data,
kehilangan data
akibat gangguan
listrik
Pengguna Akhir
Programmer /
Database
Operator
Administrator
Menggunakan hak
akses oran lain.
Membuat
Kebijakan
Melihat &
Password.
keamanan &
menutup data
prosedur
Membuat
yang tidak
diotorisasi
program yang
tidak aman
Staf tidak ditraining
Staf yang tidak ditraining.
Pemasukan data
yang dilakukan
Kebijakan
oleh yang tidak
keamanan &
berhak.
prosedur
Security
bisa memproteksi
terhadap pengrusakan
Virus dari suatu database harus
Pemogokan
staf
data
dan pemakaian data oleh pemakai yang tidak punya kewenangan.
pemerasan
160
Politeknik Telkom
Keamanan Data :
1. Otorisasi :
Query Optimization
161
Politeknik Telkom
2. Tabel View :
162
Politeknik Telkom
Penyalahgunaan Database :
1.
10.2
163
Politeknik Telkom
Politeknik Telkom
165
Politeknik Telkom
c.
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
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.
10.3
Security Manager
Query Optimization
167
Politeknik Telkom
168
Politeknik Telkom
10.4
Query Optimization
169
Politeknik Telkom
170
Politeknik Telkom
SQL>
2
3
4
User created.
Jika perintah diatas berhasil Anda lakukan berarti didalam database
Anda sudah ada user budi.
10.5
Membuat Role
171
Politeknik Telkom
10.6
Definisi Profiles
Password
aging
and
expiration:
Memungkinkan
password
172
Politeknik Telkom
10.6.1
Sintaks
Parameter
Keterangan
PROFILE
FAILED_LOGIN_ATTEMPTS
PASSWORD_LIFE_TIME
Query Optimization
Politeknik Telkom
Sebaliknya,
system hanya
memberi peringatan saja.
PASSWORD_REUSE_TIME
| PASSWORD_REUSE_TIME
PASSWORD_REUSE_MAX
: Menentukan lama hari
jeda agar pwd yang sama
dapat digunakan kembali.
PASSWORD_REUSE_MAX
: Menentukan jumlah
pwd yang diganti sebelum
pwd
yang sama dapat
digunakan kembali.
PASSWORD_LOCK_TIME
Menentukan lama hari account
user di-lock setelah gagal dalam
login.
PASSWORD_GRACE_TIME
Menentukan kelonggaran waktu
setelah pwd melewati masa
PASSWORD_LIFE_TIME.
PASSWORD_VERIFY_FUNCTION Verifikasi melalui script PL/SQL
Password
Contoh 12.1
CREATE PROFILE app_user2 LIMIT
FAILED_LOGIN_ATTEMPTS 5
PASSWORD_LIFE_TIME 60
PASSWORD_REUSE_TIME 60
PASSWORD_REUSE_MAX 5
PASSWORD_LOCK_TIME 1/24
PASSWORD_GRACE_TIME 10;
174
Politeknik Telkom
Contoh 12.2
Buat profile
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
Query Optimization
175
Politeknik Telkom
Contoh 12.3 :
selection
diatas
akan
menampilkan
semua
menampilkan
semua
selection
informasi
diatas
akan
selection
diatas
akan
menampilkan
semua
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.
10.8.1
Penggunaan Trigger
Politeknik Telkom
10.9
177
Politeknik Telkom
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.
Whole database encryption menerapkan prinsip enkripsi all-or-nothing karena
hanya ada dua pilihan bagi pengguna yaitu mengenkripsi basis data secara
keseluruhan atau tidak melakukan enkripsi sama sekali. Dengan menggunakan
column encryption, pengguna dapat memilih data mana yang perlu dienkripsi
dan mana yang tidak. Strategi ini dapat dikatakan lebih natural dari yang
pertama sebab pada umumnya tidak semua data yang disimpan dalam basis
data perlu diproteksi dengan enkripsi.
Strategi enkripsi basis data secara internal memiliki beberapa kelemahan.
Proses enkripsi dan dekripsi akan menambah beban proses yang harus
dijalankan oleh system sehingga performansi DBMS akan menurun cukup
tajam. Degradasi performansi ini akan lebih terasa jika digunakan whole
database encryption. Selanjutnya, data yang perlu diproteksi masih rawan
diserang saat berpindah dari satu sistem ke sistem lain karena di luar basis
data data tersebut berada dalam bentuk plainteks. Penanganan lebih lanjut
akan diperlukan untuk mengamankan transfer data di luar basis data.
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
10.10 Virtual
Private Databse
Query Optimization
179
Politeknik Telkom
10.10.1
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.
Virtual Private Database memfasilitasi database untuk memodifikasi query
berdasarkan security policy yang terdapat pada paket policy. Sebuah security
policy sangat berkaitan dengan tabel atau view yang dituju.
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 diquery.
180
Politeknik Telkom
Tabel
Paket
USER
Langkah 1
Langkah 2
Security
Policy
Langkah 5
Langkah 4
Where
Langkah 3
Predicate
Query Optimization
181
Politeknik Telkom
10.10.2
2.
3.
182
Politeknik Telkom
Query Optimization
183
Politeknik Telkom
184
Politeknik Telkom
2.
3.
4.
5.
Menggunakan
paket
Oracle
dbms_rls
untuk
mengimplementasikan policy function dan application context.
6.
Query Optimization
185
Politeknik Telkom
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
1.
2.
3.
186
Politeknik Telkom
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.
Di dalam DBMS, transaksi terdiri dari pernyataan DML yang membuat
perubahan konsisten pada suatu data. Misalkan, dalam kegiatan transfer dana
dari rekening A terhadap rekening B . Maka yang seharusnya terjadi adalah
proses pengurangan dana pada rekening A dan proses penambahan dana
dengan jumlah yang sama pada rekening B.
1.
2.
3.
satu
perubahan
187
Politeknik Telkom
11.2
Penjadwalan
11.3
Serializability
Politeknik Telkom
11.4
11.4.1 Lock
Terdapat dua mode-lock pada data:
Shared mode lock (dinotasikan dengan S). yaitu, apabila transaksi T1
menambahkan shared- mode lock pada data Q, maka T1 dapat membaca
tetapi tidak dapat menulis/merubah data Q.
2. Exclusive mode lock (dinotasikan dengan X).yaitu, apabila transaksi
T1 menambahkan shared- mode lock pada data Q, maka T1 dapat
membaca dan atau menulis/merubah data Q.
1.
Compatible
Incompatible
Incompatible
Incompatible
Tabel 13.1
-
189
Politeknik Telkom
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
191
Politeknik Telkom
Tabel penjadwalan 1
T1
T2
Conncurency
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)
Jika transaksi T1 dan T2 digambarkan seperti di atas dilakukan secara
berurutan, T1 terlebih dulu dieksekusi kemudian T2, ataupun T2 terlebih
dahulu dan kemudian T1, maka hasil dari T2 adalah harus selalu $300. Dari
table penjadwalan diatas, T1 dilakukan bersamaan dengan T2, maka akan
terjadi kesalahan hasil dari transaksi T2, yaitu menghasilkan nilai $250. Hal
tersebut terjadi karena T1 terlalu cepat melakukan unlock terhadap data B
yang menyebabkan data menjadi inkonsisten.
192
Politeknik Telkom
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).
Dari transaksi diatas, T3 korespondensi dengan T1 dengan waktu
unlock data ditunda dan T4 korespondensi dengan T2 dengan waktu unlock
ditunda. Dengan transaksi seperti diatas, kesalahan pada penjadwalan1 tidak
akan terjadi.
11.4.2 Deadlock
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.
Contoh:
193
Politeknik Telkom
T5
Lock X(C)
Read (C)
C:=C*1.1
Write (C)
T6
Lock X(D)
Read (D)
D:=D*1.2
Write (D)
Lock S(C)
Lock S(D)
Dari contoh diatas dapat dilihat urutan prosesnya adalah sebagai
berikut:
- T3 meminta exclusive mode-lock kepada concurrency control manager
dan T3 mendapatkan grant exclusive mode-lock terhadap data C. Maka
T3 dapat melakukan modifikasi /perubahan terhadap data C.
- T4 meminta exclusive mode-lock dan mendapatkan grant exclusive
mode-lock dari concurrency control manager terhadap data D sehingga
kemudian dapat melakukan perubahan terhadap data D.
- T4 meminta shared mode-lock terhadap data C yang pada saat itu T3
sedang memegang exclusive mode-lock terhadap data C. Maka T4 harus
menunggu T3 untuk melepaskan lock pada data C. Karena kedua mode
lock tersebut adalah incompatible.
- Tetapi pada saat itu, T3 tidak melepaskan lock nya dari data C, melainkan
meminta shared mode-lock terhadap data D yang pada saat itu T4 sedang
memegang exclusive mode lock terhadap data D. dan karena kedua
mode lock tersebut juga incompatible, maka T3 harus menunggu T4
melepaskan lock nya pada data D.
Keadaan diatas adalah keadaan yang disebut dengan deadlock. Pada
saat ini terjadi maka cara yang harus dilakukan adalah salah satu transaksi
harus rollback, sehingga transaksi yang melakukan rollback akan melepaskan
lock nya pada data.
Keadaan diatas dapat dihindari dengan cara melakukan unlock
terhadap data lebih awal, namun seperti yang sudah dijelaskan sebelumnya
194
Politeknik Telkom
bahwa hal tersebut akan mengantarkan pada keadaan data yang tidak
konsisten.
Jika dihadapkan pilihan apakah harus menghadapi deadlock atau data
yang tidak konsisten, maka lebih baik memilih keadaan deadlock yang masih
dapat dihadapi dengan cara rollback. Karena data yang tidak konsisten
solusinya tidak dapat diatasi oleh system.
Keadaan deadlock dapat dihindari. Dengan adanya locking tidak
menjamin keadaan serializability.Oleh karena itu, yang diperlukan adalah
bahwa setiap transaksi harus mengikuti serangkaian aturan yang disebut
dengan locking protocol. Aturan tersebut meliputi kapan transaksi harus
melakukan lock atau unlock pada data tertentu dan membatasi jumlah
penjadwalan yang mungkin. Salah satu locking protocol adalah two-phase
protocol.
195
Politeknik Telkom
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.
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.
Dengan aturan tersebut akan memastikan bahwa data yang sudah
ditulis oleh transaksi yang belum commit akan terus memiliki exclusive modelock sampai transaksi tersebut commit, sehingga dapat mencegah transaksi
lain untuk membaca data tersebut.
Metode lain untuk memenuhi kebutuhan serializability adalah memilih
urutan diantara transaksi-transaksi adalah dengan metode skema timestamp
ordering.
Time stamp protocol adalah suatu ketentuan yang mengatur agar
beberapa transaksi yang terjadi bersamaan tetap menjamin serializability
dengan memberikan prioritas pada setiap transaksi berdasarkan waktu yang
sudah ditentukan.
11.5
Multiple Granularity
Di dalam skema concurrency control menggunakan data item masingmasing sebagai suatu unit pada saat sinkronisasi dijalankan. Terdapat beberapa
keadaan yang menguntungkan pada saat beberapa data item dikelompokkan
dan memperlakukannya sebagai satu unit yang disinkronisasi. Contohnya, jika
satu transaksi Ti memerlukan untuk mengakses seluruh database dan locking
protocol digunakan, maka Ti harus melakukan locking setiap item dalam
basisdata. Sangat jelas bahwa, mengeksekusi lock-lock item data akan
memerlukan waktu yang relative lama. Akan lebih baik jika T i dapat
melakukan satu permintaan lock untuk melakukan lock terhadap seluruh
database.
196
Politeknik Telkom
197
Politeknik Telkom
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
5. Untuk tetap menjaga serializability dan consistency data pada saat terjadi
6.
7.
8.
9.
10.
11.
12.
13.
199
Politeknik Telkom
Soal
200
1.
2.
3.
4.
5.
6.
Pada saat keadaan darurat, solusi apakah yang bisa dilakukan oleh
administrator database untuk mengatasi masalah deadlock?
7.
Politeknik Telkom
Latihan
3.
4.
201
Politeknik Telkom
Daftar Pustaka
Hariyanto Bambang, Ir.,MT.,2004, Sistem Manajemen Basisdata,
Informatika,Bandung
Greenberg, Nancy, 2004, Oracle Database 10g: SQL Fundamentals 1,
Oracle.
Raghu Ramakrishnan / Johannes Gehrke Basisdata Management
System Second edition.
Silberschatz-Korth-Sudarshan: Basisdata System Concepts, Fourth
Edition.2001
202
Politeknik Telkom
12 TUNING
Overview
Tujuan
1.
2.
3.
Tuning
203
Politeknik Telkom
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 berbedabeda
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.
Secara umum, tuning dijalankan dengan mengidentifikasi bottleneck yang
paling signifikan dan melakukan perubahan yang tepat untuk mengurangi efek
dari bottleneck tersebut.
204
Politeknik Telkom
12.2
Instance Tuning
205
Politeknik Telkom
Politeknik Telkom
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.
Biasanya, tujuan dari tuning adalah untuk mengurangi pemakaian resource
atau untuk mengurangi waktu yang dilewati suatu operasi untuk selesai. Salah
satunya, tujuanya adalah untuk mengembangkan pemakaian efektif dari suatu
resource tertentu. Pada umumnya, masalah performansi disebabkan oleh
penggunaan berlebihan dari suatu resource tertentu. resource itu merupakan
sumber bottleneck dalam sistem.
Bentuk penyelesaian bottleneck adalah sebagai berikut:
Perubahan dalam aplikasi, atau cara aplikasi digunakan
Perubahan dalam Oracle
Perubahan dalam konfigurasi host hardware.
Seringnya, cara yang paling efektif dari menyelesaikan suatu bottleneck untuk
mengubah aplikasi.
Langkah-Langkah Instance Tuning
Di bawah ini merupakan langkah-langkah utama di dalam metode performansi
Oracle dalam melakukan instance tuning :
a. Definisikan Masalah
dapatkan data-data berikut :
1. Identifikasi objek performansi
Apakah ukuran performansi yang dapat diterima? Berapa transaksi tiap
jam, atau detik, response time memenuhi level prformansi?
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
Politeknik Telkom
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 CPUintensive jika eksekusinya melibatkan pembacaan banyak data di
cache yang bisa saja dihindari dengan SQL optimization yang lebih
baik.
c. Statistika ORACLE CPU
Data-data statistika ORACLE CPU tersedia di View V$ :
V$SYSSTAT menunjukkan semua session penggunaan
ORACLE CPU
Lakukan :
SELECT *
FROM V$SYSSTAT
Tuning
Politeknik Telkom
FROM V$RSRC_CONSUMER_GROUP
Menguji Statistik Oracle
Statistik Oracle harus diuji dan direferensi silang dengan statistik system
operasi untuk memastikan suatu diagnosa yang konsisten dari masalah.
Statistik system operasi dapat mengindikasikan suatu dasar yang baik untuk
memulai tuning. Bagaimanapun, jika tujuannya melakukan tuning pada Oracle
instance, maka lihat pada satistik untuk mengidentifikasi resource bottleneck
dari suatu perspektif Oracle sebelum mengimplementasikan aksi yang benar.
Bagian berikut mendiskusikan sumber data umum Oracle digunakan ketika
tuning.
a. Mengkonfigurasi Tingkatan dari Statistik Collection
Oracle menyediakan parameter inisialisasi STATISTICS_LEVEL, yang
mengontrol semua koleksi statistic yang penting untuk pemantauan di
database. Parameter ini memiliki tingkatan dari koleksi statistic untuk
database.
Ketergantungan pada STATISTICS_LEVEL atau statistik terkoleksi, sebagai
berikut:
BASIC: Tidak ada pemantauan atau statistic terkoleksi. Monitoring
dan banyak fungsi otomatis ditiadakan. Oracle tidak
merekomendasikan pemasangan ini karena hal ini meniadakan fungsi
penting Oracle.
TYPICAL: Hal ini nilai default dan koleksi yang menjamin untuk
semua statistic yang penting ketika menyediakan performansi
database keseluruhan yang baik. Pemasangan ini harus memuaskan
untuk hamper semua.
ALL: Semua pemantauan atau statistic terkoleksi dengan pemasangan
TYPICAL tercakup, ditambah statistic system operasi yang terwaktu
dan statistic eksekusi baris sumber.
V$STATISTICS_LEVEL
View ini memperlihatkan daftar status dari statistic atau pengontrolan
pemantauan oleh STATISTICS_LEVEL.
210
Politeknik Telkom
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.
c. View Performansi Dinamis Termasuk Statistika Event Tunggu
View performansi dinamis dapat di-queri-kan untuk statistik event tunggu:
V$ACTIVE_SESSION_HISTORY
View V$ACTIVE_SESSION_HISTORY memperlihatkan aktifitas
session database yang aktif, tersampel setiap detik.
V$SESS_TIME_MODEL dan V$SYS_TIME_MODEL
View V$SESS_TIME_MODEL dan V$SYS_TIME_MODEL mencakup
statistic model waktu, termasuk DB time yang meruapakan waktu
pemakaian total dalam pemanggilan database
Tuning
211
Politeknik Telkom
212
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.
Politeknik Telkom
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
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.
Politeknik Telkom
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.
Statistik yang berhubungan dengan muatan berguna untuk memeriksa ukuran
redo, pembacaan sesi logik, perubahan blok db, pembacaan fisik, pembacaan
fisik total bytes, penulisan fisik, penulisan fisik total bytes, parse jumlah (total),
parse jumlah (hard), dan panggilan user. Data ini diquery dari V$SYSSTAT.
Hal yang terbaik adalah menormalisasikan data ini dalam beberapa detik dan
melalui transaksi. Hal tersebut juga berguna untuk memeriksa total muatan
I/O dalam MB per detik dengan menggunakan jumlah penulisan fisik total
bytes dan penulisan fisik total bytes. Kombinasi nilai melibatkan penggunaan
I/O untuk melakukan buffer cache, melakukan transaksi (log), mengarsipkan
transaksi, dengan RMAN backup dan recovery, seperti proses background
Oracle manapun.
Di dalam laporan Automatic Workload Repository, lihat pada sesi Load
Profile. Data telah dinormalkan melalui transaksi dan dilakukan dalam
beberapa detik.
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.
Tingkat Aktifitas yang Tinggi
Periksa statistik yang dinormalisasikan dalam hitungan detik untuk
mengidentifikasikan apakah tingkat aktifitas sangat tinggi. Sangat sulit untuk
membuat rekomendasi kosong dengan nilai tinggi, karena ambang batas
berbeda untuk setiap tempat dan bergantung pada karakteristik aplikasi,
jumlah dan kecepatan CPU, sistem operasi, sistem I/O, dan rilis Oracle.
Tuning
215
Politeknik Telkom
Note:
Tidak semua gejala dapat dibuktikan dengan event tunggu.
Cara yang paling efektif untuk menggunakan event tunggu adalah
mengurutkan event dengan waktu tunggu (wait time). Ini hanya mungkin jika
TIMED_STATISTICS diset True. Jika tidak, event tunggu hanya dapat
diperingkatkan oleh jumlah berapa kali dia menunggu, yang sering kali bukan
urutan terbaik untuk merepresentasikan masalah.
216
Politeknik Telkom
2.
Tuning
217
Politeknik Telkom
Avg
3.
218
General
Area
busy Buffer
cache,
DBWR
Possible
Causes
Depends
on
buffer type. For
example, waits
for an index
block may be
Politeknik Telkom
Wait
Event
General
Area
Possible
Causes
caused by a
primary
key
that is based
on
an
ascending
sequence.
free buffer Buffer
Slow DBWR
waits
cache,
(possibly due
DBWR, I/O to I/O?)
Cache
too
small
db
file I/O, SQL Poorly
scattered
statement SQL
read
tuning
Slow
system
db
file I/O, SQL Poorly
sequential
statement SQL
read
tuning
Slow
system
enqueue
Locks
waits (waits
starting with
enq:)
Depends
type
enqueue
library
latch
library
cache,
library
pin,
library
cache Latch
waits: contention
cache
and
cache
Tuning
on Look at V$ENQUEUE_STAT.
of
219
Politeknik Telkom
Wait
Event
General
Area
Possible
Causes
lock
V$SYSSTAT
and
their
corresponding rate for each
second.
log
buffer Log buffer, Log
space
I/O
small
Slow
system
Politeknik Telkom
Tuning
Jika ada banyak transaksi yang kecil dan sebuah query aktif longrunning 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
Solusi yang direkomendasikan adalah menggunakan automatic undo
management.
Jika ada segmen rollback yang insufficient, maka ada contention
rollback segment(header atau blok). Masalah ini dapat dilihat dengan
adanya hal berikut :
Bandingkan angka dari WAITS dengan angka GETS dalam
V$ROLLSTAT; Seharusnya nilai dari WAITS lebih kecil
dibanding nilai GETS;
Periksa V$WAITSTAT untuk melihat apakah ada banyak
untuk WAITS suatu buffer dari CLASS undo header.
Solusi yang direkomendasikan adalah menggunakan automatic undo
management.
221
Politeknik Telkom
Politeknik Telkom
223
Politeknik Telkom
SQL Tuning
Bagian terpenting pada tuning performansi database system adalah Tuning
SQL statements. Adapun pada tuning SQL terdapat tiga langkah dasar :
1. Identifikasi SQL statements yang memegang andil besar pada sharing
workload aplikasi dan system resources, dengan me-review history
SQL execution yang telah lampau yang tersedia pada system.
2. Verifikasi bahwa execution plans yang diproduksi oleh query
optimizer untuk statement-statement ini berjalan dengan baik.
3. Mengimplementasi corrective actions untuk men-generate execution
plans pada peformansi SQL statement yang buruk sehingga menjadi
lebih baik.
Ketiga langkah di atas diulang sampai performansi system mencapai tingkat
kepuasan atau tidak ada lagi statement yang dapat di-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:
224
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.
Politeknik Telkom
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
Tentukan periode mana pada hari anda akan menguji; biasanya pada saatsaat 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
227
Politeknik Telkom
Note:
Sangatlah penting untuk men-generate dan me-review execution plan
untuk semua key SQL statements pada aplikasi anda. Lakukan
pembandingan
optimizer
execution
plans
untuk
sebuah
SQL
statement apakah statement tersebut tampil dengan baik pada plan
ataukah
tidak.
Dalam
mendapatkan
pembandingan,
termasuk
didalamnya informasi seperti perubahan volume data, anda dapat
sekaligus mengidentifikasi penyebab penurunan performansi.
Politeknik Telkom
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.
SQL Tuning Advisor
SQL Tuning Advisor membolehkan sebuah teknik yang cepat dan efisien
untuk mengoptimasi SQL statement tanpa memodifikasi statement apapun.
SQL Tuning Sets
Ketika SQL statement yang banyak digunakan sebagai masukan ke ADDM
atau SQL Tuning Advisor, sebuah SQL Tuning Set (STS) dibangun dan
disimpan. STS melibatkan kumpulan SQL statement bersama dengan konteks
eksekusi terasosiasinya dan statistik eksekusi dasar.
SQL Access Advisor
Untuk tambahan SQL Tuning Advisor, Oracle menyediakan SQLAccess
Advisor yang menyediakan petunjuk tentang transaksi materialized views,
indeks, and materialized view. SQLAccess Advisor membantu kita dalam
mencapai performansi yang ingin dicapai dengan merekomendasikan
himpunan proper dari materialized views, materialized view logs, and indeks
untuk beban kerja yang diberikan. Secara umum, karena jumlah transaksi
materialized views, materialized view, and indeks dan ruang yang dialokasikan
kepada mereka bertambah, maka.performansi query meningkat. SQLAccess
Advisor memperhatikan pertukaran antara penggunaan ruang dan
performansi query dan merekomendasikan konfigurasi dengan ongkos yang
paling efektif dari materialized views and indeks baru dan yang telah ada.
Untuk mengakses SQLAcccess Advisor melalui Oracle Enterprise Manager
Database Control:
Klik Advisor Central link di bawah Related Link yang terletak di
dasar halaman Database
Pada Advisor Central Page, klik SQLAccess Advisor link untuk
menganalisis sebuah sumber workload
Developing Efficient SQL Statements
Bagian ini menjelaskan cara-cara untuk meningkatkan efisiensi SQL statement:
Verifikasi Statistik Optmizer
Review Rencana Eksekusi
Tuning
229
Politeknik Telkom
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 aplikasiaplikasi yang jarang berjalan di mana performansi tidaklah kritis.
Politeknik Telkom
231
Politeknik Telkom
diberikan, mungkin Anda akan dapat dengan cepat dan mudah menulis sebuah
statement baru yang memenuhi kebutuhan.
Membuat Predikat Menggunakan AND dan =
Untuk meningkatkan efisiensi SQL, gunakan equijoin kapanpun
memungkinkan. Statement yang menggunakan equijoin pada nilai kolom yang
belum ditransformasi adalah yang termudah untuk di-tune.
Hindari Kolom yang Telah Bertransformasi pada klausa WHERE
Gunakan nilai kolom yang belum bertransformasi. Misalnya, gunakan:
WHERE a.order_no = b.order_no
daripada:
WHERE
TO_NUMBER
(SUBSTR(a.order_no,
INSTR(b.order_no, '.') - 1))
= TO_NUMBER (SUBSTR(a.order_no, INSTR(b.order_no,
'.') - 1))
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.
Hindari ekspresi-ekspresi mixed-mode, dan hati-hati terhadap tipe konversi
yang implisit. Ketika Anda ingin menggunakan sebuah indeks pada
VARCHAR2 kolom charcol, tapi klausa WHERE seperti berikut:
AND charcol = numexpr
di mana numexpr adalah sebuah ekspresi dari tipe angka (misalnya, 1,
USERENV('SESSIONID'), numcol, numcol+0,...), Oracle menerjemahkan
ekspresi tersebut ke:
AND TO_NUMBER(charcol) = numexpr
232
Politeknik Telkom
Ekspresi ini mencegah optimizer dari menandai kardinalitas valid atau estimasi
selektif dan dapat mempengaruhi rencana dan metode join secara
keseluruhan.
Tambahkan predikat yang berlawanan menggunakan teknik NVL().
Misalnya:
SELECT employee_num, full_name Name, employee_id
FROM mtl_employees_current_view
WHERE
(employee_num
=
NVL
(:b1,employee_num))
(organization_id=:1)
ORDER BY employee_num;
AND
Juga:
SELECT employee_num, full_name Name, employee_id
FROM mtl_employees_current_view
WHERE (employee_num = :b1) AND (organization_id=:1)
ORDER BY employee_num;
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
TO_CHAR(numcol) = varcol
daripada:
varcol = TO_CHAR(numcol)
Menulis SQL Statement yang Terpisah untuk Tugas-tugas yang
Spesifik
SQL bukanlah bahasa prosedural. Menggunakan satu bagian dari SQL untuk
melakukan banyak hal yang berbeda biasanya menghasilkan sebuah hasil yang
kurang optimal untuk setiap tugas. Jika Anda ingin SQL menyelesaikan hal
yang berbeda, maka tuliskan statement yang bervariasi, daripada menuliskan
satu statement untuk menyelesaikan hal-hal yang berbeda tergantung
parameter yang diberikan.
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.
Optimasi (memutuskan rencana eksekusi) mengambil alih sebelum basis data
mengetahui nilai apa yang akan digantikan menjadi query. Sebuah rencana
eksekusi tidak dapat, dan oleh karena itu, bergantung pada nilai apa itu.
Misalnya:
234
Politeknik Telkom
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:
SELECT /* change this half of UNION ALL if other
half changes */ info
FROM tables
WHERE ...
AND somecolumn BETWEEN :loval AND :hival
AND (:hival != 'ALL' AND :loval != 'ALL')
UNION ALL
SELECT /* Change this half of UNION ALL if other
half changes. */ info
FROM tables
WHERE ...
AND (:hival = 'ALL' OR :loval = 'ALL');
Tuning
235
Politeknik Telkom
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.)
Kegunaan EXISTS vs IN untuk Subqueries
Pada beberapa kasus, lebih baik menggunakan IN daripada EXISTS. Pada
umumnya, jika predikat selektif ada pada query, maka gunakan IN. Jika
predikat selektif berada query parent, maka gunakan EXISTS.
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.
Kadang-kadang, Oracle dapar menulis ulang sebuah subquery ketika
digunakan dengan sebuah klausa IN untuk mengambil keuntungan dari
pemilihan yang dispesifikasikan pada subquery. Hal ini yang paling
menguntungkan ketika filter yang paling selektif muncul pada subquery dan
terdapat indeks pada kolom join. Sebaliknya, menggunakan EXISTS
menguntungkan ketika filter yang paling selektif berada pada parent query.
Hal ini membolehkan predikat selektif pada parent query dapat diaplikasikan
sebelum menyaring baris sesuai kriteri EXISTS
236
Politeknik Telkom
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.
"Contoh 1: Penggunaan IN - Selective Filters pada Subquery" dan "Contoh 2:
Penggunaan EXISTS - Selective Predicate pada Parent" adalah dua contoh
yang mendemonstrasikan keuntungan IN dan EXISTS. Keduanya
menggunakan schema yang sama dengan karakteristik berikut:
Terdapat indeks yang unik pada field employees.employee_id.
Terdapat sebuah indeks pada field orders.customer_id.
There is an index on the employees.department_id field.
Tabel employees memiliki 27,000 baris.
Tabel orders memiliki 10,000 baris.
Schema OE dan HR, yang memiliki segmen ini, keduanya dianalisa
dengan COMPUTE.
237
Politeknik Telkom
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.
Output rencana berikut merupakan execution plan (dari V$SQL_PLAN)
untuk statement awal. Rencana ini membutuhka suatu full table scan dari
tabel employees , mengembalikan beberapa baris. Setiap baris kemudian
disaring berlawanan dengan tabel orders (melalui suatu index).
ID OPERATION
OPTIONS
OBJECT_NAME
OPT
COST
---- -------------------- --------------- ---------------------- --- ---------0 SELECT STATEMENT
CHO
1 FILTER
2
TABLE ACCESS
FULL
EMPLOYEES
ANA
155
3
TABLE ACCESS
BY INDEX ROWID ORDERS
ANA
3
4
INDEX
RANGE SCAN
ORD_CUSTOMER_IX
ANA
1
238
Politeknik Telkom
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.
Output plan berikutnya adalah rencana eksekusi (dari V$SQL_PLAN) untuk
mendahulukan statement. Pengoptomasi menulis ulang subqueri kedalam
suatu view, dimana akan bergabung melalui suatu indeks yang unik untuk
tabel employees. Hasil ini dalam rencana lebih baik yang signifikan, karena
view (dimana, subqueri) mempunyai selective predicate, hal ini mengembalian
hanya beberapa employee_ids. employee_ids ini lalu digunakan untuk
mengakses tabel employees melalui indeks yang unik.
ID OPERATION
OPTIONS
OBJECT_NAME
OPT
COST
---- -------------------- --------------- ---------------------- --- ---------0 SELECT STATEMENT
CHO
1 NESTED LOOPS
5
2
VIEW
3
3
SORT
UNIQUE
3
4
TABLE ACCESS
FULL
ORDERS
ANA
1
5
TABLE ACCESS
BY INDEX ROWID EMPLOYEES
ANA
1
6
INDEX
UNIQUE SCAN
EMP_EMP_ID_PK
ANA
Tuning
239
Politeknik Telkom
Note:
Politeknik Telkom
Note:
Tuning
241
Politeknik Telkom
Overview
Tujuan
1.
2.
3.
242
Politeknik Telkom
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.
Operasi
recovery
dimaksudkan
sebagai
upaya
DBMS
untuk
243
Politeknik Telkom
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.
JENIS-JENIS KERUSAKAN/ KEGAGALAN SISTEM BASIS DATA
Ada beberapa jenis kerusakan/ kegagalan yang dapat terjadi dalam sebuah
sistem basis data. Bisa jadi kerusakan tidak berakibat fatal, karena tidak ada
informasi/ data yang hilang, namun yang lebih sering yaitu kerusakan tesebut
dapat mengakibatkan rusak/ hilangnya informasi/ data yang kita kelola.
244
Politeknik Telkom
b.
bad sector
atau disk
245
Politeknik Telkom
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.
2.
246
Politeknik Telkom
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.
247
Politeknik Telkom
2.
Politeknik Telkom
yang
249
Politeknik Telkom
dengan
transaksi
tersebut
akan
digunakan
untuk
read(A)
A A 100000
write(A)
read(B)
B B + 100000
write(B)
250
Politeknik Telkom
read(C)
C C 200000
write(C)
Basis data
251
Politeknik Telkom
Redo (Ti), yang membuat semua nilai item data yang diubah transaksi
Ti ke nilai-nilai yang baru.
Katakanlah kegagalan sistem terjadi setelah operasi write(B) dari
transaksi T0 maka pada saat itu isi file log adalah:
< T0 start >
< T0, A, 900000 >
< T0, B, 2100000 >
Ketika sistem hidup kembali maka tidak ada operasi redo yang
dikerjakan, karena dalam file log tersebut tidak ditemukan adanya
record commit untuk transaksi yang bersangkutan. Karena itu, recordrecord log yang tidak lengkap seperti itu dapat dihapus saja.
Politeknik Telkom
informasi
dalam
file
log
akan
digunakan
untuk
Basis data
253
Politeknik Telkom
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:
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
DBMS
yang
bersangkutan.
Berdasarkan waktu pelaksanaan atau strateginya, ada dua jenis
operasi backup yang dapat kita pilih , yaitu:
1. Backup Statis, di mana backup dilakukan dengan terlebih dahulu
menonaktifkan basis data secara keseluruhan.
2. Backup Dinamis, di mana backup dilakukan tanpa penonaktifan
basis data sehingga user tetap bisa bekerja.
Backup dan Recovery
255
Politeknik Telkom
256
Politeknik Telkom
Pendeteksian kerusakan
Kerusakan saluran komunikasi dapat saja menyebabkan
situs remote backup berkesimpulan bahwa telah terjadi
kerusakan pada situs primer. Untuk menghindari problem
ini
kita
harus
menerapkan
beberapa
saluran
(link)
Pemindahan kontrol
Ketika situs primer mengalami kerusakan, situs backup akan
mengambil alih pemrosesan dan menjadi situs primer yang
baru.
257
Politeknik Telkom
SOAL
T 2:
read(B)
read(A)
temp 0.1 * A
A A - temp
read(C)
B B + temp
C C + 1
write(C)
write(A)
write(B)
T3:
read(A)
temp 0.25 *A
A A - temp
read(B)
B B + temp
write(B)
read(C)
write(A)
C C + 1
write(C)
258