Anda di halaman 1dari 262

Politeknik Telkom

Database Management System

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

DASAR PENYIMPANAN DATA ........................... 1


Pendahuluan ...................................................................... 2
File Sistem dan Sistem Basis Data .................................... 3
Keunggulan DBMS ............................................................ 4
Sistem Bilangan ................................................................. 4
Penyimpana Data .............................................................. 5
Media Penyimpanan Fisik .................................................. 5
Magnetic-Disk ................................................................... 8
SQL Review ...................................................................... 9
ARSITEKTUR BASISDATA ................................. 15
Database structure .......................................................... 16
Oracle Instance............................................................... 17
Memory Structures ........................................................ 17
Process Structure ........................................................... 20
Storage Structure ........................................................... 21
Database Administration ...................................... 25
Oracle Enterprise Manager ............................................. 26
Overview dan Konsep Oracle Enterprise Manager ....... 27
Dasar Security Database Oracle .................................... 36
Tugas Database Administrator dalam Database Security
........................................................................................ 37
3.4 User Account pada Oracle Database............................. 38
4
Konsep Prosedural ................................................. 45
4.1 Pentingnya Konsep Prosedural ....................................... 46
4.2 Program Unit : Prosedur, Fungsi, Trigger ...................... 47
4.2.1 Prosedur ......................................................................... 47
4.2.2 Fungsi .............................................................................. 48
4.2.3 Trigger ............................................................................ 49
4.3 Naming Convention yang Baik ....................................... 50
i

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

Database Management System

Lebih Lanjut Mengenai Prosedural ...................... 63


Struktur Percabangan...................................................... 64
Statemen IF ..................................................................... 64
Statemen CASE............................................................... 70
Lebih Lanjut Mengenai Prosedural ...................... 81
Iterasi .............................................................................. 82
Simple LOOP .................................................................. 82
Statemen FOR ................................................................ 83
Statemen WHILE ............................................................ 85
Statemen EXIT dan EXIT WHEN .................................. 86
Cursor ............................................................................ 87
Cursor Eksplisit .............................................................. 87
Cursor Implisit ................................................................ 89
Menambahkan Exception Handling ................................ 90
Predefined Exception...................................................... 90
User Defined Exception ................................................. 93
Non-predefined Exception ............................................. 94
Prosedur RAISE_APPLICATION_ERROR .................... 95
Tingkat Lanjut Konsep Prosedural .................... 107
Index ............................................................................. 108
Membuat Index ............................................................. 108
Mengganti Nama Index ................................................. 110
Menghapus Index .......................................................... 111
Callable Procedure & Function .................................... 111
Prosedur ....................................................................... 111
Fungsi ............................................................................ 113
Parameter ..................................................................... 114
DATABASE-TRIGGER ....................................... 124
Definisi Trigger ............................................................ 125
Fungsi dan Kelebihan ................................................... 125
Aplikasi yang dapat dilakukan oleh Trigger diantaranya
adalah :.......................................................................... 125
SINTAKS ..................................................................... 126

Politeknik Telkom

Database Management System

8.5 TIPE TRIGGER ........................................................... 127


8.6 BATASAN TRIGGER ................................................. 129
8.7 STUDI KASUS ............................................................ 130
8.8 MENGUBAH STATUS TRIGGER............................. 135
8.9 Menonaktifkan Trigger ................................................. 135
9
Query Optimization ............................................ 139
9.1 Query Optimization ...................................................... 140
9.2 Sorting .......................................................................... 145
9.3 Operator Relational ...................................................... 148
9.3.1 Selection ( ) ................................................................ 148
9.3.2 Projection ()............................................................... 149
9.3.3 Union () ..................................................................... 150
9.3.4 Set-Difference............................................................... 151
9.3.5 Algoritma Join .............................................................. 151
10 DATABASE ADMINISTRATION SECURITY. 159
10.1 Database Security Risk ................................................. 160
10.2 Maintaining Database Security..................................... 163
10.3 Security Manager.......................................................... 167
10.4 Create Database User ................................................... 169
10.5 Create Database Roles .................................................. 171
10.6 Definisi Profiles ........................................................... 172
10.6.1
Sintaks ................................................................. 173
10.7 Views ............................................................................ 175
10.8 Trigger .......................................................................... 176
10.8.1
Penggunaan Trigger............................................. 176
10.9 Database Column Encryption ....................................... 177
10.10
Virtual Private Databse .......................................... 179
10.10.1
Konsep Virtual Private Database......................... 180
10.10.2
PRINSIP KERJA VIRTUAL PRIVATE
DATABASE ................................................................. 182
11 KONKURENSI BASIS DATA ............................ 186
11.1 Transaksi ....................................................................... 187
11.2 Penjadwalan .................................................................. 188
iii

Politeknik Telkom

11.3
11.4
11.5
12
13

iv

Database Management System

Serializability ................................................................. 188


Lock Based Protocol .................................................... 189
Multiple Granularity...................................................... 196
TUNING ............................................................... 203
BACKUP DAN RECOVERY ............................... 242

Politeknik Telkom

Database Management System

1 DASAR PENYIMPANAN DATA

Overview

DBMS (Database Management System) adalah software yang dirancang untuk


melakukan pengaturan pada data yang berjumlah besar dan saling berelasi.
DBMS menyembunyikan setiap detail kompleksitas dalam penyimpanan,
pengambilan dan pemrosesan data. Namun mahasiswa perlu memahami
bagaimana data-data ini tersimpan di media penyimpanan.

Tujuan

1.

Mahasiswa memahami konsep penyimpanan data pada DBMS

Dasar Penyimpanan Data

Politeknik Telkom

1.1

Database Management System

Pendahuluan

Kebutuhan akan ketersediaan data sangat diperlukan tidak hanya bagi


perorangan tetapi juga untuk organisasi dari berbagai level. Organisasi
memerlukan data yang akurat dan tersedia setiap saat, untuk membantu
memperoleh informasi yang dibutuhkan dalam pengambilan keputusan di
setiap level organisasi. Data dalam jumlah yang besar memerlukan pengaturan
data yang efektif sehingga dapat diperoleh informasi secara cepat dan
informasi yang dihadirkan dapat relevan dengan kebutuhan pengguna saat itu.
Beranjak dari kebutuhan tersebut, dibutuhkan suatu data management
system yang kuat, fleksibel dan sanggup menangani kompleksitas data. User
memerlukan alat bantu yang menyederhanakan penganturan data dan mampu
memberikan informasi yang berguna pada waktu diperlukan.
Data adalah kumpulan kejadian yang diangkat dari suatu kenyataan
(fakta), dapat berupa angka, huruf, symbol khusus atau gabungan ketiganya.
Kapan kumpulan data dapat disebut sebagai basis data? Basis data adalah
kumpulan data yang didefinisikan sebagai rangkaian aktifitas dari satu
organisasi atau lebih yang saling berhubungan. Basis data, beberapa
diantaranya, terdiri dari entitas dan relasi. Di Politeknik Telkom terdapat
entitas mahasiswa, mata kuliah dan dosen. Relasi yang mungkin terjalin
antara entitas-entitas tersebut adalah mahasiswa memiliki nilai mata
kuliah, mahasiswa mendapatkan jadwal dari mata kuliah yang diadakan,
dan dosen menjadi wali dari mahasiswa.
Basis data yang dicontohkan di atas memiliki data yang cukup banyak.
Data mahasiswa untuk setiap angkatan, jumlah mata kuliah yang diadakan
untuk semester 1 sampai 6, dan berbagai data lain yang harus disimpan di
dalam tempat penyimpanan data (storage). Ada alat yang disediakan untuk
membantu menangani penganturan data ini. Database management system
(DBMS) adalah software yang dirancang untuk membantu dalam penganturan
kumpulan data yang berjumlah besar.
Contoh DBMS antara lain Ms.Acces (Microsoft), DB2 dan Informix
(IBM), MySQL (The MySQL AB Company), Oracle (Oracle Corporation),
PostgreSQL, dan Sybase (Sybase.Inc)

Politeknik Telkom

1.2

Database Management System

File Sistem dan Sistem Basis Data

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.

Kelemahan menggunakan file system adalah


Data redundancy dan inconsistency: terdapat duplikasi data dan
ketidakkonsistenan data karena data berada di berbagai tempat dan
masing-masing pengguna melakukan perubahan pada masing-masing
data tanpa melakukan perubahan pada file yang sama di tempat yang
berbeda.
Sulit dalam pengaksesan data: data tersebar di beberapa tempat/
divisi sehingga menyulitkan pengguna dalam pencarian data yang
berhubungan satu dengan yang lain.
Data isolation: data terpisah dalam banyak file dan ada kemungkinan
data disimpan dalam format yang berbeda mengakibatkan sulit untuk
membuat aplikasi baru untuk mendapatkan informasi yang diinginkan.
Masalah Integitas dat
Masalah Atomicity
Current access anomalies
Masalah Keamanan

Dasar Penyimpanan Data

Politeknik Telkom

1.3

Database Management System

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

Sistem basis data memudahkan pengguna untuk menampilkan data


dengan bentuk yang mudah dibaca. Namun pada kenyataannya dalam tempat
penyimpanan data, data disimpan dalam bentuk bit.
Sistem bilangan (number system) adalah suatu cara mewakili suatu
besaran dari suatu sistem fisik. Logika di komputer diwakili oleh bentuk
elemen dua keadaan (two-state elements), yaitu keadaan off (tidak ada arus)
dan keadaan on (ada arus). Sistem bilangan yang digunakan oleh computer
adakah sistem bilangan biner, namun selain itu ada sisstem bilangan octal dan
hexadecimal.
Sistem bilangan binary, bilangan basis 2, menggunakan dua angka
yaitu 0 (nol) dan 1 (satu). Nilai posisi sistem bilangan binary merupakan
4

Politeknik Telkom

Database Management System

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

Konversi bilangan decimal dengan binary


57 = . 2
57 div 2 = 28, 57 mod 2 = 1
28 div 2 = 14, 28 mod 2 = 0
14 div 2 = 7, 14 mod 2 =0
7 div 2 = 3, 7 mod 2 =1
3 div 2 = 1, 3 mod 2 = 1
57 = 111001 2

1.5

Penyimpana Data

Sistem basis data dibangun dengan tujuan menyembunyikan detail


proses yang rumit sehingga pengguna tidak harus dipusingkan dengan detail
implementasi/proses penyimpanan data itu sendiri. Basis data dapat dilihat
dalam bentuk yang sederhana seperti yang dijelaskan pada level konseptual
dan logic. Bagaimanapunn juga penting untuk memahami tentang bagaimana
data disimpan secara fisik dalam disk.

1.5.1

Media Penyimpanan Fisik

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.

Database Management System

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

Database Management System

Multiple-write : disk yang dapat ditulis berulang-ulang.


Contoh: CD-RW, DVD-RW

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

Gambar 1.1 menunjukkan hirarki media penyimpanan berdasarkan


kecepatan dan harga. Primary storage yaitu cache dan main memory
memberikan kecepatan akses data yang tinggi. Secondary storafe memiliki
kecepatan akses yang lebih rendah dari primary storage. Tertiary storage
adalah kelas penyimpana data yang paling lambat. Panah ke bawah
menunjukkan harga per bit data yang disimpan turun sedangkan panah ke atas
kecepatan aksesnya bertambah.

Gambar 1.1 Hirarki media penyimpanan

Dasar Penyimpanan Data

Politeknik Telkom

1.5.2

Database Management System

Magnetic-Disk

Gambar 1.2 Struktur Disk [RAM]


13

Magnetic-disk terdiri dari beberapa lempengan disk yang disebut


platter. Diameter platter ada yang 3.5 inci dan 5.25 inci Platter memiliki
lingkaran konsentris dari dalam keluar disebut track. Dalam satu platter
terdapat 16000 track dan terdapat 2-4 platter per disk. Kumpulan track yang
memiliki diameter yang sama disebut dengan cylinder. Masing-masing track
dibagi menjadi bagian yang lebih kecil yang disebut sector. Sektor ini
berukuran tetap biasanya berukuran 512 byte. Pada satu platter memiliki 200
400 sektor dari inner track sampai dengan outer track. Angka-angka diatas
dapat berbeda untuk setiap model disk.
Track 0 pada disk terletak pada bagian paling dalam dari disk. Pada
track ini terdapat pits atau lubang kecil. Daerah diantara pits disebut dengan
lands. Perubahan pits dan lands atau sebaliknya direpresentasikan dengan
bilangan biner 1. Jika ada perubahan, direpresentasikan dengan bilangan biner
0.
Disk controller menjadi penghubung antara sistem computer dengan
hardware pada disk. Disk controller bertugas untuk menuliskan atau
membaca data yang berada di sector dengan menggerakkan arm assembly
pada track yang tepat. Checksum dihitung dari setiap data yang dituliskan,
disimpan di sector maupun pada saat pembacaan data dari sector. Jika terjadi
kerusakan pada sector atau terjadi kesalahan pembacaan, checksum yang
8

Politeknik Telkom

Database Management System

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.

Data Manipulatin Language (DML)


DML memiliki perintah untuk insert, delete dan update tupple.
Insert into barang (kode_barang, nama_barang, tipe_barang) values
(KOMP, komputer,elektronik);

Dasar Penyimpanan Data

Politeknik Telkom

3.

10

Database Management System

Delete form barang where kode_barang = KOMP;


Update barang set tipe_barang = komputasi where kode_barang =
KOMP;
View Definition
Select * from barang;

Politeknik Telkom

Database Management System

Rangkuman
1. Basis data adalah kumpulan data yang didefinisikan sebagai rangkaian
aktifitas dari satu organisasi atau lebih yang saling berhubungan.

2. Database management system (DBMS) adalah software yang


3.

4.

5.

6.
7.

8.

dirancang untuk membantu dalam penganturan kumpulan data yang


berjumlah besar.
Keuntungan menggunakan DBMS untuk pengaturan data, yaitu: Data
Independence, Efficient data access:, Data integrity and security, Data
administration, Concurrent access and crash recovery, dan Reduced
application development time
Sistem bilangan (number system) adalah suatu cara mewakili suatu
besaran dari suatu sistem fisik. Contoh ssistem bilangan adalah
sistem bilangan binary/biner, sistem bilangan decimal, sistem bilangan
hexadecimal dan sistem bilangan octal.
Magnetic-disk terdiri dari beberapa lempengan disk yang disebut
platter. Platter memiliki lingkaran konsentris dari dalam keluar
disebut track. Masing-masing track dibagi menjadi bagian yang lebih
kecil yang disebut sector.
Track 0 pada disk terletak pada bagian paling dalam dari disk.
Track terdapat pits atau lubang kecil. Daerah diantara pits disebut
dengan lands. Perubahan pits dan lands atau sebaliknya
direpresentasikan dengan bilangan biner 1. Jika ada perubahan,
direpresentasikan dengan bilangan biner 0.
Bagian SQL terdiri dari DDL, DML dan view definition

Dasar Penyimpanan Data

11

Politeknik Telkom

Database Management System

Soal

1.
2.
3.
4.
5.
6.

Jelaskan pengertian data, basis data, DBMS dan RDBMS!


Sebutkan contoh-contoh DBMS!
Jelaskan bagaimana mekanisme pengolahan data dari saat pennguna
memasukkan data kedalah computer sampai kepada data tersimpan
pada database!
Sebutkan dan jelaskan media penyimpanan fisik!
Jelaskan mekanisme penyimpanan yang terjadi di cache dan main
memory!
Buatlah perintah SQL untuk membuat table berikut ini:
Table Mahasiswa
Nim
Nama
Alamat
Tgl_lahir
30108123
Riyanti
Jl.Sunda No.1
12 Agustus
1990
30108124
Linda
Jl.Jakarta
5 Mei 1990
No.10
Nim sebagai primary key
Table Mata_kuliah
Kode_mk
Nama_mk
IS007
Basis Data
CA008
Manajemen Bisnis
Kode_mk sebagai primary key

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

Database Management System

Latihan

1.
2.

Buatlah makalah mengenai sejarah perkembangan DBMS!


Buatlah makalah mengenai DBMS yang anda ketahui dan bandingkan
dengan DBMS yang lain!

Dasar Penyimpanan Data

13

Politeknik Telkom

Database Management System

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

Database Management System

ARSITEKTUR BASISDATA

Overview

Database memiliki komponen-komponen pembangun untuk melakukan


eksekusi pada setiap data yang diminta oleh pengguna. Database perlu untuk
mengalokasikan memory untuk menangani pemrosesan data dalam jumlah
yang besar. Proses structure melakukan operasi pengolahan yang diperlukan
sebelum data disimpan di dalam database files.

Tujuan

1.

Mahasiswa memahami tentang arsitektur database.

Arsitektur BasisData

15

Politeknik Telkom

2.1

Database Management System

Database structure

Oracle Server adalah DBMS yang menyediakan pendekatan menyeluruh dan


terbuka pada information management. Oracle server harus mampu
menagani data dalam jumlah yang besar yang diakses oleh banyak user. Oracle
server juga harus mencegah user yang tidak memiliki otoritas dan mampu
mengatasi failure. Oracle Server terdiri dari Oracle Instance dan Oracle
database.
Database Structure terdiri dari Memory Structure, Process Structure dan
Storage Structure yang berhubungan dengan Oracle Server.

Gambar 2.1 Struktur Basis Data

16

Politeknik Telkom

2.1.1

Database Management System

Oracle Instance

Oracle database selalu diasosiasikan dengan Oracle Instance. Saat database


dijalankan pada database server, oracle mengalokasikan memory yang disebut
System Global Area (SGA) dan menjalankan beberapa oracle background
process. Kombinasi dari SGA dan Oracle processes disebut dengan Oracle
Instance. Memory dan proses dari instance mengatur data dalam database
secara efisien dan dapat melayani satu atau lebih user yang menggunakan
basisdata ini.
Setelah mulai menjalankan instance, Oracle software dihubungkan dengan
database tertentu. Hal ini disebut dengan mounting database. Database siap
dibuka sehingga dapat diakses oleh authorized user. Multiple instance dapat
dieksekusi secara bersamaan pada computer yang sama.
Oracle database menggunakan memory structure dan process structure untuk
mengatur dan mengakses database. Semua memory structure ada di main
memory computer yang membangun database server.

2.1.2

Memory Structures

Memory di Oracle digunakan untuk menyimpan:


- Kode program yang akan dieksekusi
- Informasi tentang session
- Data yang akan dieksekusi
- Informasi yang di share dan dikomunikasi oleh proses yang lain.
Misalnya locking information
- Cache information
Dasar struktur memory yang berhubungan dengan oracle:
- Software code ares
- System Global Area (SGA)
- Program Global Area (PGA)
- Sort area

Arsitektur BasisData

17

Politeknik Telkom

Database Management System

Virtual Memory
Virtual Memory adalah fitur dari sistem operasi yang memberikan tempat
penyimpanan yang nyata daripada yang diberikan oleh main memory dan
memberikan keleluasaan dalam penggunaan main memory.
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.

Software Code Areas


Bagian dari memory yang digunakan untuk menyimpan kode program yang
akan dieksekusi. Perintah/kode oracle disimpan di software code areas yang
biasanya berada di tempat yang berbeda-beda sesuai dengan program dari
user. Ukuran software codes areas statis, berubah jika dilakukan installasi
ulang atau update.

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

Database Management System

SGA mencakup data struktur berikut ini:


- Database buffer cache : cache block data yang didapat dari database
- Redo log buffer : cache redo informasi (digunakan pada saat instance
recovery) hingga informasi siap dituliskan di tempat penyimpanan
fisik redo log file pada disk
- Shared pool : cache untuk berbagai macam file yang digunakan oleh
semua user
- Large pool : area opsional yang menyediakan memory yang banyak
untuk proses besar seperti operasi oracle backup dan recovery
- Java pool : digunakan untuk semua session khusus untuk java code
dan data dalam Java Virtual machine (JVM)
- Steams pool : digunakan oleh oracle steam
Pada saat menjalankan instance menggunakan Enterprise manager atau
SQL*Plus ditampilkan jumlah alokasi memori untuk SGA.

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

Database Management System

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

2.1.3.1 Single-process Oracle Instance


Biasa disebut single-user Oracle adalah database system yang dimana semua
kode oracle dieksekusi oleh satu proses. Hanya satu user dapat mengakses
oracle instance dan pada saat itu user lain tidak dapat mengakses database.
Contoh: Oracle di MS-DOS karena MS-DOS tidak dapat menangani banyak
proses sekaligus.

2.1.3.2 Multiple-process Oracle Instance


Disebut juga dengan multi-user Oracle, menggunakan beberapa proses untuk
mengeksekusi bagian yang berlainan dari Oracle. Dengan membagi tugas dari
Oracle dan aplikasi database kedalam beberapa proses, multiple-user dan
20

Politeknik Telkom

Database Management System

aplikasi yang berbeda-beda dapat mengakses ke satu database secara


bersamaan dengan performansi yang tetap bagus.
Pada multi-process ini dapat dikategorikan menjadi dua grup yaitu user
process dan oracle process.
a. User process, saat user menjalankan program aplikasi seperti oracle
Tools.
b. Oracle Process/server process, digunakan untuk mengeksekusi perintah
SQL, membaca blok data dari disk ke shared databse buffer di SGA,
mengembalikan hasil dari data yang diminta.
c. Untuk meningkatkan perforamansi dan untuk mengakomodasi banyak
user multi-process oracle menggunakan proses tambahan disebut
background process.
Background process yang sering digunakan adalah :
- system monitor (SMON) : menjalankan crash recovery jika instance
mengalami kegagalan
- Process monitor (PMON) : menjalankan process cleanup jika user
process gagal
- Database writer (DBWn): menuliskan bloks dari database buffer
cache ke data file di disk
- Log writer (LGWR) : menulis redo log ke disk
- Archiver (ARCn) : mengcopy redo log file ke archival starage saat
terjadi log switch

2.1.4

Storage Structure

File dalam database terdiri dari :


- Control files: data tentang database itu sendiri sehingga data yang
ada di database dapat diakses. Contoh: steuktur fisik basisdata.
- Data files: mencakup user dan data aplikasi
- Online Redo log files: untuk recovery database. Informasi pada file
ini dapat digunakan jika terjadi crash sehingga data yang ada di
database tidak hilang.

Arsitektur BasisData

21

Politeknik Telkom

Database Management System

Rangkuman

1.

2.
3.

4.

Database Structure terdiri dari Memory Structure, Process


Structure dan Storage Structure yang berhubungan dengan Oracle
Server.
System Global Area (SGA) adalah pengalokasian memory yang
dilakukan oleh DBMS. Kombinasi dari SGA dan Oracle processes
disebut dengan Oracle Instance.
Process Structure pada Oracle berfungsi untuk mengatur aktifitas
yang terjadi bersamaan dan penyelesaiannya.
Proses Structure terdiri dari Single-process Oracle Instance dan
Multiple-process Oracle Instance

Soal

1.
2.
3.
4.
5.
6.
7.

22

Jelaskan implementasi penggunaan instance pada Oracle!


Jelaskan pengalokasian memory SGA pada basisdata Oracle!
Sebutkan background process lain yang disediakan oleh Oracle!
Mengapa pada Oracle yang berjalan pada MS-DOS hanya dapat
melakukan single process!
Bagaimana mekanisme atau cara kerja Oracle pada saat menangani
multiple-process oracle instance!
Jelaskan cara setting virtual memory untuk membantu Oracle
menjalankan performansinya menjadi lebih baik!
Jelaskan file system storage yang ada pada Oracle

Politeknik Telkom

Database Management System

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

Database Management System

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 Management System

Database Administration
Basic Administration

Overview

Database administration merupakan kegiatan yang bertujuan untuk melakukan


pengaturan dan penjagaan terhadap database, baik dari kondisi database,
kestabilan database, performance database, maupun isi dari data.
Berdasarkan tipenya, maka database administration dapat dibagi menjadi 3
fungsi :
1. System Database Administration
Pada system database administration, kegiatan yang dilakukan lebih
fokus terhadap aspek aspek fisik dari database, seperti installasi,
konfigurasi, security, patch, upgrade, backup, restore, performance
tuning, maintenance, dan disaster recovery.
2. Development Database Administration
Development database administration, sesuai namanya lebih
memfokuskan dari segi logical dan development, atau bisa dikatakan
dari segi datanya. Beberapa kegiatannya antara lain pembuatan SQL,
maintain dan tuning SQL, pembuatan stored prosedur, trigger,
function, dan desain database.
3. Application Database Administration
Application Database Administration merupakan tipe yang paling
jarang ditemui, umumnya hanya ada di organisasi database yang besar
( Oracle, SAP, Siebel, Microsoft ). Fungsinya lebih ke memaksimalkan
database dan aplikasi yang keduanya dimiliki oleh suatu organisasi.
Contohnya pada Visual Basic dengan MSSQL Server ( Microsoft )
dan Oracle Application Server dengan Oracle Database ( Oracle ).
Database Administration - Basic Administration

25

Politeknik Telkom

Database Management System

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

Mahasisiwa memahami konsep dan penggunaan Oracle Enterprise


Manager.
Mahasiswa mengerti konsep dasar security pada oracle database
Mahasiswa mengetahui tugas database administrator dalam
membentukan dan organisasi oracle database security.
Mahasiswa memahami kegunaan user account yang ada pada oracle
database

Oracle Enterprise Manager


Pada Database Oracle, proses pengaturan database dapat dilakukan
dengan 2 cara :
1. Secara manual.
Pada pengaturan ini semua perubahan baik dari sisi database maupun
isi data dilakukan menggunakan perintah perintah sql.
2. Menggunakan aplikasi console yang telah disediakan Oracle, yaitu
Oracle Enterprise Manager.

26

Politeknik Telkom

3.1.1

Database Management System

Overview dan Konsep Oracle Enterprise Manager

Oracle Enterprise Manager merupakan aplikasi yang berfungsi untuk


melakukan aktifitas pengaturan database, seperti : konfigurasi,
monitoring, tuning, backup, restore, dan aktifitas lainnya.
Aplikasi Oracle Enterprise Manager dapat dibagi menjadi dua kategori :
1. Oracle Enterprise Manager Database Control
Pada Database Control, satu Oracle Enterprise Manager dapat
melakukan pengaturan terhadap satu database saja. Umumnya
aplikasi ini terbentuk saat kita melakukan installasi database.
2. Oracle Enterprise Manager Grid Control
Pada Grid Control, satu Oracle Enterprise Manager dapat
melakukan pengaturan terhadap beberapa database. Merupakan
product terpisah dari Oracle.
Keuntungan menggunakan Oracle Enterprise Manager :
1. Membantu memaksimalkan performance ( tuning ) dan availability (
monitoring ) baik dari sisi server maupun database.
2. Mempermudah dan mempercepat user dalam melakukan pengaturan
database
3. Mengurangi resiko human error yang dapat terjadi saat melakukan
pengaturan secara manual.
Pada Oracle Database 10g, aplikasi Oracle Enterprise Manager telah
berbasis web, sehingga lebih mudah diakses oleh user ( bisa dari mana
saja ).
Pada versi 9i

Pada versi 10g

Database Administration - Basic Administration

27

Politeknik Telkom

3.1.2

Database Management System

Penggunaan Oracle Enterprise Manager / OEM

Penggunaan OEM dapat dibagi menjadi beberapa tahap :


1.

Menyalakan Oracle Enterprise Manager Database Console


Umumnya setelah installasi database, service OEM akan menyala
secara otomatis, tetapi ada baiknya dilakukan check terlebih dahulu.
Aplikasi OEM dapat dinyalakan dari sisi server dengan memakai
perintah :
a. Untuk windows
Dari menu windows, pilih start -> control panel ->
administrative tools -> services

Service oracle selalu berawalan dengan prefix Oracle. OEM


Database Console service pada windows terdaftar dengan nama
OracleDBConsoleORACLE_SID, Oracle SID merupakan nama
database instance yang telah dibuat. Pastikan statusnya telah
started.

28

Politeknik Telkom

Database Management System

Apabila statusnya masih stopped, klik kanan pada service


Database Console, pilih start.
b.

2.

Untuk linux/unix
Arahkan direktori ke lokasi oracle database diinstall /
ORACLE_HOME, pilih direktori bin, kemudian ketik
$ ./emctl start dbconsole.

Menggunakan Oracle Enterprise Manager Database Console


Untuk menggunakan Oracle Enterprise Manager, dari web browser
client ketik http://<ip_server oracle database>:<port>/em. Default
port yang dipakai adalah 5500.
Tampilan awal dari Oracle Enterprise Manager berupa halaman login

Database Administration - Basic Administration

29

Politeknik Telkom

Database Management System

Pada halaman ini user akan diminta untuk memasukkan user


database yang memiliki akses untuk login ke dalam Enteprise
Manager, untuk user defaultnya adalah sys atau system.
Setelah login, user akan dibawa ke halaman utama Oracle Enterprise
Manager yang terdiri dari 4 bagian besar :

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.

Database Management System

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

Database Administration - Basic Administration

31

Politeknik Telkom

2.

Database Management System

Halaman Performance

Halaman performance berisi grafik yang menunjukkan kondisi


database, server, disk, instance, logon, dan kondisi lainnya.
Di halaman ini kita bisa melihat kondisi database selama rentang
waktu tertentu, dan terdapat pilihan apakah akan melihat data saat
itu juga ( real time ), atau pada waktu tertentu ( historical ).
Biasanya digunakan sebagai alat bantu dalam fungsi reporting,
monitoring, troubleshooting dan tuning.

32

Politeknik Telkom

3.

Database Management System

Halaman Administration

Halaman ini berisi fungsi administrasi dari database, dapat dibagi


menjadi dua bagian besar :

a.

Database Administration
Database administration berisi pengaturan mengenai instance
database.
- Storage
Storage mengatur semua komponen database yang
berhubungan dengan disk pada server, seperti controlfile,
tablespace, temporary tablespace group, datafile, rollback
segment, redo / archive log
- Database Configuration
Database configuration mengatur tentang parameter
parameter pada database ( spfile/pfile parameter ), memory
database ( share, db buffer, java pool, large pool ), undo
parameter ( undo retention, undo tablespace ), dan
database feature usage yang berisi list feature yang
sudah/belum dipakai oleh database tersebug
- Database Scheduler
Berisi pengaturan job/scheduler yang akan dijalankan
terhadap suatu database.
- Statistic Management
Berisi pengaturan mengenai pengambilan statistic dari
database, baik secara berkala ( AWR, gather statistic)
ataupun manual.
- Change Database
Mengatur mengenai metode penggunaan disk secara ASM (
Automatic Storage Management ) ataupun Locally Managed.

Database Administration - Basic Administration

33

Politeknik Telkom

Database Management System

Resource Manager
Berisi pengaturan besarnya Resource yang bisa/tidak bisa
oleh user / profil tertentu dan prioritas terhadap user /
profil tertentu.
Policies
Berisi pengaturan mengenai policies dari suatu database, hal
apa saja yang boleh dan tidak boleh dilakukan, apa saja yang
dianggap error, warning atau hanya status biasa saja.

a) Schema
Schema berisi pengaturan mengenai object object yang dimiliki
oleh suatu database
- Database Object
Database Object berisi pngaturan object object standard
yang dimiliki oleh suatu database, seperti table, views,
synonim, index, dll.
- Program
Program berisi pengaturan mengenai script script yang
dibuat dan dijalankan via database, seperti procedur,
function, trigger, dll.
- XML Database
XML Database mengatur mengenai penggunaan xml sebagai
database.
- Users & Previleges
User & Previleges berisi pengaturan mengenai user, roles
maupun profile. Bisa dibilang juga sebagai basic security
database.
- Materialized Views
34

Politeknik Telkom

4.

Database Management System

Materialized Views mengatur mengenai pembuatan dan


monitoring penggunaan materialized views.
BI & OLAP
BI & OLAP mengatur mengenai penggunaan database dalam
Bussiness Intelligence maupun Online Analytical Process,
seperti cube, dimension, dll
User Defined Types
User Defined Types mengatur pembuatan variable / types
sesuai kebutuhan aplikasi database

Halaman Maintenance

Halaman maintenance memberikan pengaturan mengenai


aktifitas yang dilakukan untuk memindahkan data baik ke
dalam/keluar database ( backup, restore, export, import, clone,
move tablespace, database stream ) dan proses patching
database

Database Administration - Basic Administration

35

Politeknik Telkom

3.2

Database Management System

Dasar Security Database Oracle


Security pada database oracle merupakan kegiatan / aturan yang
dilakukan untuk melindungi asset terpenting dalam database, yaitu
data.
Berdasarkan tipenya, security dalam oracle database dapat
dikategorikan menjadi beberapa jenis :
a.

Authentification
Memberikan pengaturan terhadap bagaimana cara untuk
mengakses suatu database. Authentification dibagi menjadi
beberapa bagian :
- Authentification by Operating system
Memberikan pengaturan hak akses dari sisi user Operating
System. Pada beberapa operating system, database oracle
dapat langsung diakses lewat operating system dengan
menggunakan sqlplus /.
Authentification by Network
Memberikan pembatasan hak akses dari sisi network,
misalnya menggunakan SSL, Kerberos, Public Key, dan third
party lainnya.
Authentification by Database
Membatasi hak akses dari sisi database, yaitu dengan user
password database
Authentification by Multitier system
Membatasi hak akses dari sisi system lain, misal hanya bisa
akses ke database dari server tertentu saja.
Authentification by Database Administrator
Membatasi hak akses dari sisi user user database yang
memiliki role tertentu saja, misal SYSDBA dan SYSOPR
b. Authorization
Authorization merupakan kegiatan untuk melakukan pembatasan
terhadap user apa saja yang bisa mengakses database, dan
memberikan pengaturan resource dan hak yang dimiliki user
tersebut. Authorization dibagi menjadi :
Previleges
Merupakan hak yang dimiliki oleh user untuk menjalankan
perintah SQL atau akses ke object milik user lain.
36

Politeknik Telkom

Database Management System

Contoh :create table, create session, alter table.


Roles
Roles merupakan kumpulan dari beberapa previleges.
Contoh : DBA, RESOURCE, EXP_FULL_DATABASE
Resource Limit
Resource Limit merupakan kegiatan yang bertujuan
membatasi suatu user dari penggunaan resource.
Contoh : Tablespace Quota, logical read per session.
Profiles
Profiles merupakan kumpulan dari gabungan roles, resource
limit, dan previleges.
Contoh : Monitoring Profile, Default.
Access
Access merupakan pembatasan database dari sisi object,
sehingga suatu object tidak dapat diubah oleh user yang tidak
berhak. Contohnya : membuat view sehingga user tidak langsung
mengakses ke tabel aslinya dan menggunakan FGA ( Fine
Grained Auditing )
Security Policies
Policies merupakan gabungan dari aturan aturan ( password
complexity, quota, access, dll )
Database Auditing
Auditing merupakan sebuah kegiatan yang melakukan penulisan
/ log terhadap aktifitas yang di lakukan pada database.
-

c.

d.
e.

3.3

Tugas Database Administrator dalam Database


Security
Seorang database administrator memiliki beberapa tugas dasar dalam
melakukan organisasi security database, antara lain :
1.

2.

3.

Memastikan bahwa instalasi dan konfigurasi database telah


dilakukan secara aman ( menambahkan beberapa system
parameter pada oracle yang behubungan dengan keamanan
database ).
Melakukan pengaturan terhadap user account, membuat
standarisasi password, membuat dan membagi roles,
memastikan bahwa data hanya bisa diakses oleh user yang
memiliki hak akses.
Menjaga agar koneksi network pada database tetap aman

Database Administration - Basic Administration

37

Politeknik Telkom

4.
5.
6.
7.

3.4

Database Management System

Melakukan enkripsi terhadap data data yang sensitif


Memastikan bahwa database tidak memiliki celah yang dapat
ditembus pihak luar.
Memutuskan bagian mana dari suatu database yang akan diaudit
dan seberapa dalam audit itu dilakukan
Melakukan installasi patches database yang berhubungan dengan
security.

User Account pada Oracle Database


Untuk melakukan akses ke dalam database oracle, maka dibutuhkan
user account yang memiliki hak terhadap schema tertentu.
User account dalam oracle dapat diidentifikasi berdasarkan nama dan
atribut user yang bersangkutan, seperti :
-

Metode Authentifikasi ( password / OS autentifikasi )


Password ( encrypted / normal )
Quota Tablespace dan Temporary Tablespace
Status account ( lock / unlock )
Status password ( expire / not expire )

Selain atribut diatas, pada saat dilakukan pembuatan user juga harus
ditambahkan akses terhadap system previlieges, object previliges dan
role untuk user tersebut.
Sebaiknya sebuah user account dibuat sesuai dengan pekerjaan yang
akan dilakukan oleh user tersebut, contohnya : user yang mengakses
database untuk fungsi reporting hanya diberi hak untuk select ke table.

38

Politeknik Telkom

Database Management System

Dalam oracle database terdapat user user default yang memang


otomatis terbentuk saat installasi database, antara lain :
Status After
Installation

User Account

Description

DBSNMP

User yang digunakan untuk


melakukan proses monitoring
dalam Oracle Enterprise Manager

Open

SYS

User tertinggi dalam oracle


database, digunakan sebagai
administrator pada database,
menyalakan / mematikan database.

Open

User yang gunakan pada Oracle


Enterprise Manager untuk
melakukan fungsi fungsi
administrasi

Open

SYSMAN

SYSTEM

Password is
created at
installation or
database
creation time.

Password is
created at
installation or
database
creation time.

User administrator dalam database Open


Oracle, tetapi haknya masih
dibawah sys
Password is
created at
installation or
database
creation time.

Database Administration - Basic Administration

39

Politeknik Telkom

Database Management System

Rangkuman

1. Database Administration merupakan kegiatan yang bertujuan untuk


melakukan pengaturan dan penjagaan terhadap database
2. Database Administration dibagi menjadi tiga jenis, system, aplication dan
development database administration.
3. Basic Administration merupakan kegiatan yang berhubungan dengan
system database administration
4. Pada oracle database terdapat alat bantu dari oracle untuk melakukan
pengaturan database , yaitu Oracle Enterprise Manager
5. Oracle Enterprise Manager dibagi menjadi dua, Database Control dan Grid
Control
6. Oracle Enterprise Manager Database Control dibagi menjadi empat bagian
besar : Home, Performance, Administration, Maintenance
7. Security pada database oracle merupakan kegiatan / aturan yang dilakukan
untuk melindungi asset terpenting dalam database, yaitu data.
8. Database administrator memiliki tugas untuk memastikan keamanan
database dari sisi installasi, konfigurasi, user account, standarisasi password,
koneksi database, enkripsi, dan policy.
9. Oracle memiliki beberapa user account default, antara lain SYS, SYSTEM,
DBSNMP dan SYSMAN.

40

Politeknik Telkom

Database Management System

Kuis Benar Salah

1. Database administration merupakan semua kegiatan yang berhubungan


dengan installasi database.
2. Pembuatan trigger merupakan tugas dari system database administration
3. System database administration termasuk dalam basic administration
4. Oracle Enteprise Manager pada oracle 10g dapat diakses via Web.
5. Pengaturan user di Oracle Enterprise Manager terletak pada menu
Administration
6. Dalam Oracle Enterprise manager, fungsi fungsi administrasi diatur pada
menu Maintenance
7. Data merupakan bagian yang penting dalam database security
8. Salah satu tugas database administration dalam database security adalah
melakukan patch operating system
9. Authorization memberikan pengaturan mengenai user apa saja yang bisa
mengakses database.
10. User tertinggi dalam Oracle Database adalah SYSTEM.

Database Administration - Basic Administration

41

Politeknik Telkom

Database Management System

Pilihan Ganda

4.
A.
B.
C.

Berikut merupakan salah satu kegiatan dalam database


administration, kecuali ...
Installasi Database
D. Security Database
Pembuatan Trigger
E. Patch Aplikasi
Backup Database
Tugas dari development database administration adalah
Restore
D. Desain Database
Backup
E. Patch
Repair Database
Berikut adalah aktifitas yang dapat dilakukan dari Oracle
Enterprise Manager, kecuali
Pembuatan Instance
D. Backup Database
Restore Database
E. Pengaturan User
Export Import Schema
Dibawah ini yang bukan merupakan menu pada Oracle Enterprise
Manager Database Control
Administration
D. Performance
Control
E. Home
Maintenance

5.
A.
B.
C.

Dibawah ini yang merupakan bagian dari database security :


Installasi Database
D. Auditing
Pembuatan Datafile
E. Controlfile
Storage

6
A.
B.
C.

User user ini merupakan user standard dari oracle, kecuali :


SYS
D. SYSTEM
SYSMAN
E. SYSDBA
DBSNMP

1.
A.
B.
C.
2.
A.
B.
C.
3.
A.
B.
C.

42

Politeknik Telkom

Database Management System

A
B
C

Salah satu kegiatan berikut yang termasuk dalam Autentification


adalah
Network Authentification
D Data Authentification
Auditing
E
Monitor Authentification
Performance Authentification

8
A
B
C

User Account memiliki beberapa atribut, berikut merupakan atribut


dari user account, kecuali
Password
D Quota tablespace
Status account
E
Status password
Status database

Database Administration - Basic Administration

43

Politeknik Telkom

Database Management System

Latihan

1.
2.
3.
4.
5.

44

Sebutkan 3 jenis database administration dan jelaskan perbedaanny a !


Jelaskan cara pengaturan suatu database !
Apa perbedaan antara Database Control dan Grid Control ?
Sebutkan fungsi dari Oracle Enterprise Manager !
Jelaskan arti dan jenis - jenis dari Oracle Security !

Politeknik Telkom

Database Management System

Konsep Prosedural

Overview

Untuk meningkatkan performansi saat pengaksesan database, perlu dikenal


konsep prosedural menggunakan PL/SQL yang memungkinkan pembuatan
blok program layaknya bahasa pemrograman.

Tujuan

1. Mahasiswa memahami konsep prosedural dalam PL/SQL.


2. Mahasiswa memahami jenis-jenis unit program : prosedur, fungsi, dan
trigger.
3. Mahasiswa memahami konsep penamaan yang baik.
4. Mahasiswa dapat membuat unit program dasar menggunakan PL/SQL
Konsep Prosedural

45

Politeknik Telkom

4.1

Database Management System

Pentingnya Konsep Prosedural

Konsep prosedural dalam PL/SQL (Procedural Language extensions to


SQL) merupakan sebuah teknologi yang memungkinkan kita membuat blok
program layaknya dalam bahasa pemrograman prosedural seperti C, Fortran,
COBOL, dan lainnya. Tanpa adanya PL/SQL, akan dilakukan proses ekseskusi
terhadap statemen-statemen SQL sekali dalam tiap waktu. Apabila program
atau aplikasi client hanya menggunakan SQL murni maka program tersebut
akan melakukan pemanggilan berulang-ulang yang akan menurunkan performa.
SQL
SQL

Aplikasi

SQL

Sedangkan dengan PL/SQL, aplikasi dapat mengirimkan sekumpulan


statemen ke database secara langsung dalam satu waktu. Tentu saja ini akan
mereduksi waktu perjalanan ke dalam suatu jaringan yang terjadi antara
database server dan aplikasi client.
IF THEN
SQL;
ELSE
SQL;
END IF;

Aplikasi

Apabila kita membuat prosedur atau fungsi dalam database (stored


procedure/stored function) maka aplikasi cukup melakukan pemanggilan dan
menunggu hasil yang diberikan oleh database. Pemanggilan prosedur semacam
ini sering disebut RPC (Remote Procedure Call). Ini jauh lebih efisien dari
kedua cara di atas.

RPC

46

Aplikasi

Politeknik Telkom

Database Management System

Blok PL/SQL secara umum terdiri atas tiga bagian :


DECLARE
-- berisi deklarasi variable, konstanta,
-- prosedur, ataupun fungsi
BEGIN
-- berisi statemen-statemen yang akan dieksekusi
EXCEPTION
-- berisi perintah untuk mengatasi kesalahan
-- yang mungkin muncul
END;
o

Blok DECLARE dan EXCEPTION bersifat opsional, hanya dituliskan saat


dibutuhkan. Bagian yang wajib adalah BEGIN dan END.

4.2

Program Unit : Prosedur, Fungsi, Trigger

PL/SQL mengijinkan untuk membuat program unit yang merupakan


kontainer sekumpulan kode atau statemen. Program unit ini terdiri dari :
prosedur, fungsi, package, trigger, dan object type (obejct-oriented class).

4.2.1

Prosedur

Prosedur adalah blok PL/SQL yang menyimpan sekumpulan perintah


tanpa disertai pengembalian nilai.
CREATE [OR REPLACE] PROCEDURE nama_prosedur
(parameter1 tipedata, parameter2 tipedata,...)
IS
variable_variabel_lokal tipedata;
BEGIN
statemen_statemen;
...
END;

Konsep Prosedural

47

Politeknik Telkom

Database Management System

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

Database Management System

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

Database Management System

Kemungkinan event yang dapat mengaktivasi sebuah trigger adalah :


Nama Event
BEFORE INSERT
AFTER INSERT
BEFORE UPDATE
AFTER UPDATE
BEFORE DELETE
AFTER DELETE

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

Naming Convention yang Baik

Naming convention yang tepat akan membuat kode statemen PL/SQL


lebih mudah dibaca dan lebih bisa dimengerti. Secara singkat, keuntungan dari
naming convention yang baik adalah :
o Lebih mudah dibaca.
o Lebih mudah dipahami.
o Memberikan informasi mengenai fungsionalitas berdasarkan identifier.
o Kemudahan dalam proses debug.
o Memastikan konsistensi di antara banyak kode yang dibuat oleh
developer yang berbeda.
50

Politeknik Telkom

Database Management System

Beberapa contoh naming convention berdasar identifier :


Identifier
Variabel
Konstanta
Parameter
Exception
Cursor
Type
Trigger

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

Database Management System

Rangkuman

1.

Konsep prosedural dalam PL/SQL (Procedural Language extensions to


SQL) merupakan sebuah teknologi yang memungkinkan kita membuat
blok program layaknya dalam bahasa pemrograman prosedural.
IF THEN
SQL;
ELSE
SQL;
END IF;

Aplikasi

2. RPC (Remote Procedure Call) : pemanggilan progam unit (prosedur


maupun fungsi) terhadap database.

RPC

Aplikasi

3. Program unit merupakan kontainer sekumpulan kode atau statemen :


Prosedur : blok PL/SQL yang menyimpan sekumpulan perintah tanpa
disertai pengembalian nilai.
CREATE [OR REPLACE] PROCEDURE nama_prosedur
(parameter1 tipedata, parameter2 tipedata,...)
IS
variable_variabel_lokal tipedata;
BEGIN
statemen_statemen;
...
END;

52

Politeknik Telkom

Database Management System

Fungsi : blok PL/SQL yang dapat mengembalikan 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;

Trigger : blok PL/SQL yang disimpan dalam database dan akan


diaktivasi ketika melakukan statemen-statemen SQL terhadap
sebuah tabel.

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;
4. Keuntungan dari naming convention yang baik adalah :
Lebih mudah dibaca.
Lebih mudah dipahami.
Memberikan informasi mengenai fungsionalitas berdasarkan
identifier.
Kemudahan dalam proses debug.
Memastikan konsistensi di antara banyak kode yang dibuat oleh
developer yang berbeda.

Konsep Prosedural

53

Politeknik Telkom

Database Management System

Kuis Benar Salah

1.

RPC (Remote Procedure Call) adalah proses pemanggilan stored


procedure atau function pada database oleh aplikasi client.

2.

Blok PL/SQL berikut :


BEGIN
END;
Akan menghasilkan error.

3.

Perbedaan antara prosedur dan fungsi adalah pada proses pengembalian


nilai pada saat pemanggilan.

4.

Trigger akan diaktivasi untuk setiap proses INSERT, DELETE, maupun


UPDATE terhadap table apabila pada trigger tersebut tidak
dispesifikasikan event apa yang bisa mengaktivasinya.
(Tanpa memperhatikan naming convention, untuk
soal nomor 5 6 perhatikan prosedur berikut)
CREATE OR REPLACE PROCEDURE prc_upd_bil IS
bil
INTEGER := 3;
BEGIN
bil := 5;
DBMS_OUTPUT.PUT_LINE(Nilai bil = ||bil);
END IF;
END;

5.

54

bil adalah sebuah konstanta bertipe integer.

Politeknik Telkom

Database Management System

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

Database Management System

9. SET serveroutput ON;


DECLARE
coba VARCHAR2(10);
BEGIN
coba := put_nama(123412341234);
DBMS_OUTPUT.PUT_LINE(coba);
END;
Akan menghasilkan output :
123412341234
10. Prefix pada naming convention sebuah identifier dapat memberikan
informasi mengenai fungsionalitas identifier tersebut.

56

Politeknik Telkom

Database Management System

Pilihan Ganda
1.
A.
B.
C.

Pengeksekusian statemen SQL dalam database dapat dilakukan dengan


cara :
Sintaks SQL
D. B dan C benar
Blok PL/SQL
E. A, B, dan C benar
RPC

2.
A.
B.
C.

Berikut adalah beberapa jenis program unit, kecuali :


prosedur
D. trigger
fungsi
E. package
table

3.
A.
B.
C.

Blok PL/SQL yang membutuhkan event untuk mengaktivasinya


disebut :
prosedur
D. trigger
fungsi
E. package
table

4.
A.
B.
C.

Blok PL/SQL yang membutuhkan statement RETURN adalah :


prosedur
D. trigger
fungsi
E. package
table

5.

Keuntungan dari pengaturan naming convention adalah sebagai


berikut, kecuali :
Executable
D. Informative
Readable
E. Consistency
Understandable

A.
B.
C.

Konsep Prosedural

57

Politeknik Telkom

Database Management System

(Tanpa memperhatikan naming convention, untuk soal


nomor 6 8 perhatikan blok PL/SQL berikut)
SET serveroutput ON;
DECLARE
coba INTEGER;
BEGIN
coba := 5**3;
DBMS_OUTPUT.PUT_LINE(coba);
END;
6
A.
B.
C.

Output dari blok PL/SQL di atas adalah :


555
D. 15
125
E. Error
0

Bila baris statemen :


coba INTEGER;
Diganti menjadi :
coba DECIMAL (3,2);

A
B
C
8

A
B
C

58

Maka outputnya menjadi :


555
125
0

D.
E.

15
Error

D
E

Cursor
Type

Pada baris statemen :


coba INTEGER;
coba merupakan sebuah :
Variabel
Konstanta
Parameter

Politeknik Telkom

(Untuk soal
berikut)

Database Management System

nomor

10

perhatikan

trigger

CREATE OR REPLACE TRIGGER trg_coba


BEFORE UPDATE ON barang
FOR EACH ROW
BEGIN
UPDATE barang
SET jumlah = 10;
END;
9

A
B
C
10

A
B
C

Bila dilakukan eksekusi :


UPDATE barang
SET jumlah = 20;
Maka setelah eksekusi statemen di atas, field jumlah akan bernilai :
10
D 40
20
E
50
30
Bila statemen eksekusi ditambah menjadi :
UPDATE barang
SET jumlah = 20
WHERE nama_brg = Lemari Es;
Maka setelah eksekusi statemen di atas, field jumlah akan bernilai :
10, untuk semua jenis barang
D 20, untuk jenis barang Lemari Es
20, untuk semua jenis barang
E
30, untuk jenis barang Lemari Es
30, untuk semua jenis barang

Konsep Prosedural

59

Politeknik Telkom

Database Management System

Latihan

6.

Sebutkan perbedaan antara prosedur, fungsi, dan trigger. Dan tuliskan


sintaks masing-masing.

7.

Sebutkan 5 keuntungan dari naming convention yang baik.


(Untuk soal
berikut)

nomor

perhatikan

prosedur

CREATE OR REPLACE PROCEDURE prc_cetak_bil IS


bil
INTEGER := 5;
BEGIN
-- statemen cetak bilangan ganjil
...
-- statemen cetak bilangan genap
...
END;
8.

Pada blok :
-- statemen cetak bilangan ganjil
...
tambahkan statemen SQL untuk mencetak bilangan ganjil antara 1
hingga 5.

9.

Pada blok :
-- statemen cetak bilangan genap
...
tambahkan statemen SQL untuk mencetak bilangan genap antara 1
hingga 5.
(Untuk soal
berikut)

60

nomor

perhatikan

fungsi

Politeknik Telkom

Database Management System

CREATE OR REPLACE FUNCTION cek_prima


(pi_bil INTEGER)
RETURN BOOLEAN IS
ket

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

CREATE OR REPLACE TRIGGER trg_delete


-- deklarasi event terhadap table
...
FOR EACH ROW
BEGIN
-- statemen yang diaktivasi saat event terjadi
...
-- menampilkan keterangan ke layar
...
END;
Konsep Prosedural

61

Politeknik Telkom

Database Management System

13. Pada blok :


-- deklarasi event terhadap table
...
tambahkan deklarasi bahwa trigger akan teraktivasi setelah terjadi proses
delete terhadap salah satu row di table barang.
14. Pada blok :
-- statemen yang diaktivasi saat event terjadi
...
tambahkan statemen DELETE untuk nama_brg yang mengandung kata
Lemari (gunakan operator LIKE dan fungsi UPPER).
15. Pada blok :
-- menampilkan keterangan ke layar
...
tambahkan statemen untuk mencetak keterangan ke layar bahwa proses
DELETE berhasil dilakukan.

62

Politeknik Telkom

Database Management System

Lebih Lanjut Mengenai Prosedural


-Percabangan-

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.

Mahasiswa memahami konsep percabangan.


Mahasiswa memahami berbagai jenis statemen percabangan.
Mahasiswa dapat menerapkan berbagai jenis percabangan dalam blok
PL/SQL.

Lebih Lanjut Mengenai Prosedur

63

Politeknik Telkom

5.1

Database Management System

Struktur Percabangan

Percabangan (decision control / branching) adalah suatu kontrol untuk


pengecekan yang dilakukan sebelum statemen-statemen dalam sebuah blok
PL/SQL dieksekusi. Statemen-statemen tersebut hanya akan dilakukan apabila
kondisi yang didefinikan terpenuhi (bernilai TRUE). Dan sebaliknya, statemenstatemen tersebut tidak akan dieksekusi apabila kondisi tidak terpenuhi
(bernilai FALSE).
Selain definisi di atas, percabangan juga bisa dikatakan sebagai pemilihan
: blok PL/SQL akan memilih statemen-statemen yang akan dieksekusi
berdasarkan kondisi yang terpenuhi.
PEMILIHAN

TRUE

FALSE

Secara garis besar, terdapat dua cara untuk melakukan percabangan,


yaitu dengan menggunakan statemen IF dan statemen CASE.

5.1.1

Statemen IF

Penggunaan statemen IF dapat diklasifikasikan ke dalam tiga bagian,


yaitu struktur untuk satu kondisi, dua kondisi, dan tiga kondisi atau lebih.

5.1.1.1 Satu Kondisi (IF-THEN)


IF kondisi THEN
statemen-statemen;
END IF;
64

Politeknik Telkom

Database Management System

Pada struktur ini, PL/SQL hanya akan mengecek sebuah kondisi.


Apabila kondisi tersebut terpenuhi (bernilai TRUE) maka statemen-statemen
dalam blok pemilihan tersebut akan dieksekusi terlebih dulu sebelum
dilanjutkan ke statemen di bawah blok pemilihan. Akan tetapi bila kondisi
tidak terpenuhi (bernilai FALSE) maka eksekusi akan langsung berpindah ke
statemen di bawah blok pemilihan.
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;

SQL> set serveroutput on;


SQL> exec prc_stok_brg;
Keterangan
- IF v_stok = 0 THEN
DBMS_OUTPUT.PUT_LINE(Persediaan
habis);
END IF;

barang

telah

Sintak tersebut berarti dilakukan pengecekan : jika jumlah lemari es bernilai


nol, maka ditampilkan Persediaan barang telah habis (agar perintah
DBMS_OUTPUT.PUT_LINE dapat dieksekusi, variabel SERVEROUTPUT
harus diaktifkan). Jika stok barang tidak nol maka pengecekan kondisi tidak
Lebih Lanjut Mengenai Prosedur

65

Politeknik Telkom

Database Management System

terpenuhi, artinya statemen dalam blok pengecekan tidak akan dieksekusi


dan kalimat Persediaan barang telah habis tidak akan dicetak ke layar.

5.1.1.2 Dua Kondisi (IF-THEN-ELSE)


IF kondisi THEN
statemen-statemen A;
ELSE
statemen-statemen B;
END IF;
Pada struktur ini, perlu didefinikan kondisi khusus untuk mengatasi
apabila kondisi yang didefinisikan pada blok IF tidak terpenuhi. Kondisi khusus
tersebut diletakkan pada bagian ELSE.
Apabila kondisi IF terpenuhi (bernilai TRUE) maka statemen-statemen
A akan dieksekusi terlebih dulu sebelum dilanjutkan ke statemen yang berada
di bawah blok pemilihan. Bila kondisi IF tidak terpenuhi (bernilai FALSE) maka
statemen-statemen B yang akan dieksekusi terlebih dulu sebelum dilanjutkan
ke statemen yang berada di bawah blok pemilihan.
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);
ELSE
66

Politeknik Telkom

Database Management System

--Jika v_stok > 0, cetak keterangan ke layar


DBMS_OUTPUT.PUT_LINE(Persediaan barang masih
ada);
END IF;
END;
SQL> set serveroutput on;
SQL> exec prc_stok_brg;
Keterangan
- IF v_stok = 0 THEN
DBMS_OUTPUT.PUT_LINE(Persediaan
habis);
ELSE
DBMS_OUTPUT.PUT_LINE(Persediaan
ada);
END IF;

barang

telah

barang

masih

Sintak tersebut berarti dilakukan pengecekan : jika jumlah lemari es bernilai


nol, maka ditampilkan kalimat Persediaan barang telah habis. Jika stok
barang ternyata tidak nol maka pengecekan kondisi IF tidak terpenuhi dan
pengecekan akan memenuhi kondisi ELSE, artinya statemen dalam blok
ELSE akan dieksekusi sehingga kalimat Persediaan barang masih ada yang
akan dicetak ke layar.

5.1.1.3 Tiga Kondisi atau Lebih Kondisi (IF-THENELSIF)


IF kondisi_1 THEN
statemen-statemen
ELSIF kondisi_2 THEN
statemen-statemen
...
ELSIF kondisi_n THEN
statemen-statemen
[ELSE
statemen-statemen
END IF;
Lebih Lanjut Mengenai Prosedur

A;
B;
N;
lain;]
67

Politeknik Telkom

Database Management System

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

Database Management System

-- Update gaji, kenaikan gaji dibulatkan


-- ke puluhan ribu terdekat
UPDATE pegawai
SET gaji = ROUND((1+v_pct_fgaji/100)*gaji, 4)
WHERE no_peg = pi_no_peg;
SQL> exec prc_upd_gaji(PI-10001);
Keterangan
- IF v_gaji_col >= 3000000 THEN
v_pct_fgaji := 5.00;
ELSIF v_gaji_col >= 2000000 THEN
v_pct_fgaji := 8.00;
ELSIF v_gaji_col >= 1000000 THEN
v_pct_fgaji := 10.00;
ELSE
v_pct_fgaji := 15.00;
END IF;
Jika gaji pegawai saat ini adalah p dan presentase kenaikan gaji yang baru
adalah n, maka besarnya kenaikan gaji yang diperoleh adalah :
p 3.000.000
2.000.000 p
1.000.000 p
p < 1.000.000

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

Lebih Lanjut Mengenai Prosedur

p
q = 1.08 p
q = 1.10 p
p

69

Politeknik Telkom

5.1.2

Database Management System

Statemen CASE

Struktur CASE ini sepadan dengan struktur IF-THEN-ELSIF. Pada


penggunaan statemen CASE dapat diklasifikasikan ke dalam dua bagian, yaitu
simple CASE dan searched CASE.

5.1.2.1 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;
Struktur ini memiliki sebuah ekspresi setelah keyword CASE yang akan
dibandingkan dengan tiap nilai pada blok WHEN. Kondisi WHEN yang
pertama kali ditemukan bernilai TRUE akan dieksekusi dan dilanjutkan ke
statemen di bawah blok pemilihan CASE.
Contoh
/*Prosedur untuk menentukan nama hari*/
CREATE OR REPLACE PROCEDURE prc_nama_hari
(pi_noHari
INTEGER) IS
v_namaHari
BEGIN
-- Penentuan nama
v_namaHari :=
CASE pi_noHari
WHEN 1 THEN
WHEN 2 THEN
WHEN 3 THEN
WHEN 4 THEN
WHEN 5 THEN
WHEN 6 THEN
70

VARCHAR2;
hari berdasar nomor urut hari
Senin
Selasa
Rabu
Kamis
Jumat
Sabtu

Politeknik Telkom

Database Management System

WHEN 7 THEN Minggu


ELSE Tidak terdefinisi
END CASE;
DBMS_OUTPUT.PUT_LINE(v_namaHari);
END;
SQL> set serveroutput on
SQL> exec prc_nama_hari(3);
Keterangan
- v_namaHari :=
CASE pi_noHari
WHEN 1 THEN
WHEN 2 THEN
WHEN 3 THEN
WHEN 4 THEN
WHEN 5 THEN
WHEN 6 THEN
WHEN 7 THEN
ELSE Tidak
END CASE;

Senin
Selasa
Rabu
Kamis
Jumat
Sabtu
Minggu
terdefinisi

Nilai variabel v_namaHari tergantung dari parameter input pi_noHari :


noHari = 1 namaHari = Senin
noHari = 2 namaHari = Selasa
noHari = 3 namaHari = Rabu
noHari = 4 namaHari = Kamis
noHari = 5 namaHari = Jumat
noHari = 6 namaHari = Sabtu
noHari = 7 namaHari = Minggu
noHari 1,2,3,4,5,6, atau 7
terdefinisi

Lebih Lanjut Mengenai Prosedur

namaHari

Tidak

71

Politeknik Telkom

Database Management System

5.1.2.2 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;
Searched CASE mengevaluasi sederetan ekspresi untuk menemukan
kondisi TRUE pertama. Kondisi WHEN pertama yang bernilai TRUE akan
dieksekusi dan dilanjutkan ke statemen di bawah blok pemilihan CASE.
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
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

Database Management System

-- Update gaji, kenaikan gaji dibulatkan


-- ke puluhan ribu terdekat
UPDATE pegawai
SET gaji = ROUND((1+v_pct_fgaji/100)*gaji, 4)
WHERE no_peg = pi_no_peg;
SQL> exec prc_upd_gaji(PI-10001);
Keterangan
- CASE
WHEN v_gaji_col >= 3000000 THEN
v_pct_fgaji := 5.00;
WHEN v_gaji_col >= 2000000 THEN
v_pct_fgaji := 8.00;
WHEN v_gaji_col >= 1000000 THEN
v_pct_fgaji := 10.00;
ELSE
v_pct_fgaji := 15.00;
END CASE;
Jika gaji pegawai saat ini adalah p dan presentase kenaikan gaji yang baru
adalah n, maka besarnya kenaikan gaji yang diperoleh adalah :
p 3.000.000
2.000.000 p
1.000.000 p
p < 1.000.000

n = 0.05
< 3.000.000 n = 0.08
< 2.000.000 n = 0.10
n = 0.15

Lebih Lanjut Mengenai Prosedur

73

Politeknik Telkom

Database Management System

Rangkuman

5. Percabangan (decision control / branching) adalah suatu kontrol untuk


pengecekan yang dilakukan sebelum statemen-statemen dalam sebuah
blok PL/SQL dieksekusi.
6. Klasifikasi decision control adalah :
Statemen IF
o IF-THEN : pengecekan hanya untuk sebuah kondisi.
IF kondisi THEN
statemen-statemen;
END IF;
o

IF-THEN-ELSE : pengecekan untuk dua kondisi.


IF kondisi THEN
statemen-statemen A;
ELSE
statemen-statemen B;
END IF;

74

IF-THEN-ELSIF : pengecekan untuk tiga kondisi atau lebih.


IF kondisi_1 THEN
statemen-statemen A;
ELSIF kondisi_2 THEN
statemen-statemen B;
...
ELSIF kondisi_n THEN
statemen-statemen N;
[ELSE
statemen-statemen lain;]
END IF;

Politeknik Telkom

Database Management System

Statemen CASE
o Simple CASE
CASE (ekspresi)
WHEN nilai_1 THEN statemen_1;
WHEN nilai_2 THEN statemen_2;
...
WHEN nilai_n THEN statemen_n;
[ELSE statemen_lain;]
END CASE;

o Searched CASE
CASE
WHEN ekspresi_1 = nilai_1 THEN statemen_1;
WHEN ekspresi_2 = nilai_2 THEN statemen_2;
...
WHEN ekspresi_n = nilai_n THEN statemen_n;
[ELSE statemen_lain;]
END CASE;

Lebih Lanjut Mengenai Prosedur

75

Politeknik Telkom

Database Management System

Kuis Benar Salah

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

Database Management System

15. Bila blok dalam BEGIN END, diganti menjadi :


nilai := 8;
IF nilai > 0 THEN
DBMS_OUTPUT.PUT_LINE('Statemen IF 1st');
ELSE THEN
DBMS_OUTPUT.PUT_LINE('Statemen IF 2nd');
END IF;
Maka output dari eksekusi blok PL/SQL di atas menjadi :
Statemen IF 1st
16. Pada blok CASE, semua kondisi WHEN akan dicek sebelum akhirnya
melanjutkan eksekusi statemen di bawah blok CASE tersebut.
(Untuk soal nomor 7 - 9, perhatikan blok PL/SQL berikut)
SET serveroutput ON;
DECLARE
nilai
DEC(5,2);
indeks
CHAR;
BEGIN
nilai := 60;
CASE
WHEN nilai > 80.00 THEN
indeks := A;
WHEN nilai > 60 THEN
indeks := B;
WHEN nilai > 50 THEN
indeks := C;
ELSE
indeks := D;
END CASE;
DBMS_OUTPUT.PUT_LINE(indeks);
END;
17. Output dari eksekusi blok PL/SQL di atas adalah :
B

Lebih Lanjut Mengenai Prosedur

77

Politeknik Telkom

Database Management System

18. Bila blok dalam BEGIN - END, diganti menjadi :


nilai := 60;
CASE
WHEN nilai >= 80.00 THEN
indeks := A;
WHEN nilai >= 60 THEN
indeks := B;
WHEN nilai >= 50 THEN
indeks := C;
ELSE
indeks := D;
END CASE;
DBMS_OUTPUT.PUT_LINE(indeks);
Maka output dari eksekusi blok PL/SQL di atas menjadi :
B
19. Bila blok dalam BEGIN - END, diganti menjadi :
nilai := 60;
CASE nilai
WHEN >= 80.00 THEN
indeks := A;
WHEN >= 60 THEN
indeks := B;
WHEN >= 50 THEN
indeks := C;
ELSE
indeks := D;
END CASE;
DBMS_OUTPUT.PUT_LINE(indeks);
Maka output dari eksekusi blok PL/SQL di atas menjadi :
B
20. Bila baris :
ELSE
indeks := D;
dihilangkan, maka akan terjadi error.
78

Politeknik Telkom

Database Management System

Latihan
Untuk soal nomor 1 3, perhatikan table employee_tab berikut :
emp_id

mgr_id

dept_id

EM-10001 MG-10006 SAL


EM-10002 MG-10006 SAL
EM-10003 MG-10007 HR
EM-10004 MG-10007 HR
EM-10005 MG-10006 SAL
MG-10006 NULL
SAL
MG-10007 NULL
HR
...
...
...

emp_name
Sarah
John
Michael
George
Henk
Natalie
Matt
...

emp_salary
400
400
400
400
400
800
800
...

emp_id : id employee; mgr_id : id manager; dept_id : id department;


emp_name : employees name, emp_salary : employees salary.

emp_id dengan awalan MG- menyatakan bahwa ia adalah seorang


manager dari department tertentu.

16. Buatlah sebuah prosedur untuk menghitung jumlah karyawan dalam


department SAL :
o Jumlah karyawan akan dicetak ke layar.
o Jika jumlah karyawan = 0 maka akan diberi keterangan Department
belum berfungsi ke layar.
o Jika jumlah karyawan antara 1 10 maka akan diberi keterangan
Department kecil ke layar.
o Jika jumlah karyawan antara 11 20 maka akan diberi keterangan
Department menengah ke layar.
o Jika jumlah karyawan lebih dari 20 maka akan diberi keterangan
Department besar ke layar.
(Gunakan salah satu sintaks decision control yang paling efisien).
Lebih Lanjut Mengenai Prosedur

79

Politeknik Telkom

Database Management System

17. Buatlah sebuah fungsi untuk mengecek apakah karyawan dengan id


tertentu adalah seorang manager atau bukan :
o Fungsi memiliki emp_id sebagai parameter input.
o Fungsi akan mengembalikan TRUE bila emp_id yang dimasukkan
adalah milik seorang manager, dan FALSE bila sebaliknya.
(Gunakan salah satu sintaks decision control yang paling efisien dan
gunakan operator LIKE).
18. Buatlah sebuah blok PL/SQL (atau prosedur/fungsi) yang akan
mengupdate salary dengan ketentuan :
o Jika seseorang adalah manager dari departemen apapun, maka akan
mendapat kenaikan gaji sebesar 20% dari gaji semula.
o Jika seseorang adalah karyawan biasa di departemen SAL, maka akan
mendapat kenaikan gaji sebesar 15% dari gaji semula.
o Jika seseorang adalah karyawan biasa di departemen HR, maka akan
mendapat kenaikan gaji sebesar 10% dari gaji semula.
o Jika seseorang adalah karyawan biasa di departemen selain SAL dan
HR, maka akan mendapat kenaikan gaji sebesar 5% dari gaji semula.
(Gunakan HANYA satu buah decision control yang paling sesuai).

80

Politeknik Telkom

Database Management System

Lebih Lanjut Mengenai Prosedural


-Iterasi, Cursor, dan Exception Handling-

Overview

Pada sebuah blok PL/SQL dapat ditempatkan suatu kontrol untuk


pengulangan eksekusi suatu blok statemen berdasarkan kondisi tertentu,
penggunaan cursor secara implisit maupun eksplisit, dan menempatkan blok
penanganan terhadap exception yang mungkin timbul.

Tujuan

1.
2.
3.

Mahasiswa memahami konsep dan penggunaan perulangan (iterasi).


Mahasiswa memahami konsep dan penggunaan cursor.
Mahasiswa memahami konsep dan penggunaan exception handling.

Lebih Lanjut Mengenai Prosedur

81

Politeknik Telkom

6.1

Database Management System

Iterasi

Struktur iterasi (looping) memungkinkan eksekusi blok statemen


secara berulang selama kondisi yang didefinisikan bernilai TRUE. Iterasi ini
sendiri terbagi menjadi tiga jenis : simple loop (infinitif), FOR, dan WHILE.
Statemen EXIT atau EXIT WHEN dapat digunakan untuk keluar dari
kontrol iterasi menuju statemen-statemen di bawah blok iterasi (setelah
posisi END LOOP).

TRUE

6.1.1

FALSE

Simple LOOP

Struktur simple LOOP ini digunakan bila diinginkan minimal iterasi


dijalankan satu kali. Dalam struktur ini harus ditambahkan statemen EXIT
WHEN untuk menghindari eksekusi tak terbatas (infinitif).
LOOP
statemen-statemen;
END LOOP;

82

Politeknik Telkom

Database Management System

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

Struktur ini tidak memiliki kondisi, sehingga perlu didefinisikan indeks


minimal dan maksimal sebagai batas iterasi. Umumnya struktur ini digunakan
untuk iterasi yang banyaknya sudah diketahui dengan pasti.
Lebih Lanjut Mengenai Prosedur

83

Politeknik Telkom

Database Management System

FOR var IN [REVERSE] indeks_min .. indeks_max LOOP


statemen-statemen;
END LOOP;
o
o
o

Variabel iterasi (var) tidak perlu dideklarasi karena PL/SQL melakukan


deklarasi secara implisit dan variabel ini berlaku dalam LOOP itu saja.
Kata REVERSE akan membuat iterasi dimulai dari indeks_max dan
berkurang satu untuk proses iterasi. Demikian seterusnya hingga var =
indeks_min.
Bila nilai indeks_max < indeks_min, proses iterasi tidak dilakukan.

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

Database Management System

DBMS_OUTPUT.PUT_LINE(Nilai input minimal 1);


ELSE
-- Iterasi cetak angka sejumlah n_akhir
FOR i IN REVERSE 1 .. n_akhir LOOP
DBMS_OUTPUT.PUT(i);
END LOOP;
DBMS_OUTPUT.NEW_LINE;
END IF;
END;
SQL> set serveroutput on;
SQL> exec prc_cetak_inc(5);
SQL> exec prc_cetak_dec(5);
Output :
12345
54321

6.1.3

Statemen WHILE

Struktur ini selalu memeriksa kebenaran kondisi di awal blok iterasi.


Bila kondisi bernilai FALSE, maka statemen-statemen dalam blok iterasi tidak
akan dieksekusi.
WHILE kondisi LOOP
statemen-statemen;
END LOOP;
Contoh
/*Prosedur cetak baris*/
CREATE OR REPLACE PROCEDURE prc_ctk_baris
(n_akhir INTEGER)IS
-- Inisialisasi variabel pengecekan iterasi
n_awal
INTEGER := 1;

Lebih Lanjut Mengenai Prosedur

85

Politeknik Telkom

Database Management System

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

Statemen EXIT dan EXIT WHEN

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

Database Management System

Cursor

Blok PL/SQL tidak mengijinkan menampilkan beberapa baris dengan


menggunakan perintah SELECT secara langsung. Untuk mengatasinya
digunakanlah cursor. Cursor merupakan sejenis variabel yang dapat digunakan
untuk menampung banyak nilai berupa baris atau record.
Dapat dikatakan pula cursor adalah pointer yang menunjuk ke suatu
bagian memori untuk menyimpan hasil instruksi SQL. Hasil instruksi SQL
tersebut biasanya merupakan multiple row, dan cursor digunakan untuk
menunjuk (pointer) ke salah satu baris data.
Dalam penggunaannya, cursor harus melalui empat tahap : deklarasi
(DECLARE), buka (OPEN), pengambilan data (FETCH), dan tutup (CLOSE).
Cursor sendiri dibedakan menjadi : cursor implisit dan cursor eksplisit.

6.2.1

Cursor Eksplisit

Cursor eksplisit merupakan cursor yang harus dibuka dan ditutup


secara manual.
-- Deklarasi cursor
DECLARE
CURSOR nama_cursor IS
statemen SELECT;
-- Membuka cursor
OPEN nama_cursor;
-- Menangkap isi cursor
FETCH nama_cursor INTO nama_variabel;
-- Menutup cursor
CLOSE nama_cursor;
Contoh
/*Prosedur cetak data customer*/
CREATE OR REPLACE PROCEDURE prc_ctk_cust IS
-- Deklarasi cursor
Lebih Lanjut Mengenai Prosedur

87

Politeknik Telkom

Database Management System

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

Database Management System

Cursor Implisit

Cursor eksplisit merupakan cursor yang tidak perlu dideklarasikan


sebelumnya. Cursor ini berasosiasi dengan perintah SELECT, INSERT,
DELETE, dan UPDATE.
Adapun atribut-atribut yang terdapat pada cursor ini adalah :
Atribut

Deskripsi

Berasosiasi dengan SELECT, bernilai TRUE


SQL%NOTFOUND bila query menghasilkan NULL dan FALSE bila
query menghasilkan data
Kebalikan SQL%NOTFOUND, bernilai FALSE bila
SQL%FOUND
query menghasilkan NULL dan TRUE bila query
menghasilkan data
Bernilai TRUE saat eksekusi query, dan
SQL%ISOPEN
otomatis FALSE saat eksekusi selesai
Menunjukkan banyaknya baris yang dihasilkan
SQL%ROWCOUNT
dari sebuah query

/*Prosedur cari data customer*/


CREATE OR REPLACE PROCEDURE prc_src_cust
(pi_kode VARCHAR2) IS
-- Deklarasi variabel
vNama customer.nama_cust%TYPE;
BEGIN
-- Secara implisit mendeklarasikan, membuka,
-- menangkap data, dan menutup cursor setelah
-- cursor selesai diproses
SELECT nama_cust INTO vNama
FROM customer
WHERE UPPER(kode_cust) = pi_kode;
-- Mengecek query memberikan hasil atau tidak
IF SQL%NOTFOUND THEN
DBMS_OUTPUT.PUT_LINE(Data Tidak Ditemukan);
ELSE
Lebih Lanjut Mengenai Prosedur

89

Politeknik Telkom

Database Management System

DBMS_OUTPUT.PUT_LINE(Nama customer :
||vNama);
END IF;
END;

6.3

Menambahkan Exception Handling

Setiap kesalahan (error) atau peringatan (warning) yang muncul karena


suatu perintah disebut sebagai exception. Blok EXCEPTION dapat
ditempatkan dalam blok PL/SQL sebagai exception handler.
EXCEPTION
WHEN exception_1 [OR exception_2 [OR ...]] THEN
statemen-statemen;
WHEN exception_a [OR exception_b [OR ...]] THEN
statemen-statemen;
...
WHEN OTHERS THEN
statemen-statemen;
Sebaiknya hindari penggunaan exception OTHERS, karena exception
ini tidak menangani exception yang sifatnya spesifik.
Terdapat tiga tipe exception, yaitu : Predefined exception, User
defined exception, dan Non-predefined exception.

6.3.1

Predefined Exception

Oracle memiliki banyak jenis internal error dengan kode-kode


tertentu. Kesalahan internal ini dibangkitkan secara otomatis tiap kali suatu
perintah menimbulkan kondisi yang sesuai dengan jenis kesalahan tersebut.
Beberapa jenis error yang umum dimasukkan ke dalam predefined exception
agar dapat dilakukan penangan error tanpa mengetahui kode error-nya.

90

Politeknik Telkom

Database Management System

Beberapa predefined exception pada PL/SQL :


Error

Kode Error

Deskripsi

Input nilai duplikat pada


kolom unik
ORA-00051 TIMEOUT_ON_RESOURCE Time out
ORA-01001 INVALID_CURSOR
Operasi cursor ilegal
Mengakses database tapi
ORA-01012 NOT_LOGGED_ON
tidak terkoneksi
Login dengan username atau
ORA-01017 LOGIN_DENIED
password yang salah
Statemen SELECT INTO tidak
ORA-01403 NO_DATA_FOUND
menghasilkan baris data
Statemen SELECT INTO
ORA-01422 TOO_MANY_ROWS
menghasilkan lebih dari
satu baris data
ORA-01476 ZERO_DIVIDE
Membagi dengan nol
Gagal mengkonversi karakter
ORA-01722 INVALID_NUMBER
ke number
Memori rusak atau proses
ORA-06500 STORAGE_ERROR
membutuhkan memori lebih
besar
Terjadi PL/SQL internal
ORA-06501 PROGRAM_ERROR
error
Kesalahan pada operasi
aritmetika, konversi,
ORA-06502 VALUE_ERROR
truncate, atau batasan
rentang nilai
Dalam suatu penugasan, tipe
data antara cursor variabel
ORA-06504 ROWTYPE_MISMATCH
dengan PL/SQL cursor tidak
cocok
Membuka cursor yang sedang
ORA-06511 CURSOR_ALREADY_OPEN
dibuka
ORA-00001 DUP_VAL_ON_INDEX

Lebih Lanjut Mengenai Prosedur

91

Politeknik Telkom

Database Management System

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

Database Management System

User Defined Exception

User defined exception harus dideklarasikan manual oleh user layaknya


variabel, hanya saja tipenya adalah EXCEPTION.
nama_exception EXCEPTION;
Untuk membangkitkan exception jenis ini, digunakan perintah RAISE.
RAISE nama_exception;
Contoh
/*Prosedur update
CREATE OR REPLACE
(pi_nopeg
pi_gaji
e_nopeg

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;

Lebih Lanjut Mengenai Prosedur

93

Politeknik Telkom

Database Management System

SQL> set serveroutput on;


SQL> exec prc_upd_gaji (PI-10001,2000000);
Output :
Data tidak ditemukan
Keterangan
Untuk kasus ini, tidak bisa digunakan exception NO_DATA_FOUND karena
NO_DATA_FOUND hanya menangkap error akibat SELECT INTO saja.

6.3.3

Non-predefined Exception

Exception tipe ini sebenarnya termasuk user defined exception juga.


Setelah dideklarasi, exception ini diasosiasikan ke sebuah error internal
sehingga exception ini dibangkitkan secara otomatis.
nama_exception EXCEPTION;
PRAGMA EXCEPTION_INIT (nama_exception,
nomor_error);
o
o
o

Nomor error adalah bilangan integer negatif.


Kode errornya dalam format ORA-nnnnn dengan nnnnn adalah lima
angka absolut dari nomor error.
Contoh, kode error untuk nomor error -1 ORA-00001

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

Database Management System

BEGIN
-- Insert data karyawan baru
INSERT INTO pegawai
VALUES (pi_nopeg, INITCAP(pi_nama), pi_pos_id,
pi_tgl_masuk);
COMMIT;
EXCEPTION
WHEN DUP_VAL_ON_INDEX THEN
DBMS_OUTPUT.PUT_LINE (Duplikasi NIP);
WHEN e_invalid_fk THEN
DBMS_OUTPUT.PUT_LINE (POS_ID tidak
terdaftar);
END;
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

RAISE_APPLICATION_ERROR adalah prosedur yang dapat digunakan


untuk membuat dan membangkitkan exception. Dapat digunakan pada bagian
executable statemen mapun exception handler.
RAISE_APPLICATION_ERROR(nomor_error, pesan_error
[,TRUE|FALSE]);

Lebih Lanjut Mengenai Prosedur

95

Politeknik Telkom

o
o
o

Database Management System

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

Database Management System

BEGIN
-- Insert data karyawan baru
INSERT INTO pegawai
VALUES (pi_nopeg, INITCAP(pi_nama),
pi_tgl_masuk);
COMMIT;
EXCEPTION
WHEN DUP_VAL_ON_INDEX THEN
RAISE_APPLICATION_ERROR(-20101, Duplikasi
NIP);
END;
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.

Lebih Lanjut Mengenai Prosedur

97

Politeknik Telkom

Database Management System

Rangkuman

7.

Iterasi digunakan untuk mengeksekusi blok statemen secara berulang


berdasar kondisi tertentu.

8. Jenis-jenis iterasi :
o

Simple LOOP : minimal iterasi dijalankan satu kali. Harus


ditambahkan statemen EXIT WHEN untuk menghindari eksekusi tak
terbatas (infinitif).
LOOP
statemen-statemen;
END LOOP;

Statemen FOR : tidak memiliki kondisi, perlu didefinisikan indeks


minimal dan maksimal sebagai batas iterasi.
FOR var IN [REVERSE] indeks_min .. indeks_max
LOOP
statemen-statemen;
END LOOP;

Struktur ini selalu memeriksa kebenaran kondisi di awal blok iterasi.


Bila kondisi bernilai FALSE, maka statemen-statemen dalam blok
iterasi tidak akan dieksekusi.
WHILE kondisi LOOP
statemen-statemen;
END LOOP;

98

Politeknik Telkom

9.

Database Management System

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

deklarasi cursor (DECLARE)


membuka cursor (OPEN)
pengambilan data ke dalam cursor (FETCH)
menutup cursor (CLOSE)

12. Jenis-jenis cursor :


o

Eksplisit cursor : harus dibuka dan ditutup secara manual.


-- Deklarasi cursor
DECLARE
CURSOR nama_cursor IS
statemen SELECT;
-- Membuka cursor
OPEN nama_cursor;
-- Menangkap isi cursor
FETCH nama_cursor INTO nama_variabel;
-- Menutup cursor
CLOSE nama_cursor;

Implisit cursor : cursor yang tidak perlu dideklarasikan sebelumnya.


Cursor ini berasosiasi dengan perintah SELECT, INSERT, DELETE,
dan UPDATE

Lebih Lanjut Mengenai Prosedur

99

Politeknik Telkom

Database Management System

13. Exception handling adalah cara mengatasi setiap kesalahan (error) atau
peringatan (warning) yang muncul karena suatu perintah dengan
menempatkan blok exception handler:
14. Jenis-jenis exception :
o

Predefned exception : kesalahan internal yang dibangkitkan secara


otomatis tiap kali suatu perintah menimbulkan kondisi yang sesuai
dengan jenis kesalahan tersebut.

User defined exception : harus dideklarasikan manual oleh user


layaknya variabel.
nama_exception EXCEPTION;
Untuk membangkitkan exception ini :
RAISE nama_exception;

Non-predefined exception : setelah dideklarasi, exception ini


diasosiasikan ke sebuah error internal sehingga exception ini
dibangkitkan secara otomatis.
nama_exception EXCEPTION;
PRAGMA EXCEPTION_INIT (nama_exception,
nomor_error);

15. RAISE_APPLICATION_ERROR adalah prosedur yang disediakan untuk


membuat dan membangkitkan exception. Dapat digunakan pada bagian
executable statemen mapun exception handler.
RAISE_APPLICATION_ERROR(nomor_error, pesan_error
[,TRUE|FALSE]);

100

Politeknik Telkom

Database Management System

Kuis Benar Salah

1.

Statemen WHILE akan selalu mengecek kondisi sebelum statemen dalam


blok iterasi dilakukan.

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.

Tidak ada output apapun yang akan ditampilkan ke layar.

4.

Jika blok BEGIN END diganti menjadi :


LOOP
EXIT WHEN v_awal > v_akhir;
DBMS_OUTPUT.PUT_LINE('Baris ke-'||
TO_CHAR(v_awal));
v_awal := v_awal + 1;
END LOOP;
DBMS_OUTPUT.NEW_LINE;

Lebih Lanjut Mengenai Prosedur

101

Politeknik Telkom

Database Management System

Tidak akan ada output apapun yang akan ditampilkan ke layar.


(Untuk soal 5 - 6, perhatikan blok PL/SQL berikut)
SET serveroutput ON;
DECLARE
n_akhir
INTEGER := 5;
BEGIN
FOR i IN 1 .. n_akhir LOOP
DBMS_OUTPUT.PUT(i);
EXIT WHEN i > 3;
END LOOP;
DBMS_OUTPUT.NEW_LINE;
END;
5.

Output dari blok PL/SQL di atas adalah :


12345

6.

Jika blok FOR LOOP diganti menjadi :


FOR i IN 1 .. n_akhir LOOP
DBMS_OUTPUT.PUT(i);
EXIT;
END LOOP;
Maka outputnya adalah :
12345

7.

Perbedaan antara cursor implisit dan eksplisit adalah pada proses


pembukaan dan penutupan cursor tersebut.
(Untuk soal 8 9, perhatikan blok PL/SQL berikut)

102

Politeknik Telkom

Database Management System

SET serveroutput ON;


DECLARE
CURSOR cur_customer IS
SELECT cust_id, cust_name FROM customer
WHERE UPPER(cust_name) LIKE UPPER('%eni%')
ORDER BY cust_id;
v_Rec cur_customer%ROWTYPE;
v_Row INTEGER := 0;
BEGIN
OPEN cur_customer;
WHILE cur_customer%FOUND LOOP
FETCH cur_customer INTO vRec;
END LOOP;
v_Row := cur_customer%rowcount;
DBMS_OUTPUT.PUT_LINE(Jumlah row = ||v_Row);
CLOSE cur_customer;
END;
8.

Jika output query :


SELECT count(cust_id) FROM customer
WHERE UPPER(cust_name) LIKE UPPER('%eni%')
ORDER BY cust_id;
adalah :
8
Maka output dari blok PL/SQL di atas adalah :
Jumlah row = 8

Lebih Lanjut Mengenai Prosedur

103

Politeknik Telkom

9.

Database Management System

Jika blok BEGIN END diganti menjadi :


OPEN cur_customer;
FETCH cur_customer INTO vRec;
WHILE cur_customer%FOUND LOOP
FETCH cur_customer INTO vRec;
END LOOP;
v_Row := cur_customer%rowcount;
DBMS_OUTPUT.PUT_LINE(Jumlah row = ||v_Row);
CLOSE cur_customer;
Maka output dari blok PL/SQL di atas menjadi :
Jumlah row = 7

10. Dengan prosedur RAISE_APPLICATION_ERROR, tidak perlu


menggunakan statemen RAISE untuk membangkitkan sebuah exception.

104

Politeknik Telkom

Database Management System

Latihan

1.

Sebutkan jenis-jenis statemen iterasi beserta perbedaan masing-masing.

2.

Sebutkan jenis-jenis cursor beserta perbedaan masing-masing.

3.

Sebutkan jenis-jenis exception beserta perbedaan masing-masing.

4.

Buatlah sebuah prosedur untuk mencetak sejumlah bilangan prima


pertama berdasar parameter input dengan menggunakan simple LOOP.
Contoh :
Input = 5 Output : 2 3 5
Input = 15 Output : 2 3 5 7 11 13

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

EM-10001 MG-10006 SAL


EM-10002 MG-10006 SAL
EM-10003 MG-10007 HR
EM-10004 MG-10007 HR
EM-10005 MG-10006 SAL
MG-10006 NULL
SAL
MG-10007 NULL
HR
...
...
...

Lebih Lanjut Mengenai Prosedur

emp_name
Sarah
John
Michael
George
Henk
Natalie
Matt
...

emp_salary
410
360
430
320
400
810
870
...

105

Politeknik Telkom

Database Management System

6.

Buatlah sebuah blok PL/SQL untuk menampilkan 5 employee dengan gaji


tertinggi. Data yang ditampilkan meliputi : emp_id, emp_name, dan
emp_salary. (Gunakan eksplisit cursor dan statemen WHILE).

7.

Buatlah sebuah fungsi yang akan mengembalikan nama manager dari


emp_id yang dimasukkan.
Contoh :
Input = EM-10001 Output : Natalie
(Gunakan implisit kursor dan salah satu exception handling apabila
emp_id yang dimasukkan tidak ditemukan di table).

106

Politeknik Telkom

Database Management System

Tingkat Lanjut Konsep Prosedural


-Index, Prosedur, Fungsi-

Overview

Untuk meningkatkan performansi saat dilakukan query terhadap suatu tabel


maka bisa dibuatkan index terhadap tabel tersebut dengan aturan tertentu.
Untuk membuat kode PL/SQL lebih bersifat modular dan lebih mudah dimaintain, maka dapat digunakan prosedur dan fungsi yang melakukan tujuan
spesifik.

Tujuan

1.
2.
3.

Mahasiswa memahami konsep dan penggunaan index.


Mahasiswa memahami konsep dan penggunaan prosedur.
Mahasiswa memahami konsep dan penggunaan fungsi.

Tingkat Lanjut Konsep Prosedural

107

Politeknik Telkom

7.1

Database Management System

Index

Index adalah objek database yang dapat dibuat untuk meningkatkan


performansi dari query. Index juga dapat dibuat secara otomatis oleh server
saat dibuat primary key atau unique constraint.

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.

7.1.1.1 Membuat Index Secara Otomatis


Saat pembuatan tabel dengan primary key, akan dibuat index untuk
tabel tersebut secara otomatis. Nama index akan dibuat sama dengan nama
constraint primary key-nya.
Informasi index-index yang sudah ada dapat dilihat pada data
dictionary, yaitu melalui view ALL_INDEXES, DBA_INDEXES, dan
USER_INDEXES.
Contoh
/*Membuat tabel dengan primary key*/
CREATE TABLE pegawai
( no_peg
VARCHAR2(8) NOT NULL,
nama_dpn
VARCHAR2(20) NOT NULL,
nama_blkg
VARCHAR2(20),
pos_id
VARCHAR2(8) NOT NULL,
gaji
NUMBER(8),
CONSTRAINT pk_pegawai PRIMARY KEY(no_peg)
);
SQL>
2
3
108

SELECT table_name, index_name, uniqueness,


status
FROM USER_INDEXES;

Politeknik Telkom

Database Management System

Output :
TABLE_NAME
INDEX_NAME
UNIQUENESS
STATUS
-------------- -------------- -------------- -----PEGAWAI
PK_PEGAWAI
UNIQUE
VALID

7.1.1.2 Membuat Index Secara Manual


CREATE INDEX [schema.]index
ON [schema.]tabel ({kolom [ASC|DSC]});
o
o

Index dapat dibuat oleh user pemilik schema atau user lain yang memiliki
system priviledge CREATE ANY INDEX atau yang mempunyai object
priviledge INDEX atas tabel tersebut.
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

SELECT table_name, index_name, uniqueness,


status
FROM USER_INDEXES;

Output :
TABLE_NAME
-------------PEGAWAI
PEGAWAI

INDEX_NAME
-------------PK_PEGAWAI
IDX_POS_GAJI

Tingkat Lanjut Konsep Prosedural

UNIQUENESS
-------------UNIQUE
NONUNIQUE

STATUS
-----VALID
VALID

109

Politeknik Telkom

Database Management System

7.1.1.3 Acuan Membuat Index


Meskipun index bertujuan untuk mempercepat akses data, tapi bukan
berarti semakin banyak index maka semakin cepat pula akses terhadap data.
Index harus di-update tiap kali operasi DML terhadap tabel tersebut dicommit. Oleh karenanya, makin banyak index maka makin banyak pula
pekerjaan yang harus dilakukan oleh server.
Buat index saat :
Sebuah kolom memiliki rentang nilai yang besar
Sebuah kolom memiliki banyak nilai NULL
Satu atau lebih kolom sering digunakan bersama pada
klausa WHERE atau kondisi JOIN
Tabel berukuran besar dan kebanyakan query yang
dilakukan terhadapnya menghasilkan kurang dari 2% 4% row dari tabel
Jangan buat index saat :
Sebuah kolom jarang digunakan sebagai kondisi pada
query
Tabel berukuran kecil dan kebanyakan query yang
dilakukan terhadapnya menghasilkan lebih dari 2% - 4%
row dari tabel
Tabel sering di-update
Kolom yang akan di-index direferensi sebagai bagian
dari suatu ekspresi

7.1.2

Mengganti Nama Index

ALTER INDEX [schema.]index RENAME TO index_baru;


Contoh
/*Mengganti nama index*/
ALTER INDEX idx_pos_gaji RENAME TO idx_posisi_gaji;
110

Politeknik Telkom

7.1.3

Database Management System

Menghapus Index

DROP INDEX [schema.]index;


Contoh
/*Menghapus index*/
DROP INDEX idx_pos_gaji;

7.2

Callable Procedure & Function

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

Prosedur adalah blok PL/SQL yang menyimpan sekumpulan perintah


tanpa disertai pengembalian nilai.

7.2.1.1 Membuat Prosedur


CREATE [OR REPLACE] PROCEDURE nama_prosedur
(parameter1 tipedata, parameter2 tipedata,...)
IS
variable_variabel_lokal tipedata;
BEGIN
statemen_statemen;
...
END;

Tingkat Lanjut Konsep Prosedural

111

Politeknik Telkom

Database Management System

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;

7.2.1.2 Eksekusi Prosedur


EXE[CUTE] nama_prosedur(daftar_parameter);
o

Bila prosedur dieksekusi dalam blok PL/SQL, maka statemen EXECUTE


tidak perlu dituliskan.

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

Database Management System

Fungsi

Fungsi adalah blok PL/SQL yang dapat mengembalikan nilai. Karena itu
perlu ditambahkan statemen RETURN untuk proses pengembalian nilai.

7.2.2.1 Membuat Fungsi


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;
Contoh
/*Fungsi pencarian nama supplier*/
CREATE OR REPLACE FUNCTION cari_supp
(pi_kode VARCHAR2)
RETURN supplier.nama_supp%TYPE IS
vNamaSupp

supplier.nama_supp%TYPE;

BEGIN
-- Mengambil nama supplier berdasar parameter
SELECT nama_supp INTO vNamaSupp FROM supplier
WHERE UPPER(kode_supp) = UPPER(pi_kode);
-- Mengembalikan nilai
RETURN vNamaSupp;
END;

Tingkat Lanjut Konsep Prosedural

113

Politeknik Telkom

Database Management System

7.2.2.2 Pemanggilan Fungsi


Berbeda dengan prosedur yang memerlukan statemen EXECUTE,
fungsi dapat langsung dimasukkan nilainya ke dalam variabel yang bertipe sama
dengan tipe nilai balikannya.
Contoh
/*Pemanggilan fungsi*/
DECLARE
nama supplier.nama_supp%TYPE;
BEGIN
-- Memasukkan nilai fungsi ke variabel nama
nama := cari_supp(SU-10001);
-- Mencetak nilai variabel nama ke layar
DBMS_OUTPUT.PUT_LINE (nama);
END;
Fungsi dapat pula dipanggil dengan statemen SELECT.
Contoh
/*Pemanggilan fungsi*/
SELECT cari_supp(SU-10001) from DUAL;

7.2.3

Parameter

Parameter adalah nilai yang dilewatkan dalam sebuah prosedur atau


fungsi. Ada tiga jenis parameter : parameter input, output, dan input-output.

114

Politeknik Telkom

Database Management System

7.2.3.1 Parameter Input


Parameter input berguna untuk menyimpan nilai yang akan digunakan
sebagai input pada badan prosedur maupun fungsi. Parameter ini ditandai
dengan mode IN, tapi bila mode ini dihilangkan maka secara otomatis akan
dianggap sebagai parameter input juga.
Contoh
/*Prosedur pengecekan stok barang*/
CREATE OR REPLACE PROCEDURE prc_stok_brg
(pi_brg VARCHAR2) IS
vstok

INTEGER;

BEGIN
-- Mengambil nilai stok dari barang
-- (nilai stok adalah bilangan positif)
SELECT stok_barang INTO vstok FROM barang
WHERE UPPER(nama_barang) = UPPER(pi_brg);
--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);

Tingkat Lanjut Konsep Prosedural

115

Politeknik Telkom

Database Management System

7.2.3.2 Parameter Output


Parameter output berperan untuk menampung nilai hasil dari suatu
proses yang dilakukan di dalam prosedur atau fungsi. Pada kenyataannya,
parameter ini lebih sering ditemukan pada prosedur. Parameter output
ditandai dengan mode OUT
Contoh
/*Prosedur pencarian nama supplier*/
CREATE OR REPLACE PROCEDURE cari_supp
( pi_kode IN VARCHAR2,
vNamaSupp OUT supplier.nama_supp%TYPE) IS
BEGIN
-- Mengambil nama supplier berdasar parameter
SELECT nama_supp INTO vNamaSupp FROM supplier
WHERE UPPER(kode_supp) = UPPER(pi_kode);
END;
Contoh blok PL/SQL yang mengeksekusi prosedur di atas :
/*Blok yang mengeksekusi prosedur*/
DECLARE
nama
supplier.nama_supp%TYPE;
BEGIN
-- Eksekusi prosedur
cari_supp(SU-10001, nama);
-- Mencetak nilai variabel nama ke layar
DBMS_OUTPUT.PUT_LINE (nama);
END;

116

Politeknik Telkom

Database Management System

7.2.3.3 Parameter Input-Output


Parameter ini merupakan gabungan dari kedua parameter sebelumnya.
Mula-mula badan prosedur atau fungsi akan melakukan proses terhadap nilai
input yang dikirimkan oleh parameter ini, kemudian nilai hasil dari proses
tersebut akan dimasukkan kembali ke parameter ini.
Suatu parameter dikatakan sebagai paramter input-output bila
dituliskan dalam mode IN OUT.
Contoh
/*Prosedur pencarian nama supplier*/
CREATE OR REPLACE PROCEDURE cari_supp
( vParam
IN OUT VARCHAR2) IS
vHasil

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

Database Management System

-- Mencetak nilai parameter output


DBMS_OUTPUT.PUT_LINE (vLokal);
END;

118

Politeknik Telkom

Database Management System

Rangkuman

16. Index adalah objek database yang dapat dibuat untuk meningkatkan
performansi dari query.
17. Index dapat dibuat dengan cara :
Otomatis : dibuat secara otomatis oleh server saat pembuatan tabel
dengan primary key atau unique constraint.
Manual : dibuat secara manual dengan statemen CREATE INDEX.
CREATE INDEX [schema.]index
ON [schema.]tabel ({kolom [ASC|DSC]});
18. Manipulasi terhadap index :
Mengganti nama index
ALTER INDEX [schema.]index RENAME TO
index_baru;

Menghapus index
DROP INDEX [schema.]index;

19. Prosedur adalah blok PL/SQL yang menyimpan sekumpulan perintah


tanpa disertai pengembalian nilai.
CREATE [OR REPLACE] PROCEDURE nama_prosedur
(parameter1 tipedata, parameter2 tipedata,...)
IS
variable_variabel_lokal tipedata;
BEGIN
statemen_statemen;
...
END;

Tingkat Lanjut Konsep Prosedural

119

Politeknik Telkom

Database Management System

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

Parameter input : menyimpan nilai yang akan digunakan sebagai input


pada badan prosedur maupun fungsi. Ditandai dengan mode IN.
Parameter output : menampung nilai hasil dari suatu proses yang
dilakukan di dalam prosedur atau fungsi. Ditandai dengan mode
OUT.
Parameter input-output : berfungsi sebagai parameter input maupun
output. Ditandai dengan mode IN OUT.

Politeknik Telkom

Database Management System

Studi Kasus : Pembuatan Laporan


Pada studi ini, kasus inventory akan digunakan sebagai contoh dalam
penerapan index, prosedur, maupun fungsi.
1.

Buat 3 buah table dengan spesifikasi sebagai berikut :


o

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),

Tingkat Lanjut Konsep Prosedural

121

Politeknik Telkom

Database Management System

CONSTRAINT FK_PASOK_BARANG FOREIGN


KEY(PAS_BRG) REFERENCES BARANG(BRG_ID)
);
2.

Buatlah sebuah nonunique index untuk field PAS_DATE pada tabel


PASOK.

3.

Insert data pada ketiga tabel tersebut :


o

supplier
SUPP_ID

SUPP_NAME

SUPP_ADDR

SP-10001
SP-10002
SP-10003
...

CV. KARYA
PT. MAJU
CV. MURAH
...

Jl. Pembangunan, Jakarta


Jl. Diponegoro, Yogyakarta
Jl. Harapan, Bandung
...

(Bila perlu, tambahkan data lainnya).


o

barang
BRG_ID

BRG_NAME

BRG_STOK

BR-10001
BR-10002
BR-10003
...

Lemari pakaian
Meja belajar
Kasur
...

15
17
23
...

(Bila perlu, tambahkan data lainnya).


o

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

(Bila perlu, tambahkan data lainnya).

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.

Buatlah sebuah fungsi untuk mengecek stok suatu jenis barang :


o
o

5.

Database Management System

Parameter input adalah id barang.


Akan mengembalikan TRUE bila stok barang tidak nol, dan FALSE
bila stok sama dengan nol.

Buatlah sebuah prosedur yang akan mencetak laporan pasok berdasar


supplier tertentu :
o
o

Parameter input adalah id supplier.


Bentuk laporan :
Nama Supplier
Alamat

Tgl Pasok

o
6.

: _______________
: ____________________
____________________

Nama Barang

Jumlah Pasok

Contoh pemanggilan prosedur : EXEC nama_prosedur (SP-10001);

Buatlah sebuah prosedur yang akan mencetak laporan pasok berdasar


bulan dan tahun tertentu :
o
o

Parameter input adalah bulan dan tahun pasok.


Bentuk laporan :
Bulan : __________*
Tahun : __________
Nama Supplier

Nama Barang

Jumlah Pasok

Contoh pemanggilan prosedur : EXEC nama_prosedur (08, 2008);


* Bulan ditampilkan dalam format Januari...Desember, untuk
itu perlu ditambahkan fungsi pendukung untuk mengkonversi format
bulan dari 08 menjadi Januari...Desember.

Tingkat Lanjut Konsep Prosedural

123

Politeknik Telkom

Database Management System

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.

Mahasiswa Praktikan memahami trigger.

2.

Mahasiswa mengerti fungsi dan kelebihan penggunaan trigger.

3.

Mahasiswa mampu mengimplementasikan trigger

124

Politeknik Telkom

8.1

Database Management System

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

Fungsi dan Kelebihan

Fungsi dan kelebihan penggunaan trigger antara lain:

Memperbaiki integritas data dengan membuat integrity constraint


yang kompleks yang mana tidak mungkin ditangani oleh sintaks
pembutan tabel (lihat modul 1).

Memvalidasi transaksi data.

Memperbaiki keamanan database dengan menyediakan audit yang


lebih kompleks mengenai informasi perubahan database dan user
siapa yang melakukan perubahan.

8.3

Aplikasi yang dapat dilakukan oleh Trigger


diantaranya adalah :
Membuat isi dari kolom yang diambil dari kolom lain.
Membuat mekanisme validasi yang mencakup query pada banyak
tabel.
Membuat log untuk mendaftarkan penggunaan table.
Mengupdate tabel tabel lain apabila ada penambahan atau
perubahan lain di dalam tabel yang sedang aktif.

Query Optimization

125

Politeknik Telkom

8.4

Database Management System

SINTAKS

CREATE [OR REPLACE] TRIGGER [user.]nama_trigger


{BEFORE | AFTER | INSTEAD OF}
{DELETE

INSERT

UPDATE

[OF

nama_kolom

[,

nama_kolom] ...]}
[OR {DELETE | INSERT | UPDATE [OF column [,
column] ...]}]...
ON [user.]{nama_tabel | nama_view}
[{REFERENCING {OLD [AS]

old_value

| NEW [AS]

new_value} ...]
FOR EACH {ROW | STATEMENT} [WHEN (condition)]
PL/SQL_BLOCK
Nama

trigger

sebaiknya

dengan

jelas

mencerminkan

tabel

yang

diaplikasikan. Perintah DML trigger, status before/after, dan apakah row


level atau statement level.
Bagian
trigger timing

Keterangan
ketika trigger berelasi
ke event
manipulasi data pada

trigger event

tebel/ view yang


menyebabkan trigger
terpacu

trigger type
trigger body
126

Nilai yang mungkin


BEFORE
AFTER
INSTEAD OF
INSERT
UPDATE
DELETE

berapa kali body

ROW

trigger dieksekusi

STATEMENT

apa action dari trigger

Block PL/SQL lengkap

Politeknik Telkom

Database Management System

misalnya trigger BEFORE UPDATE dengan row level pada tabel


KARYAWAN dapat diberi nama bef_upd_row_karyawan.

8.5

TIPE TRIGGER

a. Row-level and Statement-level Trigger


Row-level and Statement-level trigger merupakan pembagian trigger
berdasarkan jumlah aksinya.
Row-level trigger dieksekusi untuk setiap row yang dimanipulasi pada suatu
transaksi. Dengan kata lain, row-level trigger mengerjakan trigger action
satu kali untuk setiap row yang sedang dimanipulasi. Penerapan trigger ini
ditunjukkan oleh adanya klausa FOR EACH ROW.
Statement-level trigger dieksekusi satu kali pada suatu transaksi, tanpa
memperhatikan jumlah row yang terlibat. Misalnya, jika terdapat suatu
transaksi yang menginsertkan 1000 row ke tabel, maka statement-level
trigger hanya akan dieksekusi sekali saja.
b. Before and After Trigger
Karena trigger dipicu oleh suatu kejadian (event), maka eksekusinya bisa
diatur apakah sebelum atau sesudah event tersebut.
Before trigger menjalankan trigger action sebelum event atau statement
pemicu berlangsung. Oleh karena itu, trigger ini cocok digunakan untuk
mendeteksi bilamana event boleh dilanjutkan maupun tidak. After trigger
menjalankan trigger action setelah event terjadi.
Query Optimization

127

Politeknik Telkom

Database Management System

Kita mungkin akan berhubungan dengan data lama (old) dan data baru
(new) yang terjadi dalam transaksi. Dalam trigger, dikenal istilah alias atau
referensi, yaitu sejenis variabel yang menyimpan nilai dari suatu kolom
dalam tabel. Alias terbagi menjadi dua, yaitu:
:old

variabel yang menyimpan nilai lama kolom sebelum trigger

dieksekusi.
:new variabel yang menyimpan nilai baru kolom setelah trigger
dieksekusi.

Untuk statement INSERT, alias yang digunakan hanya :new saja,


yaitu untuk menyimpan nilai yang akan dimasukkan ke dalam tabel.

Untuk UPDATE, alias yang digunakan adalah :new dan :old,


sedangkan

Untuk DELETE, hanya alias :old saja, yaitu untuk menyimpan nilai
yang akan dihapus.

Alias dituliskan di depan nama kolom yang bersangkutan. Penulisannya


adalah seperti :new.nama_kolom dan :old.nama_kolom.

c.

Instead of Trigger
Instead of trigger hanya diperuntukkan bagi view dan diaktivasi jika
terjadi perubahan pada base table (tabel asli). Trigger ini tidak dapat
menggunakan UPDATE OF nama_kolom maupun BEFORE dan AFTER
trigger.

128

Politeknik Telkom

Database Management System

Tipe-tipe trigger di atas dapat dikombinasikan menjadi 14 macam :


1. BEFORE INSERT row
2. BEFORE INSERT statement
3. AFTER INSERT row
4. AFTER INSERT statement
5. BEFORE UPDATE row
6. BEFORE UPDATE statement
7. AFTER UPDATE row
8. AFTER UPDATE statement
9. BEFORE DELETE row
10. BEFORE DELETE statement
11. AFTER DELETE row
12. AFTER DELETE statement
13. INSTEAD OF row
14. INSTEAD OF statement

8.6

BATASAN TRIGGER

Dalam penggunaannya, trigger memiliki batasan sebagai berikut:

Tidak dapat menggunakan perintah ROLLBACK dan COMMIT.

Tidak dapat memanggil fungsi dan prosedur yang memiliki


ROLLBACK dan COMMIT.

Tidak dapat diimplementasikan pada kolom suatu tabel yang memiliki


constraint, jika pada akhirnya akan menyebabkan pelanggaran
constraint.

Query Optimization

129

Politeknik Telkom

8.7

Database Management System

STUDI KASUS

Sebuah apotek mempunyai database yang di dalamnya terdapat tabel-tabel


dengan spesifikasi antara lain sebagai berikut:

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

SQL> CREATE OR REPLACE TRIGGER


aft_ins_row_penjualan
2 AFTER INSERT ON penjualan
3 FOR EACH ROW
4 BEGIN
5
IF INSERTING THEN
6
UPDATE obat
7
SET stok = stok - :new.jumlah
8
WHERE id_obat = :new.id_obat;
9
END IF;
10 END;
11 /
Trigger created.

130

Politeknik Telkom

Database Management System

Contoh 10.1
Trigger dimaksudkan untuk mengupdate tabel obat secara otomatis jika
terjadi insert pada tabel penjualan. Alias :new.jumlah dan :new.id_obat
berisi data baru tabel penjualan. Sedangkan stok dan id_obat merupakan
kolom dari tabel obat.
Untuk mengetahui kebenaran dari trigger, maka kita bisa mencoba statement
berikut:

SQL> INSERT INTO penjualan VALUES(2111, 'DT01', 5,


20000);
1 row created.
SQL> SELECT id_obat, merk, stok, harga FROM obat;
ID_OBAT MERK
STOK
HARGA
------------ -------------- --------- -------DT01 Decolgen
195
4000
Terlihat bahwa stok obat berkurang secara otomatis setiap terjadi insert pada
penjualan.
Contoh 10.2

Perhatikan penggunaan :old dan :new.


SQL> CREATE OR REPLACE TRIGGER
aft_upd_row_penjualan
2 AFTER UPDATE OF persen_laba ON histori_harga
3 FOR EACH ROW
4 BEGIN
5
IF UPDATING THEN
6
UPDATE obat
7
SET harga = :old.harga_asli +
((:old.harga_asli *
8

Query Optimization

131

Politeknik Telkom

Database Management System

:new.persen_laba)/100)
9
WHERE id_obat = :old.id_obat;
10
END IF;
11 END;
12 /
Trigger created.

Untuk mengetahui kebenaran trigger di atas, maka lakukan statementdi


bawah. Akan terlihat bahwa trigger mengubah nilai pada kolom harga
pada tabel obat apabila dilakukan updating pada kolom persen_laba pada
tabel histori_harga.
SQL> update histori_harga set persen_laba = 50;
1 row updated.
SQL> SELECT id_obat, merk, stok, harga FROM obat;
ID_OBAT MERK
STOK
HARGA
------------ -------------- --------- -------DT01 Decolgen
195
4800

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

Database Management System

END IF;
END;
/

Trigger created.

Untuk mengecek trigger di atas, eksekusi statement berikut ini:


SQL>

UPDATE

obat

SET

id_obat='DT02'

WHERE

id_obat='DT01';

Maka hasilnya akan terlihat seperti di bawah ini:


SQL>

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

Database Management System

Error yang terjadi disebabkan karena adanya constraint foreign key


antara tabel obat, histori_harga, dan penjualan. Jika terjadi pengubahan
id_obat pada tabel obat, trigger hanya dimaksudkan untuk mengubah
id_obat pada tabel histori_harga, namun tidak demikian pada tabel
penjualan. Hal inilah yang menyebabkan error.

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

Database Management System

MENGUBAH STATUS TRIGGER

Pada saat diciptakan, trigger berstatus aktif (enable). Kita dapat mengubah
status trigger dengan perintah-perintah berikut:

ALTER TRIGGER nama_trigger DISABLE


Sintaks tersebut digunakan untuk menonaktifkan trigger yang dibuat.

ALTER TABLE nama_tabel DISABLE ALL TRIGGER


Syntax tersebut digunakan untuk menonaktifkan semua trigger yang
ada pada suatu tabel.

ALTER TRIGGER nama_trigger ENABLE

ALTER TABLE nama_tabel ENABLE ALL TRIGGER

DROP TRIGGER nama_trigger


Syntax tersebut digunakan untuk menghapus trigger yang telah
dibuat.

8.9

Menonaktifkan Trigger

Sintaks:
ALTER TRIGGER nama_trigger DISABLE | ENABLE
Keterangan:
DISABLE :

untuk menonaktifkan trigger yang sudah dibuat

ENABLE

untuk mengaktifkan kembali trigger yang sudah di DISABLE.

Contoh 10.4 :
Untuk men-disable trigger UPDATE_PEGAWAI, gunakan sintaks berikut:
ALTER TRIGGER UPDATE_PEGAWAI DISABLE

Query Optimization

135

Politeknik Telkom

Database Management System

Rangkuman
1.

Trigger adalah blok PL/SQL atau prosedur yang berhubungan dengan


table, view, skema atau database yang dijalankan secara implicit pada
saat terjadi event.

2.

Tipe dari trigger adalah : Application trigger (diaktifkan pada saat


terjadi event yang berhubungan dengan sebuah aplikasi) dan database
trigger (diaktifkan pada saat terjadi event yang berhubungan dengan
data)

3.

Trigger dibuat pada saat yang tepat jika diperlukan yaitu untuk
membentuk sebuah aksi tertentu terhadap suatu event dan
memusatkan operasi global

4.

Penggunaan trigger yang terlalu berlebihan akan menyebabkan terjadi


sifat ketidaktergantungan yang terlalu kompleks sehingga akan
mempersulit pemeliharaan dari aplikasi yang besar.

5.

Trigger berisi komponen-komponen : trigger timing, trigger event,


nama tabel, tipe trigger, klausa WHEN dan trigger body.

6.

Beberapa event pada trigger bisa dikombinasikan dalam sebuah


trigger dengan menggunakan predikat kondisional INSERTING,
UPDATING dan DELETING

7.

Pada Row Trigger, nilai dari kolom sebelum dan sesudah perubahan
data dapat dirujuk dengan menggunakan OLD dan NEW qualifier.

136

Politeknik Telkom

Database Management System

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

Buatlah sebuah trigger yang dapat menginputkan nama dan tanggal


user yang logon pada database di dalam sebuah table. Hasil table
tersebut seperti di bawah ini :

Note : gunakan database event.


2.

Berikan contoh instead of trigger berdasarkan studi kasus KPK di


atas!

Query Optimization

137

Politeknik Telkom

138

Database Management System

3.

Suatu partai akan dapat diikutsertakan dalam pemilu jika partai


tersebut memiliki jumlah anggota minimal 100 orang. Buatlah trigger
yang akan memeriksa jumlah anggota suatu partai jika partai tersebut
ingin diikutsertakan dalam pemilu!

4.

Buatlah contoh row level trigger dan statement level berdasarkan


studi kasus KPK, kemudian analisa perbedaannya!

5.

Jika ID_Petugas seorang petugas KPU berubah maka ID_Petugas


pada tabel mendaftar pun harus berubah. Mengapa demikian?
Bagaimana triggernya?

Politeknik Telkom

Database Management System

Query Optimization

Overview

Proses dari optimisasi query meliputi tahapan-tahapan yang harus


dilalui oleh suatu query tree dalam sebuah optimizer sehingga akan
menghasilkan perencanaan aljabar secara fisik yang optimal, yang nantinya
akan dijalankan untuk menghasilkan query yang diinginkan.

Tujuan

1.
2.
3.
4.

Mahasiswa memahami konsep optimasi query.


Mahasiswa memahami konsep dan algoritma sorting
Mahasiswa dapat memahami dan menggunakan operator relational
Mahasiswa dapat memahami algoritma join

Query Optimization

139

Politeknik Telkom

9.1

Database Management System

Query Optimization

Query Optimazion dalah proses dimana DBMS (Optimizer) menunjukkan


strategi yang terbaik untuk menjalankan suatu query. Tugas utama optimizer
adalah menemukan plan yang baik untuk mengevaluasi ekspresi. Dalam
melakukan optimalisasi query harus memperhatikan cara alternatif untuk
mengevaluasi suatu query yaitu :
Ekuivalent ekspression
Beberapa algoritma untuk beberapa operasi.

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.

Optimalisasi ekspresi aljabar relasional melibatkan dua langkah besar yaitu:


Mengumpulkan rencana alternatif untuk mengevaluasi ekspresi.
Biasanya, optimizer dianggap sebagai subset dari semua plan yang
mungkin karena jumlah plan yang ada sangat banyak.
Memperkitakan cost tiap plan yang terkumpul dan memilih plan
dengan perkiraan cost paling rendah
140

Politeknik Telkom

Database Management System

Optimizer Mode :
a. Cost based optimizer
Optimizer akan memutuskan rencana eksekusi (execution plan ) mana
yang terbaik dan paling efisien dengan mempertimbangkan pada
ketersediaan path aksesnya dan juga berdasar pada statistik informasi
untuk skema objek (tabel/indeks) yang di akses oleh sebuah sql
statement.
Secara konsep, pendekatan cost-based terdiri atas 3 langkah berikut :
Optimizer membangkitkan seperangkat rencana eksekusi yang
potensial untuk SQL Statement berdasar pada ketersediaan path dan
petunjuk tentang sql statement tersebut.
Optimizer memperhitungkan cost pada tiap rencana eksekusi
berdasarkan statistik pada kamus data untuk distribusi data dan
karakteristik maupun informasi tentang penyimpanan dari tabel ,
indeks , dan partisi yang di akses oleh sebuah sql statement.
Optimizer membandingkan biaya setiap execution plan, dan
kemudian memilih plan dengan biaya paling rendah
Note :
Cost dapat diartikan sebagai sebuah nilai resource yg dibutuhkan
untuk eksekusi sql statement dr beberapa execution plannya
Optimizer menghitung cost dari tiap kemungkinan metode akses
dan urutan pen-joinan berdasar estimasi resource seperti CPU
time, memori,I/O untuk ekseskusi statement sql menggunakan plan
Execution plan secara serial dengan cost besar butuh waktu
eksekusi lebih banyak daripada cost yg kecil
Execution plan secara parallel, penggunaan resource tidak langsung
berpengaruh pada waktu yg dibutuhkan untuk eksekusi statement
sql
b.

Rules based optimizer


Optimizer memilih apakah menggunakan akses path pada beberapa
pertimbangan faktor sebagai berikut :
1. Ketersediaan akses path pada tiap statement
optimizer akan mengamati kondisi statement klausa WHERE
untuk memutuskan akses path yg tersedia ( urutan kondisi dalam
sebuah klausa WHERE tidak mempengaruhi )

Query Optimization

141

Politeknik Telkom

2.

Database Management System

Peringkat access path tersebut


optimizer memilih akses path dengan peringkat
tertinggi

terbanyak dan

Tahapan proses optimisasi query secara umum adalah sebagai berikut :


1. Memasukkan query ke dalam representasi internal berdasarkan ekspresi
aljabar yang sesuai.
2. Mengkonversikannya ke dalam bentuk canonical dengan cara mula-mula
dengan menggunakan cartesian product dari klausa FROM, setelah itu
menggabungkan dan memilih kondisi-kondisi dari klausa WHERE dan
melakukan proyeksi-proyeksi dari klausa SELECT.
3. Memilih calon-calon prosedur low level, yaitu mempertimbangkan indexindex atau jalan akses lainnya, membagi nilai-nilai penyimpanan data dari
record-record untuk memilih satu atau lebih calon-calon prosedur untuk
mengimplementasikan tiap-tiap operasi low level dalam query.
4. Menghasilkan rencana-rencana query dan memilih yang termurah, yaitu
membuat sekumpulan calon rencana-rencana query dan kemudian
memilih yang termurah.
Sebelum proses optimisasi query dilakukan, sebuah query harus diproses
dahulu di dalam parser untuk mengecek kevalidan query tersebut dan
kemudian query tersebut diterjemahkan ke dalam sebuah bentuk internal,
yaitu ekspresi relasi aljabar. Biasanya, hasil dari proses parsing di dalam parser
adalah berupa sebuah bentuk tree yang disebut dengan parse tree.
Jika suatu ekspresi aljabar relasional mengandung lebih dari satu operasi
primitif (select, project, join) maka ada dua cara untuk melaksanakan operasioperasi ini:
a. Materialization
Evaluasi Materialization: evaluasi satu operasi pada satu waktu, dimulai
dari yang paling dalam. Gunakan hasil antara (intermediate result) untuk
materialisasi (membuat relasi temporer) untuk mengevaluasi operasi level
berikutnya.
Contoh: pada gambar di bawah, hitung dan simpan

balance 2500 (account)

142

Politeknik Telkom

Database Management System

kemudian hitung join antara relasi temporer denga customer, simpan lagi
sebagai relasi temporer, lakukan proyeksi pada customer-name untuk
relasi temporer tersebut.

Evaluasi dengan materialisasi selalu dapat dilakukan. Tetapi cost untuk


menuliskan hasil ke disk dan membacanya kembali dapat sangat tinggi.
Rumus perhitungan cost untuk masing-masing operasi (bagian
sebelumnya) mengabaikan biaya untuk menuliskan hasil ke disk, sehingga
Cost keseluruhan = Jumlah cost masing-masing operasi + cost untuk
menuliskan hasil-hasil antara ke disk
Untuk mempercepat materialisasi dilakukan dengan double buffering:
menggunakan dua output buffer untuk masing-masing operasi, ketika satu
buffer penuh maka tuliskan isinya ke disk sementara buffer yang lain diisi.
Materialization memungkinkan penulisan ke disk dengan komputasi
dilakukan secara bersamaan sehingga mengurangi waktu eksekusi
b.

Pipelining
Evaluasi Pipelining: merupakan evaluasi beberapa operasi secara
bersamaan dan berikan hasil dari satu operasi ke operasi berikutnya.
Contoh: di ekspresi sebelumnya, jangan simpan hasil dari

balance 2500 (account)


Melainkan, berikan tuple langsung ke join. Dengan cara yang sama, jangan
simpan hasil join, berikan tuple langsung ke proyeksi. Cost yang
dibutuhkan untuk melakukan pipelining lebih murah dari materialisasi
karena tidak perlu menyimpan relasi temporer di disk. Namun, pipelining
tidak selalu bisa dilakukan misal, sort, hash-join. Agar pipelining efektif,
gunakan algoritma yang membangkitkan output tuple pada saat tuple
diterima sebagai input terhadap operasi tersebut. Pipeline dapat
dilakukan dengan dua cara: demand driven dan producer driven
Query Optimization

143

Politeknik Telkom

Database Management System

Ekuivalences Rules
1. Conjunctive selection operation

( E ) ( ( E ))

2.

Selection operation

3.

Projection operation

4.

Combine selection with cartesian product and theta join


a. (E1 X E2) = E1 E2
b. 1(E1 2 E2) = E1 1 2 E2
Theta join operation (and natural joins) are commutative.
E1 E2 = E2 E1
(a.) Natural join are associative:
(E1 E2) E3 = E1 (E2 E3)

5.
6.

( ( E )) ( ( E ))
1

t1 ( t 2 ( ( tn ( E )) )) t1 ( E )

(b.) Theta Join are associative in the following manner


(E1 1 E2) 2 3 E3 = E1 2 3 (E2 2 E3)

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.

Database Management System

The projections operation distributes over the theta join operation as


follows:
(a) if P
involves only attributes from L1 L2

L1 L2 ( E1....... E2 ) ( L1 ( E1 )) ...... ( L2 ( E2 ))

(b) Consider a join E1 E2.


Let L1 and L2 be sets of attributes from E1 and E2, respectively.
Let L3 be attributes of E1 that are involved in join condition , but
are not in L1 L2, and let L4 be attributes of E2 that are involved
in join condition , but are not in L1 L2.

L1 L2 ( E1..... E2 ) L1 L2 (( L1 L3 ( E1 )) ...... ( L2 L4 ( E2 )))

9.

Set operations union and intersection


E1E2=E2E1
E1 E2 = E2 E1
(*set difference is not commutative *).
10. Set union and intersection are associative
(E1 E2) E3 = E1 (E2 E3)
(E1 E2) E3 = E1 (E2 E3)
11. The selection operation distributes over , and .
(E1 E2) = (E1) (E2)
and similarly for and in place of Also:
(E1 E2) = (E1) E2
and similarly for in place of , but not for
12. The projection operation distributes over union
L(E1 E2) = (L(E1)) (L(E2))

9.2

Sorting

Sorting kumpulan record pada beberapa (search) key merupakan operasi


yang sangat berguna. Key dapat berupa atribut tunggal atau daftar atribut
terurut. Sorting perlu dilakukan dalam berbagai situasi, termasuk hal penting
berikut:
1. Sorting record merupakan langkah pertama dalam bulk-loading tree index
2. Sorting berguna untuk menghilagkan salinan duplikasi pada kumpulan
record
3. Algoritma yang digunakan secara luas untuk melakukan operasi aljabar
relasional yang sangat penting, yang disebut join ,memrlukan tahap sorting
Query Optimization

145

Politeknik Telkom

Database Management System

Algoritma sorting :
a. Two-way Merge Sort Sederhana
Algoritma ini hanya memanfaatkan 3 page memory utama dan hanya
direpresentasikan untuk tujuan pedagogikal. Walaupun seluruh file tidak
muat dalam memory utama yang tersedia, kita dapat menyortirnya
dengan memecah file tersebut menjadi subfile yang lebih kecil, menyortir
subfile tersebut kemudian menggabungkan subfile tersebut dengan
menggunakan sejumlah kecil memory utama pada waktu tertentu. Pada
tahap pertama, halaman dalam file dibaca satu per satu. Setelah halaman
dibaca, record didalamnya disortir dan halaman tersortir (sorted run
panjangnya satu halaman) ditulis. Quicksort atau teknik sorting dalam
memory yang lain dapat digunakan untuk menyortir record pada
halaman. Pada tahap berikutnya, pasangan run dari output dari tahap
sebelumnya dibaca dan digabungkan untuk menghasilkan run yang
panjangnya 2 kali lipat panjang sebelumnya.
Jika jumlah halaman dalam file inputan 2k, untuk beberapa k maka :
- tahap 0 menghasilkan 2k run tersortir masing-masing satu halaman
- tahap 1 menghasilkan 2k-1 run tersortir masing-masing dua halaman
- tahap 2 menghasilkan 2k-2 run tersortir masing-masing empat
halaman, dan seterusnya sampai tahap k menghasilkan satu run 2 k
halaman tersortir.
Dalam tiap tahap, kita membaca setiap halaman dalam file,
memproses dan menulisnya. Oleh karena itu, kita mempunyai dua disk
I/O per halaman, per tahap. Jumlah tahap adalah [log2 N]+1 dimana N
adalah jumlah halaman dalam file. Biaya keseluruhan adalah 2N ([log2
N]+1) I/O.
Algoritma ini hanya memerlukan tiga halaman buffer dalam memory
utama. Observasi ini memunculkan hal penting, jadi sekalipun kita
mempunyai ruang buffer yang lebih, algoritma two-way merge sort
sederhana tidak akan memanfaatkanya secara efektif.

gambar 11.2 a
146

Politeknik Telkom

Database Management System

Contoh :
Dibawah ini terdapat file input dengan 7 buah halaman. Sorting tersebut
memerlukan 2 tahap dan pada tiap tahap kita membaca dan menulis tujuh
halaman , dengan total 56 I/O. Hasil ini sesuai dengan analisis sebelumnya
karena:
2x7 ([log2 N7+1)= 56.

gambar 11.2 b
ket : dark page pada gambar menunjukan apa yang akan terjadi pada file
delapan halaman; jumlah tahap tetap empat ([log2 8+1=4), tetapi kita
membaca dan menulis halaman tambahan dalam tiap tahap dengan total
64 I/O.
b.

External Sorting
Algoritma ini memerlukan lebih dari tiga halaman buffer. Selain itu
algoritma ini juga melakukan 2 modifikasi penting pada two-way merge
sort :
Pada tahap 0, baca B halaman dan sortir secara internal untuk
menghasilkan run [N/B] masing-masing B halaman (kecuali run
terakhir, yang mungkin berisi lebih sedikit halaman).
Tahap i=1,2,... gunakan B-1 halaman buffer untuk input dan gunakan
sisa halaman untuk output; dengan demikian kita melakukan (B-1)
cara penggabungan dalam tiap tahap

Query Optimization

147

Politeknik Telkom

Database Management System

Keuntungan external sort:


Mengurangi jumlah run yang dihasilkan oleh tahap 0 sampai
N1=[N/B]
Dengan melakukan (B-1) cara penggabungan, jumlah tahap dapat
dikurangi sehingga menjadi [logB-1 N1] +1

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

rating > 8(S2)

Politeknik Telkom

Database Management System

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

Ada dua algoritma untuk melakukan proyeksi, yaitu :


a. proyeksi berdasarkan sorting
langkah-lagkah melakukan proyeksi dengan sorting:
- men-scan R dan menghasilkan kumpulan tuple yang hanya berisi atribut
yang diinginkan
- menyortir kumpulan tuple ini menggunakan kombinasi dari semua
atributnya sebagai key untuk sorting
- men-scan hasil yang disortir, membandingkan tuple yang berdekatan
dan membuang duplikat.
a. proyeksi berdasarkan hashing
jika kita mempunyai banyak page buffer, maka pendekatan hash-based
bisa dipertimbangkan. Terdapat dua langkah untuk melakukan proyeksi
dengan menggunakan algoritma ini :
- tahap partisi
Pada tahap partisi kita mempunyai satu page buffer input dan B-1
pagebuffer output. Relasi R dibaca ke dalam page buffer input, setiap
satu halaman. Halaman input diproses sebagai berikut: tiap tuple, kita
memproyeksikan atribut yang tidak diinginkan lalu mengaplikasikan
fungsi hash h pada kombinasi dari semua atribut yang ada. Fungsi h
dipilih sehingga tuple didistribusikan secara seragam pada suatu B-1
Query Optimization

149

Politeknik Telkom

Database Management System

partisi, dan terdapat satu halaman output per partisi. Setelah proyeksi,
tuple diisi ke halaman buffer output yang di hash menurut h.
Pada akhir partisi, kita mempunyai B-1 partisi, masing-masing berisi
kumpulan tuple yang menggunakan nilai hash umum.
Dua tuple yang tercakup dalam partisi yang berbeda dijamin tidak
menjadi duplikat karena mereka mempunyai nilai hash yang berbeda.
Jadi, jika dua tuple merupakan duplikat, maka mereka berada dalam
partisi yang sama.
- tahap eliminasi duplikat
kita membaca B-1 partisi satu per satu untuk menghilangkan duplikat.

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

Database Management System

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

9.3.5 Algoritma Join


Ada beberapa algoritma berbeda untuk implementasi join, yaitu :
a. Nested-loop join
Algoritma untuk menghitung theta join r s
for each tuple tr in r do begin
for each tuple ts in s do begin
test pair (tr,ts) to see if they satisfy
the join condition
if they do, add tr ts to the result.
end
end
Dimana r disebut sebagai relasi luar (outer relation) dan s sebagai relasi
dalam (inner relation) dari join. Algoritma join ini tidak membutuhkan
indeks sehingga dapat digunakan dalam kondisi join apapun.
Query Optimization

151

Politeknik Telkom

Database Management System

Kelemahan dari algoritma ini adalah mempunyai cost yang mahal, karena
harus memeriksa setiap pasangan tuple di kedua relasi. Dalam keadaan
paling buruk (worst case), jika hanya mempunyai memory yang mampu
menampung satu blok dari masing-masing relasi, perkiraan cost adalah
nr * Bs + br
Jika relasi yang lebih kecil dapat masuk seluruhnya ke dalam memory,
maka gunakan itu sebagai relasi bagian dalam. Mengurangi biaya menjadi
br + bs disk access.
Contoh :
Terdapat catalog berisi informasi berikut ini:
- ncustomer = 10,000
- fcustomer = 25, sehingga bcustomer=10000/25=400
- ndepositor=5000
- fdepositor=50, sehingga bdepositor=5000/50=100
- V(customer-name,depositor) = 2500, rata-rata tiap nasabah punya dua rekening
Jawab :
Dengan mengasumsikan worst case, maka perkiraan biaya akan menjadi
5000*400 + 100 = 2,000,100 disk acess dengan depositor sebagai relasi
luar (outer relation)
1000*100+400 = 1,000,400 disk access dengan customer sebagai relasi
bagian luar
Jika relasi yang lebih kecil (depositor) dapat masuk seluruhnya di
memory, maka perkiraan biaya akan menjadi 500 disk access.
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

Database Management System

Cost yang dibutuhkan :


worst case: br*bs+br block access
Masing-masing blok di relasi bagian dalam s dibaca satu kali
untuk masing-masing blok di relasi bagian luar (bukannya
satu kali untuk masing-masing tuple di relasi bagian luar)
Best case: br+bs block access
Perbaikan terhadap algoritma nested loop dan blok nested loop:
Dalam blok nested-loop, gunakan M-2 disk blok sebagai ukuran blok
untuk relasi bagian luar, di mana M = ukuran memory dalam blok;
gunakan sisanya yang dua blok untuk menampung relasi bagian dalam
dan outputnya
Cost = [br/(M-2)] * bs + br
Jika atribut equi-join merupakan kunci pada relasi bagian dalam,
hentikan loop di bagian dalam (inner loop) pada saat pertama kali
ditemukan nilai yang cocok
Scan inner loop ke depan (forward) dan ke belakang (backward)
secara bergantian, sehingga blok yang masih ada di buffer dapat
digunakan
Gunakan indeks di relasi bagian dalam jika tersedia (Indexed nested
loop join)
c.

Indexed nested-loop join


Indeks lookup dapat menggantikan file scan (pembacaan seluruh file) jika:
Join adalah equi-join atau natural join dan
Ada indeks untuk atribut join relasi bagian dalam (inner relations
join attribute)
Bisa saja membangun indeks hanya untuk menghitung sebuah
operasi join
Untuk masing-masing tuple tr di relasi luar r, gunakan indeks untuk
mencari tuple di s yang memenuhi kondisi join dengan tuple tr. Pada
keadaan worst case buffer hanya mempunyai ruang (space) untuk satu
blok r, dan, untuk tiap-tiap tuple di r, kita melakukan indeks lookup di s
Cost dari join ini adalah: br + nr*c
Di mana c adalah cost untuk menjelajahi indeks dan mengambil
semua tuple s yang cocok untuk satu tuple
C dapat dianggap sebagai cost untuk satu buah operasi selection
pada s menggunakan kondisi join
Jika terdapat indeks pada atribut-atribut join baik di r dan s, gunakan
relasi dengan tuple lebih sedikit sebagai relasi bagian luar

Query Optimization

153

Politeknik Telkom

Database Management System

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

gambar 11.4 a skema Merge join


ket :
- Urutkan kedua buah atribut relasi (jika belum diurutkan pada
atibut join)
- Gabungkan relasi yang sudah diurutkan

154

Politeknik Telkom

Database Management System

e. Hash-join
Hash join berlaku untuk equi-join dan natural join.

gambar 11.4 b skema Hash join


Hash join r (build input)dan s (probe input) dilakukan sebagai berikut:
1. Partisi relasi s menggunakan fungsi hash h. Pada saat mempartisi
sebuah relasi, satu blok memory dipesan untuk menampung (buffer)
output masing-masing partisi
2. Lakukan hal yang sama pada r
3. Untuk masing-masing i:
Masukan si ke dalam memory dan bangun indeks hash di dalam
memory (in-memory) untuk relasi si tersebut. Indeks hash ini
menggunakan fungsi hash berbeda daripada yang terdahulu h.
Bacalah tuple di ri dari disk satu demi satu. Untuk masingmasing tuple tr temukan masing-masing tuple ts di si
menggunakan indeks hash in-memory. Keluarkan gabungan
atribut-atributnya.
4. Nilai n dan fungsi hash h dipilih sehingga masing-masing si dapat
masuk ke dalam memory.
Secara khusus n dipilih sebagai [bs/M]*f di mana f adalah fudge
factor, biasanya bernilai sekitar 1.2
Partisi-partisi probe relation si tidak harus masuk ke dalam
memory

Query Optimization

155

Politeknik Telkom

5.

Database Management System

Recursive partitioning diperlukan jika banyaknya partisi n lebih


besar daripada banyaknya page M dari memory.
Daripada mempartisi n kali, gunakan M-1 partisi untuk s
Partisi lebih lanjut M-1 menggunakan fungsi hash yang berbeda
Gunakan metode partisi yang sama untuk r
Jarang sekali digunakan: recursive partitioning tidak diperlukan
untuk relasi-relasi yang lebih kecil atau sama dengan 1GB
dengan ukuran memory 2MB, dengan ukuran blok 4KB
Cost hash join :
Jika recursive partitioning tidak diperlukan: cost hash join adalah
3(br + bs) +2 nh
Jika diperlukan recursive partitioning, banyaknya tahap yang
diperlukan untuk melakukan partitioning s adalah logM1(bs) 1.
Hal ini karena masing-masing partisi akhir dari s harus masuk dalam
memory.
Banyaknya partisi untuk relasi probe r adalah sama dengan untuk
relasi build s; banyaknya tahap partisi untuk r adalah sama dengan
untuk s.
Karenanya paling baik jika memilih relasi yang lebih kecil sebagai
build relation.
Perkiraan cost totalnya adalah:
2(br + bs logM1(bs) 1 + br + bs
Jika seluruh build input dapat disimpan di main memory, maka n
dapat diset ke 0 dan algoritma tidak mempartisi relasi ke dalam file
temporer. Sehingga perkiraan cost turun menjadi br + bs
Contoh :
memory berukuran 20 blok
dengan bdepositor=100 dan bcustomer=400, maka :
depositor digunakan sebagai build input. Dipartisi menjadi lima
partisi, masing-masing berukuran 20 blok. Proses partisi ini dapat
dilakukan dalam satu tahap.
Dengan cara yang sama, customer dipartisi menjadi lima partisi,
masing-masing berukuran 80 blok, dilakukan dalam satu tahap.
Sehingga total cost: 3(100+400) = 1500 blok transfer
Abaikan cost untuk menulis blok yang sudah sebagian penuh

156

Politeknik Telkom

Database Management System

Rangkuman
1.
2.
3.
4.
5.

Adalah proses dimana DBMS (Optimizer) menunjukkan strategi


yang terbaik untuk menjalankan suatu query
Optimalisasi query merupakan hal yang sangat penting pada
relasional DBMS
Dibutuhkan pemahaman yang baik pada saat melakukan optimasi
query karena optimalisasi query bedampak pada performansi data
pada saat di load
Dua hal yang harus diperhatikan saat melakukan optimasi query
adalah alternative plan dan cost yang dibutuhkan untuk eksekusi plan
tersebut.
Eksternal sort dapat mengurangi cost disk I/O

Query Optimization

157

Politeknik Telkom

Database Management System

Latihan
1.
2.

Mengapa optimalisasi perlu dilakukan?


Hal-hal apa saja yang harus diperhatikan pada saat melakukan
optimalisasi query?
3. Sebutkan langkah-langkah dalam melakukan optimalisasi query?
4. Apa kelebihan cost-based optimizer?
5. Apa keuntungan jika suatu data di sorting?
6. Sebutkan perbedaan algoritma external sort dan two-way sort!
7. jelaskan tahapan yang dilakukan untuk melakukan sorting jika
kita mempunyai 8 buffer untuk mensort 99 halaman file!
8. Apa perbedaan mendasar dari selection dan projection?
9. dari Algoritma join yang ada, algoritma mana yang
membutuhkan cost yang paling murah?
10. hitunglah cost yang dibutuhkan dengan menggunakan metode
nested loop join dan blok nested loop join jika :
ncustomer = 50.000
fcustomer = 100
ndepositor=1500
fdepositor=10
V(customer-name,depositor) = 250, rata-rata tiap nasabah punya dua
rekening
11. Buatlah ekspresi aljabar relasional query dibawah ini :
SELECT
P.NUMBER,
P.DNUM,
E.LNAME,
E.ADDRESS, E.BDATE
FROM PROJECT AS P, DEPARTMENT AS D,
EMPLOYEE AS E
WHERE
P.DNUM=D.DNUM AND D.MGRSSN=E.SSN
AND
P.LOCATION=Stafford
;

158

Politeknik Telkom

Database Management System

10 DATABASE ADMINISTRATION
SECURITY

Overview

Isu security data merupakan salah satu isu yang semakin berkembang saat ini,
kebutuhan akan tingkat keamanan data yang semakin tinggi membuat dba
harus benar-benar menjaga kemamana data untuk tetap menjaga integritas
dan kerahasiaan suatu data.

Tujuan

1.
2.
3.

Mahasiswa memahami konsep security pada database


Mahasiswa dapat membuat user dan roles pada database
Mahasiswa dapat memaintain security database

Query Optimization

159

Politeknik Telkom

10.1

Database Management System

Database Security Risk

Security pada database merupakan kegiatan / aturan yang dilakukan untuk


melindungi asset terpenting dalam database, yaitu data.
Perangkat keras
Kebakaran, banjir, bom,
pencurian, listrik, gempa,
radiasi, kesalahan mekanisme
eamanan

Jaringan
Komunikasi
Kabel yang
tidak
erkoneksi,
radiasi

Database
Aturan /
amandemen yang
tidak diotorisasi,
penduplikatan data,
pencurian data,
kehilangan data
akibat gangguan
listrik

DBMS dan Program


Aplikasi
Kesalahan mekanisme
keamanan
Akses yang terlalu luas
Pencurian program
Kesalahan program

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

Database Management System

Tingkatan Pada Keamanan Database :


1. Fisikal lokasi-lokasi dimana terdapat sistem komputer haruslah
aman secara fisik terhadap serangan perusak.
2. Manusia wewenang pemakai harus dilakukan dengan berhati-hati
untuk mengurangi kemungkinan adanya manipulasi oleh pemakai
yang berwenang
3. Sistem Operasi Kelemahan pada SO ini memungkinkan
pengaksesan data oleh pihak tak berwenang, karena hampir seluruh
jaringan sistem database menggunakan akses jarak jauh.
4. Sistem Database Pengaturan hak pemakai yang baik.

Keamanan Data :
1. Otorisasi :

Pemberian Wewenang atau hak istimewa (priviledge) untuk


mengakses sistem atau obyek database
Kendali otorisasi (=kontrol akses) dapat dibangun pada perangkat
lunak dengan 2 fungsi :
Mengendalikan sistem atau obyek yang dapat diakses
Mengendalikan bagaimana pengguna menggunakannya
Sistem administrasi yang bertanggungjawab untuk memberikan hak
akses dengan membuat account pengguna.

Query Optimization

161

Politeknik Telkom

Database Management System

2. Tabel View :

162

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.
Contoh pada Database relasional, untuk pengamanan dilakukan
beberapa level :
1. Relasi pengguna diperbolehkan atau tidak diperbolehkan
mengakses langsung suatu relasi
2. View pengguna diperbolehkan atau tidak diperbolehkan
mengakses data yang terapat pada view
3. Read Authorization pengguna diperbolehkan membaca
data, tetapi tidak dapat memodifikasi.
4. Insert Authorization pengguna diperbolehkan menambah
data baru, tetapi tidak dapat memodifikasi data yang sudah
ada.
5. Update Authorization pengguna diperbolehkan
memodifikasi data, tetapi tidak dapat menghapus data.
6. Delete Authorization pengguna diperbolehkan
menghapus data.
Untuk Modifikasi data terdapat otorisasi tambahan :
1. Index Authorization pengguna diperbolehkan membuat
dan menghapus index data.
2. Resource Authorization pengguna diperbolehkan
membuat relasi-relasi baru.
3. Alteration Authorization pengguna diperbolehkan
menambah/menghapus atribut suatu relasi.
4. Drop Authorization pengguna diperbolehkan menghapus
relasi yang sudah ada.

Politeknik Telkom

Database Management System

Penyalahgunaan Database :
1.

Tidak disengaja, jenisnya :


a. kerusakan selama proses transaksi
b. anomali yang disebabkan oleh akses database yang
konkuren
c. anomali yang disebabkan oleh pendistribuasian data pada
beberapa komputer
d. logika error yang mengancam kemampuan transaksi untuk
mempertahankan konsistensi database.
2. Disengaja, jenisnya :
a. Pengambilan data / pembacaan data oleh pihak yang tidak
berwenang.
b. Pengubahan data oleh pihak yang tidak berwenang.
c. Penghapusan data oleh pihak yang tidak berwenang.
Ada 3 tujuan utama pada saat mendesain aplikasi database yang aman :
1. kerahasiaan : informasi sebaiknya tidak diperlihatkan kepada pengguna
yang tidak sah.
2. integritas : hanya para pengguna yang sah yang sebaiknya diizinkan untuk
memodifikasi data.
3. ketersediaan : pengguna sah sebaiknya tidak ditolak aksesnya.

10.2

Maintaining Database Security

Database security dapat dikelompokkan menjadi 2 (dua) hal :


1. system security
2. data security
System security meliputi akses dan penggunaan database pada level system,
semisal username dan password, ruang disk yang dialokasikan ke user, dan
operasi system yang diperbolehkan pada user. Database security meliputi
akses dan penggunaan database object dan perlakuan yang bisa diberikan oleh
user terhadap object dari database.
Tingkat kerusakan suatu database dan sejauh mana database tersebut dapat
diperbaiki tergantung pada hal-hal berikut :
1. apakah ada hardware & software alternatif yang dapat digunakan
2. kapan backup terakhir dilakukan
3. waktu yang diperlukan untuk me-restore system
4. apakah data yang hilang dapat dipulihkan
Query Optimization

163

Politeknik Telkom

Database Management System

Memelihara keamanan database :


a. Otorisasi (autorization)
Otorisasi merupakan pemberian hak yang memungkinkan seseorang
secarah sah dapat mengakses system atau objek (table, view, aplikasi,
prosedur, objek).
Jenis-jenis otorisasi :
1. Read authorization : otorisasi untuk membaca data saja, tidak untuk
memodifikasi data
2. Insert authorization : otorisasi untuk menambah data baru, tidak
untuk memodifikasi data
3. Update authorization : otorisasi untuk memodifikasi data, tetapi tidak
untuk menghapus data
4. Delete authorization : otorisasi untuk menghapus data (record/tuple),
tetapi tidak untuk menghapus relasi/table
5. Index authorization : otorisasi untuk membentuk dan menghapus
index
6. Resource authorization : otorisasi untuk membuat table baru
7. Alteration authorization : otorisasi untuk menambah atau menghapus
atribut relasi/table
8. Drop authorization : otorisasi untuk menghapus relasi/table
164

Politeknik Telkom

Database Management System

Jika seorang user berubah pekerjaanya dalam menangani data, maka


user tersebut otorisasinya harus diubah sesuai dengan deskripsi
pekerjaanya yang baru. Dan jika seorang karyawan berhenti bekerja,
maka account dan otorisasinya harus dihapus.
Pada lingkungan dengan banyak user, perlu dipelihara keamanan data
(security) untuk mengakses dan menggunakan database. Dengan
security dari Oracle Server maka kita bisa :
1. Mengontrol akses database
2. Memberikan akses terhadap object spesifik yang ada dalam database
3. Mengkonfirmasi pemberian privilege (hak akses) dalam data
dictionary
4. Membuat synonym untuk object database
Dengan adanya otorisasi, database administrator dapat menentukan hak
ases dan jenis otorisasi suatu user tergantung tingkat kepentingan
terhadap data yang ada untuk menjaga keamanan database.
b. Enkripsi
Enkripsi adalah pengkodean data dengan algoritma khusus sehingga data
tidak dapat dibaca oleh program tanpa kunci deskripsi. Selain itu
enkripsi juga memproteksi data yang ditransmisikan melalui jalur
komunikasi.
Cara mentransmisikan data secara aman melalui jaringan menggunakan
cryptosystem terdiri atas :
1. Kunci enkripsi untuk mengenkripsi data (plaintext)
2. Algoritma enkripsi yang dengan kunci enkripsi mentransformasikan
plaintext menjadi ciphertext
3. Kunci dekripsi yang mendekripsi ciphertext
4. Algoritma dekripsi yang dengan kunci dekripsi mentransformasikan
ciphertext menjadi plaintext
Jenis enkripsi :
1. Symmetric encryption : kunci enkripsi = kunci dekripsi
Contoh : Data Encryption Standard (DES) yang dikembangkan IBM
2. Asymmetric encryption : kunci ekripsi kunci dekripsi
Contoh : RSA
Query Optimization

165

Politeknik Telkom

c.

Database Management System

RAID (Redundant Array of Independence Disk)


Disk drive merupakan komponen yang paling penting untuk
penyimpanan data, tetapi komponen ini paling sering mengalami
kerusakan, untuk mengatasi hal ini digunakan RAID. RAID terdiri atas
array disk, meningkatkan keandalan kinerja dengan cara data striping.
Data striping digunakan untuk mensegmentasi data ke partisi dengan
ukuran yang sama dan didistribusikan ke banyak disk. Dengan adanya
data striping dapat meningkatkan kinerja karena proses I/O dilakukan
secara parallel. Kehanda;an database juga dapat ditingkatkan dengan
menyimpan informasi redundan ke beberapa disk dengan menggunakan
skema prioritas dan skema error correcting. Dalam skema prioritas,
setiap byte mempunyai bit paritas yang merekam 1 jika jumlah bit dalam
byte itu genap, 0 bila ganjil. Jika jumlah bit dalam byte rusak, paritas baru
menjadi tidak cocok dengan paritas tersimpan. Skema error-correcting
memiliki dua bit tambahan atau lebih dan dapat merekonstruksi data
original jika sebuah bit rusak.
Level RAID :
RAID 0 Nonredundant
RAID 1 Mirrored
RAID 0+1 Nonredundant dan Mirrored
RAID 2 Memory-style Error Checking codes
RAID 3 Bit-Interleaved Parity
RAID 4 Block-Interleaved Parity
RAID 5 Block-Interleaved Distributed Parity
RAID 6 P+Q

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.

Database Management System

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

Security manager merupakan tools di oracle yang menyediakan grafis


interface untuk membantu user :
1. Mengelola user
2. Mengelola domain
3. Mengelola roles
4. Mengelola authentifikasi dan authorisasi user berbasis SSL dan password
5. Mengelola oracle context, database, security dan domain administrator
6. Mapping user schema
Untuk menggunakan security manager dapat dilakukan dengan cara :
1. UNIX
Masuk ke ORACLE_HOME kemudian pada command line ketik perintah
: esm
2. Windows
Pilih start > Programs > Oracle-HOME_NAME > Integrated
Management Tools > Security Manager

Query Optimization

167

Politeknik Telkom

Database Management System

Security manager di oracle menyediakan 3 cara untuk koneksi ke direktori


server :
Authentication method
Deskripsi
Password authentication
Authentikasi dengan menggunakan
distinguishing name (DN) tau userID dan
password
SSL client authentication
Menggunakan authentikasi dengan two-way
SSL. Dimana server dan clientnya harus
menggunakan Oracle Wallets
Native authentication
Hanya digunakan pada Microsoft Windows
NT dan Windows 2000, menggunakan
authentikasi di level sistem operasi untuk
log-on ke Microsoft Active Directory
Membuat user dengan security manager
Untuk membuat user di direktori server dengan security manager, pilih
Create User dari menu operasi kemudian akan muncul tampilan seperti
dibawah ini :

168

Politeknik Telkom

10.4

Database Management System

Create Database User


Setiap user yang akan mengakses database Oracle harus memiliki
user account atau biasa juga disebut user name. Pada database
Oracle user account merupakan bagian dari database. Berbeda
dengan konsep user yang ada di RDBMS lain seperti My SQL atau
SQL Server 2000, pada kedua RDBMS tersebut user ada diluar
database. Ilustrasi perbedaan konsep user antara database Oracle
dengan kedua database tersebut bisa dilihat pada gambar berikut

Query Optimization

169

Politeknik Telkom

Database Management System

Dengan konsep seperti diatas, tentunya user account pada


suatu database baru bisa dibuat setelah database dibuat. Walaupun
demikian ada beberapa user yang dibuat bersamaan dengan proses
pembuatan database, user yang dibuat bersamaan dengan proses
pembuatan databsae ini disebut pre-defined user . Contoh dari predefined user adalah user SYS dan SYSTEM. Jadi kedua user inilah
yang akan Anda gunakan untuk melakukan manajemen database
jika database baru dibuat. Sebaiknya buatlah user account baru untuk
menyimpan tabel, index dan objek database lain jika Anda
ingin membangun aplikasi.

Membuat User Account


Jika database masih baru maka yang bisa digunakan untuk
membuat user adalah user SYS atau SYSTEM. Jadi sebelum
membuat user login ke database dengan menggunakan salah satu dari
kedua user account tersebut. Untuk login ke database gunakan
SQL*Plus, pada form login isikan username dan password, misal
Anda akan menggunakan user SYSTEM :

Setelah Anda berhasil login, buat user dengan perintah CREATE


USER. Pada contoh ini buatlah user budi dengan password
budipass, sekaligus beri quota pemakaian space maksimum
sebesar 10 Mb. Untuk sementara ikuti perintah ini dulu.
Manajemen space untuk user akan dibahas di bagian tersendiri.

170

Politeknik Telkom

SQL>
2
3
4

Database Management System

create user BUDI


identified by BUDIPASS
default tablespace USERS
quota 10 m on USERS;

User created.
Jika perintah diatas berhasil Anda lakukan berarti didalam database
Anda sudah ada user budi.

10.5

Create Database Roles


Roles adalah sebuah group user, yang artinya mengelompokkan
beberapa user SQL Server yang mempunyai hak akses sama. Hal ini
memberi kemudahan saat beberapa user dalam kelompok tersebut
mengalami perubahan hak akses, sehingga kita tinggal merubah hak
akses roles-nya maka user-user yang ada dalam roles tersebut akan
ikut berubah. Untuk dapat membuat roles, user harus mempunyai
otorisasi untuk membuat roles, dan yang mempunyai otorisasi
tersebut hanya admin.
Tujuan dari pembuatan role adalahuntuk mempermudah proses
pemberian dan pelepasan privilege. Hal pertama yang dikerjakan
sehubungan dengan role adalah : pertama role dibuat dengan
perintah CREATE ROLE nama_role.
Kemudian DBA dapat menandai privilege apa saja yang diberikan
kepada role. Setelah itu baru ditentukan user mana saja yang boleh
memiliki role tersebut .

Membuat Role

CREATE ROLE manager;


Role created.

Grant previledge ke role

GRANT create table, create view


TO manager;
Grant succeeded.

Grant role ke user

GRANT manager TO DEHAAN, KOCHHAR;


Grant succeeded
Query Optimization

171

Politeknik Telkom

10.6

Database Management System

Definisi Profiles

PROFILE adalah sekelompok parameter penggunaan resource yang dapat


diset untuk membatasi kapasitas user sewaktu terhubung ke Oracle.
Sebelumnya profile harus sudah dibuat.
Profile dapat diberikan kepada setiap user, atau default profile untuk setiap
user. Profile hanya dapat diberikan kepada user, dan setiap user hanya
memiliki satu profile.
Sebelum membuat profile harus ditentukan terlebih dahulu nilai yang pas
untuk setiap resource limit
Profile mempunyai fitur-fitur untuk mengelola password ( password
management ), fitur-fitur tersebut adalah :
Account locking: Memungkinkan me-lock account secara otomatis
apabila user gagal log in ke sistem setelah berapa kali mencoba.

Password

aging

and

expiration:

Memungkinkan

password

mempunyai masa berlaku, setelah expired password harus diganti

Password history: Mencek password baru untuk memastikan bahwa


password tersebut tidak di-reuse selama jangka waktu tertentu atau
diubah

Password complexity verification: mencek kompleksitas password


untuk memverifikasi bahwa password tersebut cukup kompleks untuk
mencegah pemecahan password oleh intruders.

172

Politeknik Telkom

10.6.1

Database Management System

Sintaks

CREATE PROFILE profile LIMIT


[FAILED_LOGIN_ATTEMPTS max_value]
[PASSWORD_LIFE_TIME max_value]
[
{PASSWORD_REUSE_TIME|PASSWORD_REUSE_MAX}
max_value]
[PASSWORD_LOCK_TIME max_value]
[PASSWORD_GRACE_TIME max_value]
[PASSWORD_VERIFY_FUNCTION
{function|NULL|DEFAULT} ]

Parameter

Keterangan

PROFILE

Member nama profile yang akan


dibuat

FAILED_LOGIN_ATTEMPTS
PASSWORD_LIFE_TIME

Query Optimization

Menentukan jumlah maks yang


diperbolehkan user untuk gagal
login sebelum account di lock.
Menentukan
lama
hari
penggunaan pwd yang dipakai. Jika
PASSWORD_GRACE_TIME
ditentukan, maka pwd akan
expire setelah masa grace.
173

Politeknik Telkom

Database Management System

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

Database Management System

Contoh 12.2

Buat profile

CREATE PROFILE (nama_profile) LIMIT


FAILED_LOGIN_ATTEMPTS 3
PASSWORD_LIFE_TIME 60
PASSWORD_REUSE_TIME 60
PASSWORD_REUSE_MAX 5
PASSWORD_LOCK_TIME 1/24
PASSWORD_GRACE_TIME 10;

Buat user dengan nama terserah menggunakan profile yang tersedia

CREATE USER {terserah ya}


IDENTIFIED BY out_standing1
DEFAULT TABLESPACE example
QUOTA 10M ON example
TEMPORARY TABLESPACE temp
QUOTA 5M ON system
PROFILE {nama_profile}
PASSWORD EXPIRE;

10.7

Views

Views digunakan untuk memonitor user dari database yang kita buat,
metadata views yang digunakan untuk memonitor user adalah :
DBA_users : berisi informasi seluruh user yang dimiliki oleh DBA

DBA_TS_Quotas : berisi informasi tentang tablespace quota bagi setiap


pemakai.

V$session : untuk melihat user yang sedang connect ke system

Query Optimization

175

Politeknik Telkom

Database Management System

Contoh 12.3 :

SELECT * FROM DBA_users;


Perintah

selection

diatas

akan

menampilkan

semua

menampilkan

semua

informasi users yang dimiliki DBA

SELECT * FROM DBA_TS_Quotas;


Perintah

selection

informasi

diatas

akan

quota tablespace masing-masing user

SELECT * FROM V$session;


Perintah

selection

diatas

akan

menampilkan

semua

user yang connect ke system

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

Terdapat tiga level enkripsi basis data yang meliputi :


1. Enkripsi pada level penyimpanan (storage)
Enkripsi data dilakukan pada subsistem storage (penyimpanan), baik pada level
file maupun pada level blok. Enkripsi level ini cocok untuk mengenkripsi file,
folder, media storage dan media tape. Akan tetapi, serangan yang dapat
diatasi hanya terbatas pada serangan yang berupa pencurian media dan sistem
176

Politeknik Telkom

Database Management System

penyimpanan. Enkripsi pada level storage tidak mampu menangani serangan


pada level basis data dan level aplikasi.
2. Enkripsi pada level basis data
Enkripsi dilakukan pada saat data ditulis dan dibaca dari basis data. Enkripsi
jenis ini dilakukan pada level kolom pada tabel basis data. Level ini melindungi
data pada Database Management System (DBMS) dari berbagai macam
serangan. Diperlukan integrasi pada level basis data, termasuk modifikasi
skema dan penggunaan trigger dan store procedure dalam proses enkripsi
dekripsi. Diperlukan beberapa pertimbangan dalam menerapkan strategi ini
untuk mengatasi dampak enkripsi pada performansi basis data. Pertimbangan
tersebut meliputi pemilihan fields yang sensitif untuk dienkripsi, pemilihan
hardware untuk meningkatkan pengamanan dan mereduksi penurunan
performansi akibat proses kriptografi. Kelemahan utama pada enkripsi jenis
ini adalah tidak bisa mengatasi serangan pada level aplikasi, karena fungsi
enkripsi hanya terdapat pada level DBMS.
3. Enkripsi pada level aplikasi
Aplikasi menangani proses enkripsi data. Kelebihannya adalah tidak terjadi
penurunan performansi pada basis data, karena DBMS tidak menangani
enkripsi data. Akan tetapi, ketika terjadi perubahan strategi enkripsi atau
perubahan data yang dienkripsi, akan banyak terjadi modifikasi pada level
aplikasi.

10.9

Database Column Encryption

Berdasarkan perkembangan teknologi pengamanan saat ini, terdapat dua


strategi alternatif yang dapat digunakan yaitu dengan enkripsi secara internal
dalam basis data dengan memanfaatkan fitur yang telah didukung oleh DBMS
atau dengan melakukan enkripsi secara eksternal di luar basis data.
Enkripsi secara internal dalam basis data
Strategi ini merupakan strategi pengamanan yang paling sederhana karena
dilakukan hanya dengan memanfaatkan fitur enkripsi yang telah digunakan
oleh DBMS yang bersangkutan atau dengan menggunakan produk add-on yang
menambahkan fitur enkripsi pada DBMS yang belum memiliki kemampuan
tersebut. Dengan strategi ini, proses enkripsi dan dekripsi data hanya akan
berlaku secara internal.
Query Optimization

177

Politeknik Telkom

Database Management System

Artinya, data dimasukkan ke dalam basis data dalam bentuk plainteks dan
akan meninggalkan basis data dalam bentuk plainteks pula. Strategi ini
diterapkan dengan menggunakan database procedure call. Salah satu contoh
penggunaannya adalah dengan menerapkan trigger setiap kali pengguna
memanggil operasi select .
Operasi select terhadap data yang diproteksi akan memicu trigger untuk
mengenkripsi data tersebut. Jika pengguna yang bersangkutan adalah pengguna
yang memiliki hak autorisasi untuk melihat data, maka data akan didekripsi
ketika ditampilkan. Jika sebaliknya, data akan ditampilkan masih dalam bentuk
terenkripsi. Enkripsi internal basis data dapat dilakukan dengan whole database
encryption atau dengan column encryption.
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

Database Management System

Di luar beberapa kekurangan yang disebutkan di atas, enkripsi basis data


secara internal masih menjadi pilihan karena kemudahan implementasinya.
Saat ini telah banyak DBMS komersial yang telah menyediakan fitur enkripsi.
Untuk DBMS yang belum mendukung fitur ini, telah tersedia pula produkproduk add-on yang dapat diintegrasikan dengan DBMS untuk menambahkan
fitur tersebut pada DBMS yang bersangkutan.
Dengan menggunakan DBMS dan produk-produk tersebut, perusahaan tidak
perlu lagi melakukan modifikasi pada aplikasi-aplikasi yang mengakses data
maupun pada arsitektur sistem secara keseluruhan. Untuk memilih DBMS
atau produk enkripsi add-on, perlu dipastikan bahwa algoritma enkripsi yang
digunakan adalah algoritma yang telah terbukti aman dan disediakan oleh
penyedia layanan kriptografi yang terpercaya.

10.10 Virtual

Private Databse

Kehadiran teknologi Oracle Virtual Private Database memberikan metode


untuk dapat mengatur hak akses sampai level baris (row/record) dan kolom
(column). Oracle Virtual Private Database hadir seiring dengan
dikeluarkannya Oracle 8i, yang dilanjutkan pada Oracle 9i, dan Oracle 10g.
Pada Oracle 8i dan 9i baru dikenal pengaturan hak akses untuk level baris saja
yang biasa disebut dengan Row Level Security tetapi ketika 10g muncul
pengaturan hak akses terhadap kolom (Column Level Privacy) sudah dapat
diakomodasi. Kemunculan Oracle Virtual Private Database merupakan
gebrakan baru dalam dunia Database Security system.
Virtual Private Database (VPD) pertama kali diperkenalkan pada Oracle8i
yang kemudian dilanjutkan pada Oracle versi 9i dan 10g. Sistem keamanan
akses data ini merupakan standar baru dalam sistem keamanan database yang
dibuat kedalam database server.

Query Optimization

179

Politeknik Telkom

10.10.1

Database Management System

Konsep Virtual Private Database

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.

Gambar . Pemahaman sederhana Virtual Private Database


Dari gambar 2 diatas, terlihat bahwa setiap user akan memiliki hak akses yang
berbeda terhadap suatu sumber data (tabel atau view), walaupun user-user
tersebut melakukan perintah query yang sama, tetapi yang ditampilkan akan
berbeda-beda untuk setiap user.

180

Politeknik Telkom

Database Management System

Adapun akses data dengan VPD melalui tahapan-tahapan sebagai berikut:


1. User mengirimkan SQL ke database server.
2. Tabel yang dituju akan memberikan pendefinisian security policy.
3. Security policy akan mengembalikan sebuah predicate (dalam bentuk
pernyataan where, disesuaikan dengan user yang mengakses).
4. Pernyataan SQL akan termodifikasi berdasarkan security policy.
5. Data yang telah melalui security policy akan kembali ke user (user
akan disajikan data yang sesuai dengan hak aksesnya).
Untuk lebih jelasnya dapat dilihat pada gambar dibawah ini :

Tabel
Paket

USER

Langkah 1

Langkah 2

Security
Policy

Langkah 5

Langkah 4

Where

Langkah 3

Predicate

Gambar . Gambaran Umum Virtual Private Database


Penggunaan security policy menjamin otoritas akses pada baris tabel yang
spesifik. Aturan akses digunakan tanpa menghiraukan bagaimana tabel
terakses, melalui aplikasi atau secara langsung melalui query tool, seperti
SQL*Plus. Yang jelas user hanya melihat baris yang telah terotorisasi.

Query Optimization

181

Politeknik Telkom

10.10.2

Database Management System

PRINSIP KERJA VIRTUAL PRIVATE


DATABASE

Feature-feature VPD sesuai dengan versi Oracle 8i :


Fine-grained Access Control
Fine-grained access control memungkinkan kita untuk membuat aplikasi
yang memaksa security policy sampai pada bagian data yang lebih spesifik
(granularity).
Dalam menggunakan fine-grained access control, kita membuat fungsi
security policy yang dibubuhkan pada tabel, view, atau synonym. Sehingga
ketika user menggunakan perintah SELECT atau DML (INSERT, UPDATE,
DELETE) pada objek-objek database diatas, maka Oracle secara dinamis
memodifikasi perintah-perintah tersebut disesuaikan dengan access
control yang diberikan.
Application Context
Ide yang mendasari application context sangatlah sederhana dan aman,
yaitu didefinisikan melalui 3 feature:
1.

context merupakan suatu daftar variable memory dengan nilai


spesifik,

2.

session dapat menampilkan isi current value dengan menggunakan


fungsi sys_context(),

3.

variable dari particular context hanya dapat diset dengan


membuat prosedur yang terkait dengan context.

Prosedur set_context dapat digunakan untuk mendefinisikan variable apapun


mengenai end user, termasuk nama aplikasi, nama user, dan informasi
pembatasan baris. Sekali data terkumpul, security policy akan menggunakan
informasi tersebut untuk membuat run-time clause yang akan tertampilkan
pada end user SQL statement. Prosedur set-context menseting beberapa
parameter yang digunakan VPD dan menerima 3 argumen yaitu :
dbms_session.set_context(namespace, attribute, value)

182

Politeknik Telkom

Database Management System

Untuk mengimplementasikan VPD, developer dapat menggunakan paket


DBMS_RLS untuk menggunakan security policy tabel dan view. Juga dapat
digunakan perintah CREATE CONTEXT untuk membuat application context.
Database Oracle menyediakan juga application context yang sudah terbangun
didalam Oracle itu sendiri yaitu USERENV dengan predefined attribute.
Penggunaan USERENV application context melalui sintaks sebagai berikut :
SYS_CONTEXT('userenv', 'attribute')
Adapun attribute yang sering digunakan adalah sebagai berikut :
SESSION_USER

Mengembalikan database user name berdasarkan authentikasi current


user
SESSION_USERID

Mengembalikan identifier database nama user berdasarkan autentikasi


current user
CURRENT_USER

Mengembalikan nama user dibawah privilege run current sesi. Berbeda


dengan SESSION_USER dalam hal prosedur.
CURRENT_USERID
Mengembalikan ID user dibawah privilege run current sesi. Berbeda
dengan SESSION_USERID dalam hal prosedur.

Row Level Security


Row Level Security membatasi akses sampai pada baris tertentu pada
sebuah tabel atau view. Hasilnya setiap user akan melihat data yang
berbeda sesuai dengan otoritas yang diberikan.

VPD hanya mendukung tabel dan view


Pada versi Oracle8i ini baru mendukung pengaturan VPD untuk objek
database tabel dan view.

Query Optimization

183

Politeknik Telkom

Database Management System

Pada Oracle 9i terdapat penambahan feature VPD yaitu:

Oracle Policy Manager


Oracle9i menyajikan perbaikan pada manajemen policy VPD melalui
Oracle Policy Manager berbasis Graphical User Interface (GUI) yang
diakses melalui Oracle Enterprise Manager (OEM). Dengan
menggunakan Oracle Policy Manager ini pembuatan VPD akan jauh
lebih mudah dalam mengembangkan dan memanagenya.

Partitioned fine-grained access control


Oracle9i menyediakan kemampuan untuk memisahkan security policy
dari beberapa aplikasi.
Oracle 9i memudahkan pemisahan VPD melalui group policy dan
application context. Application context secara aman menentukan
aplikasi mana yang mengakses data dan group policy memfasilitasi
manajemen policy yang digunakan oleh aplikasi.

Global application context


Oracle 9i VPD mampu memfasilitasi multi koneksi untuk mengakses
satu atau lebih global application context, daripada mensetting
application context untuk setiap sesi user. Global application context
menyediakan fleksibilitas tambahan untuk aplikasi web-based, dan
memperbaiki kinerja melalui penggunaan kembali application context
dengan multi sesi daripada mengkonfigurasi application context per
sesi.

VPD yang telah mendukung objek database synonyms


Aplikasi E-business terbentuk dari suatu database yang seringkali
menggunakan synonym sebagai alias dari tabel, view, atau objek
database lain sehingga menyederhanakan SQL statement database
user.

184

Politeknik Telkom

Database Management System

Oracle 10g terdapat penambahan 3 komponen penting VPD yaitu:

Column-Level Privacy Penambahan performance dengan


membatasi jumlah query yang dapat ditulis ulang database. Penulisan
ulang hanya dapat terjadi jika referensi statemen yang relevan
terhadap kolom melalui parameter sec_relevant_cols dalam prosedur
DBMS_RLS.ADD_POLICY. Feature ini juga yang meningkatkan privacy
menjadi lebih baik.

Customization Memperkenalkan 4 tipe policy, kita dapat


memodifikasi VPD menggunakan predicate yang sama dengan policy
tetap atau menggunakan predicate VPD yang dapat berubah secara
dinamis dengan policy tidak tetap.

Shared Policies Kita dapat menggunakan sebuah VPD policy


untuk memperbanyak objek, oleh karenanya dapat menghemat biaya.

Prinsip Kerja VPD :


Secara umum untuk menerapkan VPD melalui tahapan-tahapan sebagai
berikut :
1.

Menentukan skema database dengan objek-objek database yang


akan diatur pengontrolan aksesnya

2.

Membuat program untuk mendefinisikan Policy Function

3.

Membuat program untuk mendefinisikan Application Context

4.

Membuat Applicaton Context

5.

Menggunakan
paket
Oracle
dbms_rls
untuk
mengimplementasikan policy function dan application context.

6.

Menguji VPD yang telah dibuat.

Query Optimization

185

Politeknik Telkom

Database Management System

11 KONKURENSI BASIS DATA

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

Mahasiswa memahami konsep transaksi dan properti transaksi yang harus


dijamin oleh DBMS.
Mahasiswa memahami konsep penjadwalan dan serializability.
Mahasiswa memahami konsep locking protocol.

Politeknik Telkom

11.1

Database Management System

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.

Sebuah transaksi basisdata terdiri dari:


Pernyataan-pernyataan DML yang menyebabkab
konsisten pada data (Data Manipulation Language)
Satu pernyataan DDL (Data Definition Language)
Satu pernyataan DCL (Data Control Language)

satu

perubahan

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. Dari contoh diatas, yaitu transaksi transfer
antar dua rekening, jika proses pengurangan rekening A telah dieksekusi dan
kemudian terjadi kegagalan sehingga penambahan rekening di B belum
dieksekusi, maka proses pengurangan dana di rekening A dibatalkan dan
dianggap proses transaksi tersebut tidak dilakukan 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.
Konkurensi Basis Data

187

Politeknik Telkom

11.2

Database Management System

Penjadwalan

Sangat dimungkinkan terjadi lebih dari satu transaksi berjalan dan


dieksekusi hampir bersamaan (konkuren). Maka diperlukan suatu penjadwalan
untuk menjaga konsistensi dari data.
Jika dimisalkan ada dua transaksi yang harus dijalankan:
- Transaksi yang disimbolkan dengan Ti adalah proses transfer dana dari
rekening A ke rekening B sejumlah $200. Dengan rekening awal A adalah
$1000 dan rekening awal B adalah $1500.
- Dan transaksi yang lain adalah transaksi yang disimbolkan dengan Tj, yaitu
proses transfer dari rekening A ke rekening B sejumlah 10% dari
rekening A ke rekening B.
Jika proses Ti dijalankan terlebih dahulu dan proses selanjutnya adalah Tj
maka akan berbeda hasilnya jika Tj dijalankan terlebih dulu dan Ti dijalankan
kemudian. Maka dari itu diperlukan penjadwalan jika terjadi banyak transaksi
yang dijalankan hampir bersamaan untuk tetap memberikan prioritas pada
proses untuk transaksi- transaksi yang harus dijalankan.
Dalam penjadwalan transaksi ada yang disebut dengan penjadwalan
serial. Penjadwalan serial adalah penjadwalan beberapa transaksi dan
pengeksekusian seluruh proses transaksi yang satu dijalankan dari awal
sampai dengan akhir dan kemudian dilanjutkan dengan pengeksekusian proses
transaksi selanjutnya dari awal sampai dengan akhir dan seterusnya. Dengan
setiap proses transaksi yang satu tidak diselingi dengan proses transaksi yang
lain. Sehingga data akan selalu dalam keadaan konsisten.

11.3

Serializability

Pada saat terjadi beberapa transaksi dijalankan hampir bersamaan,


maka yang akan terjadi adalah penjadwalan nonserial. Dalam penjadwalan
nonserial akan terdapat kemungkinan bahwa proses transaksi yang satu akan
diselingi dengan proses transaksi yang lain. Hal ini kemungkinan dapat
menyebabkan data menjadi tidak konsisten.
Serializability adalah suatu cara untuk menjadwalkan proses-proses
transaksi yang dijalankan hampir bersamaan dengan tetap menjaga konsistensi
188

Politeknik Telkom

Database Management System

data seolah-olah proses dari transaksi-transaksi tersebut dijalanakan secara


serial.

11.4

Lock Based Protocol

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. Metoda yang umum
digunakan adalah mengijinkan transaksi terhadap suatu data X apabila
transaksi tersebut memegang kunci atau Lock untuk dapat memodifikasi
data X .

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
-

Hal yang harus diperhatikan:


Setiap transaksi harus meminta lock apabila akan melakukan
operasi/mengakses terhadap suatu data. Misalkan data Q, mode-lock
yang diterapkan terhadap data Q harus sesuai dengan operasi yang akan
dilakukan.

Konkurensi Basis Data

189

Politeknik Telkom

Database Management System

Transaksi meminta lock terhadap suatu data, kepada concurrency


control manager.
Operasi terhadap Q dapat dilakukan transaksi T apabila concurrency
control manager memberikan grant (hak istimewa) lock yang diminta.
Beberapa shared mode-lock dari
transaksi yang berbeda dapat
diterapkan terhadap data yang sama secara bersamaan( Dari tabel 1.1
shared mode-lock compatible dengan shared mode-lock yang lain), tapi
ini tidak berlaku pada exclusive mode-lock (dari table 1.1 exclusive
mode-lock adalah incompatible dengan exclusive mode-lock lain) .
Shared mode lock dan exclusive mode-lock dari transaksi yang berbeda
tidak dapat diterapkan terhadap data yang sama secara bersamaan (Dari
table 1.1 Shared mode-lock adalah incompatible dengan exclusive modelock, begitupun sebaliknya).
Untuk melepaskan lock pada data Q dari transaksi T dapat dilakukan
dengan menggunakan instruksi unlock secara eksplisit.
Semua lock terhadap data akan terlepas pada saat transaksi berakhir.
Transaksi berakhir pada saat COMMIT atau ROLLBACK dilakukan. Jika
terjadi kegagalan pada transaksi, background process akan secara
otomatis melakukan ROLLBACK semua perubahan data dari transaksi
yang gagal dan melepaskan lock nya dari data.

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

Contoh Penerapan Lock dari dua buah transaksi:


Transaksi pertama disimbolkan dengan T1. Yaitu transaksi transfer $50
dari rekening A ke rekening B dengan saldo semula A adalah $100 dan B
adalah $200.
Transaksi kedua disimbolkan dengan T2. Yaitu penjumlahan rekening
antara rekening A dan B. Dengan hasil dari penjumlahan kedua rekening
tersebut baik sebelum maupun sesudah transaksi haruslah menghasilkan
jumlah yang sama yaitu $300.

Politeknik Telkom

Database Management System

Misalkan transaksi transfer digambarkan dengan T1 dan transaksi


penjumlahan rekening digambarkan dengan T2 sbb:
T1
:
lock-X(B);
read(B);
B := B - 50;
write(B);
unlock(B);
lock-X(A);
read(A);
A := A + 50;
write(A);
unlock(A).
T2
:
lock-S(A);
read(A);
unlock(A);
lock-S(B);
read(B);
unlock(B);
display(A + B).
Dari kedua transaksi diatas, data segera di unlock setelah terjadi
penulisan terhadap modifikasi data. Baik itu setelah terjadi modifikasi data A
ataupun data B. Transaksi harus terus lock suatu data selama transaksi
mengakses data tersebut. Tapi hal penting yang harus diperhatikan adalah
transaksi tidak perlu selalu melakukan unlock terhadap data secara langsung
setelah selesai mengakses data tersebut, terutama untuk tetap menjamin
serializability.

Konkurensi Basis Data

191

Politeknik Telkom

Database Management System

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

Database Management System

T3
:
lock-X(B);
read(B);
B := B - 50;
write(B);
lock-X(A);
read(A);
A := A + 50;
write(A);
unlock(B);
unlock(A).
T4
:
lock-S(A);
read(A);
lock-S(B);
read(B);
display(A + B);
unlock(A);
unlock(B).
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:

Konkurensi Basis Data

193

Politeknik Telkom

T5
Lock X(C)
Read (C)
C:=C*1.1
Write (C)

Database Management System

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

Database Management System

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.

11.4.3 Two-Phase Protocol


Aturan dari two phase protocol adalah bahwa setiap transaksi yang
meminta untuk dapat melakukan lock atau unlock data terdiri dari dua fase:
- Growing Phase, yaitu transaksi boleh melakukan lock terhadap data.
- Shrinking Phase, yaitu transaksi boleh melakukan unlock terhadap
data, tetapi tidak boleh meminta untuk melakukan lock baru terhadap
data.
Diinisialisasi diawal bahwa setiap transaksi melakukan growing phase.
Transaksi diperbolehkan melakukan lock data yang diperlukan. Sekali saja
transaksi tersebut melakukan unlock terhadap data, maka transaksi tersebut
memasuki shrinking phase, yaitu tidak boleh lagi meminta untuk dapat
melakukan lock data.
Pada saat terjadi beberapa transaksi, dimisalkan Ti dan Tj, dengan Tj
membaca data yang sebelumnya sudah pernah ditulis (dirubah) oleh T i dan
sesaat setelah perubahan itu Ti belum melakukan COMMIT dan kemudian
terjadi kegagalan, maka yang harus dialkukan adalah cascading rollback.
Cascading rollback adalah keadaan pada saat terjadi kegagalan pada
salah satu transaksi dan menyebabkan beberapa transaksi yang terkait harus
melakukan rollback (transaksi yang terkait yang dimaksud adalah transaksi
Konkurensi Basis Data

195

Politeknik Telkom

Database Management System

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

Database Management System

Tapi di lain sisi, jika transaksi Ti perlu untuk mengakses hanya


beberapa data saja maka tidak diperlukan untuk melakukan lock terhadap
seluruh item databse.
Granularitas item data adalah ukuran dari satu unit data yang terdiri
dari kumpulan item data yang akan disinkronisasi pada skema concurrency
control
Granularitas item data :
- Seluruh basis data
- Page
- Record
- Field
Prinsipnya adalah semakin kecil ukuran item data maka tingkat
konkurensi nya semakin terjaga tapi memerlukan tempat penyimpanan yang
lebih besar untuk bisa menyimpan informasi lock setiap item data, berlaku
sebaliknya.
Untuk menentukan ukuran granularitas item data maka perlu melihat
latar belakang transaksi yang sering dilakukan, jika transaksi biasanya sering
terjadi untuk pengaksesan terhadap record maka granularitas item data
adalah record. Dan jika sering terdapat transaksi yang mengaksses data yang
berada pada file yang sama secara bersamaan, maka granularitas item datanya
adalah file.

Konkurensi Basis Data

197

Politeknik Telkom

Database Management System

Rangkuman
1. Transaksi adalah satu unit pekerjaan lojik yang terdiri dari serangkaian

aksi atau operasi, dengan keseluruhan aksi atau operasi tersebut harus
sukses dijalankan atau gagal seluruhnya.
2. Untuk menjamin integritas data, sangat diharuskan bagi sistem basis
untuk tetap menjaga properti-properti berikut pada transaksi:
- Atomicity. Basisdata harus mencerminkan dengan benar seluruh
operasi transaksi atau tidak sama sekali.
- Consistency. Segala perubahan yang konsisten pada basisdata
mencerminkan dan sesuai dengan yang seharusnya terjadi dalam
dunia nyata.
- Isolation. Walaupun beberapa transaksi dieksekusi secara hampir
bersamaan, sistem harus menjamin bahwa proses transaksi yang satu
tidak mengganggu proses transaksi yang lainnya. Sehingga seolah-olah
transaksi satu dieksekusi setelah transaksi lain berakhir dieksekusi.
- Durability. Setelah transaksi selesai dengan sukses, maka
perubahan data dalam basisdata adalah permanen, walaupun terjadi
kegagalan.
3. Sangat dimungkinkan terjadi lebih dari satu transaksi berjalan dan
dieksekusi hampir bersamaan (konkuren). Maka diperlukan suatu
penjadwalan untuk menjaga konsistensi dari data.
4. Serializability adalah suatu cara untuk menjadwalkan proses-proses
transaksi yang dijalankan hampir bersamaan dengan tetap menjaga
konsistensi data seolah-olah proses dari transaksi-transaksi tersebut
dijalanakan secara serial.
3 Merupakan suatu cara/metoda yang digunakan untuk tetap menjaga
serializability pada data yang diakses oleh lebih dari satu transaksi. Yaitu,
apabila salah satu transaksi mengakses sebuah item data maka tidak akan
ada transaksi yang dapat memodifikasi data tersebut. Karena data sudah
dikunci atau di lock oleh transaksi yang bersangkutan.
4 Terdapat dua mode-lock pada data:
- Shared mode lock (dinotasikan dengan S).
- Exclusive mode lock (dinotasikan dengan X)
198

Politeknik Telkom

Database Management System

5. Untuk tetap menjaga serializability dan consistency data pada saat terjadi
6.
7.
8.

9.
10.
11.

12.
13.

beberapa transaksi, metode locking dapat digunakan. Namun metode


locking dapat memungkinkan pada suatu keadaan yang tidak diinginkan.
Keadaan tersebut adalah deadlock, yaitu keadaan pada saat beberapa
transaksi saling menunggu untuk mengakses data yang sedang di lock oleh
transaksi lain.
Keadaan deadlock dapat dihindari. Yang diperlukan adalah bahwa setiap
transaksi harus mengikuti serangkaian aturan yang disebut dengan locking
protocol. Salah satu locking protocol adalah two-phase protocol.
Aturan dari two phase protocol adalah bahwa setiap transaksi yang
meminta untuk dapat melakukan lock atau unlock data terdiri dari dua
fase:
- Growing Phase, yaitu transaksi boleh melakukan lock terhadap
data.
- Shrinking Phase, yaitu transaksi boleh melakukan unlock terhadap
data, tetapi tidak boleh meminta untuk melakukan lock baru
terhadap data.
Namun dengan two phase protocol akan menghadapkan pada suatu
kondisi yang disebut dengan Cascading rollback.
Cascading rollback adalah keadaan pada saat terjadi kegagalan pada salah
satu transaksi dan menyebabkan beberapa transaksi yang terkait harus
melakukan rollback.
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.
Granularitas item data adalah ukuran dari satu unit data yang terdiri dari
kumpulan item data yang akan disinkronisasi pada skema concurrency
control
Granularitas item data terdiri dari :
- Seluruh basis data
- Page
- Record
- Field

Konkurensi Basis Data

199

Politeknik Telkom

Database Management System

Soal

200

1.

Berikan contoh statement statement SQL yang menyatakan satu


transaksi!

2.

Berikan contoh dua transaksi (masing masing transaksi terdiri dari


statement statement SQL) yang sedang mengalami keadaan
deadlock!

3.

Bagaimana mengatasi masalah deadlock yang terjadi pada kasus no.2?

4.

Basis data Oracle mendukung untuk melakukan locking pada level


granularity tabel. Berikan statement SQL untuk melakukan locking
terhadap tabel employees dengan exclusive mode locking!

5.

Apa yang menjadi penyebab terjadinya lock conflict (deadlock) ?

6.

Pada saat keadaan darurat, solusi apakah yang bisa dilakukan oleh
administrator database untuk mengatasi masalah deadlock?

7.

Berikan statement SQL dari kasus no.6!

Politeknik Telkom

Database Management System

Latihan

3.

Buatlah makalah mengenai perbedaan Time Stamp Protocol dengan


Locking Based Protocol!

4.

Buatlah makalah mengenai Deadlock dan cara menghindari serta


pencegahannya!

Konkurensi Basis Data

201

Politeknik Telkom

Database Management System

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

Database Management System Practice

12 TUNING

Overview

Dalam penggunaan oracle, selain dibutuhkan keakuratan data,


performansi dari system database itu sendiri juga sangatlah penting. Salah satu
hal yang mampu mendukung performansi system yang baik adalah dengan
teknik Tuning. Khusus pada oracle 10g, bab ini akan memaparkan sedikit
banyak mengenai pengertian tuning dan bagaimana tuning dioperasikan
menggunakan methodology dengan memanfaatkan design yang sudah
disediakan oleh oracle tersebut.

Tujuan

1.
2.
3.

Mengenal Tuning pada Oracle 10g


Memahami Instance Tuning
Memahami SQL Tuning

Tuning

203

Politeknik Telkom

12.1

Database Management System

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

Database Management System Practice

Instance Tuning

Ketika memikirkan instance tuning, perhatian harus di fokuskan pada awal


desain dari database system untuk menghindari masalah bottleneck yang bisa
menyebabkan performansi menjadi bermasalah. Untuk itu, harus dipikirkan
juga :
Alokasi memori untuk struktur database
Menentukan kebutuhan I/O untuk bagian database yang berbeda
Melakukan tuning pada system operasi untuk performansi database
yang optimal
Setelah database instance telah terinstal dan dikonfigurasi, kita harus
me-monitor database yang sedang bekerja untuk memeriksa masalah
performansi yang terkait.
Dasar-Dasar
Hal yang paling efektif untuk melakukan tuning adalah didapatkannya terlebih
dahulu dasar performansi yang sudah tetap yang dapat digunakan untuk
pembandingan jika terjadi sesuatu pada performansi. Kebanyakan database
administrator (DBA) tahu bahwa system mereka berjalan dengan baik dan
dapat mudah diidentifikasi puncak dari periode penggunaannya. Sebagai
contoh, puncak periode dapat terjadi antara 10.00 am dan 12.00 pm dan juga
antara 1.30 pm dan 3.00 pm. Hal ini juga mencakup batch window dari jam
12.00 am sampai 6.00 am.
Sangatlah penting untuk mengidentifikasi puncak periode-periode tersebut
dan melakukan instalasi monitoring tools yang mengetahui performansi data
untuk waktu-waktu tersebut. Sebaiknya, pengumpulan data dikonfigurasikan
secara optimal pada saat aplikasi dalam fasa-fasa awal pada siklus QA. Dengan
kata lain, konfigurasi ini sebaiknya dilakukan pada saat pertama kali system
diproduksi..
Idealnya, hal berikut ini termasuk ke dalam dasar pengumpulan data:
Application statistics (transaction volumes, response time)
Database statistics
Operating system statistics
Disk I/O statistics
Network statistics
Pada Automatic Workload Repository, dasar-dasar diidentifikasi berdasarkan
jangakuan snapshot yang disediakan untuk pembandingan di masa yang akan
datang.
Tuning

205

Politeknik Telkom

Database Management System

Gejala dan Masalah


Slow physical I/O
Secara umum, hal ini terjadi karena konfigurasi disk yang buruk. Hal
ini disebabkan juga oleh physical I/O pada banyak disk yang
disebabkan oleh buruknya tuning pada SQL yang tidak berguna
Latch contention
Jarang sekali pada perebutan latch dilakukan tuning dengan mengkonfigurasi ulang suatu instance. Kebanyakan, perebutan latch
biasanya dapat terselesaikan dengan mengganti aplikasi

Excessive CPU usage


Excessive CPU usage biasanya terjadi pada waktu CPU sedang tidak
aktif. Hal ini dapat disebabkan karena ketidakmampuan ukuran
system, oleh SQL yang tidak di tuning atau aplikasi program yang
tidak efisien.

Waktu Tepat Untuk Tuning

Ada dua jenis metode Tuning yang berbeda-beda :


1. Proactive Monitoring
Pada Proactive monitoring selalu dilakukan pada suatu interval jadwal reguler,
dimana suatu angka dari data statistik performansi diperiksa untuk
mengidentifikasi apakah perilaku sistem dan penggunaan resource telah
berubah. Proactive monitoring dapat juga dianggap sebagai proactive tuning.
Biasanya, monitoring tidak menyebabkan perubahan konfigurasi ke sistem,
tetapi monitoring memperlihatkan suatu masalah serius yang sedang terjadi.
Dalam berbagai situasi, pengalaman performansi teknisi dapat mengidentifikasi
potensi masalah melalui data statistik saja, meskipun menyertakan degradasi
performansi adalah hal yang biasa.
Bereksperimen dengan atau mengubah suatu sistem ketika tidak ada
degradasi performansi yang terlihat jelas sebagai suatu aksi proaktif dapat
menjadi suatu aktivitas berbahaya, menyebabkan penurunan performansi yang
tidak perlu. Mengubah suatu sistem harus memperhatikan reactive tuning, dan
langkah-langkah reactive tuning yang harus diikuti.
Monitoring biasanya merupakan bagian dari suatu kapasitas besar planning
exercise, dimana pemakaian resource diuji untuk melihat perubahan pada cara
penggunaan aplikasi, dan cara aplikasi menggunakan database dan host
resources.
206

Politeknik Telkom

Database Management System Practice

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

Database Management System

3. Identifikasi Time Frame saat Masalah Terjadi


Apakah masalah hanya terjadi pada waktu puncak? Apakah performansi
memburuk selama beberapa waktu saja dalam sehari? Apakah penurunan
berangsur-ansur atau tiba-tiba?
4. Menentukan Jumlah Perlambatan (slowdown)
Temukan sebuah ukuran reproducible secara konsisten dari response
time atau job run time.
5. Identifikasi tiap perubahan
Identifikasi apa saja yang berubah sejak performansi sudah sesuai dengan
yang diharapkan. Karena, dengan ini dapatlah dipersempit potensi
penyebabnya secara cepat. Misal, apakah sudah lebih banyak data yang diload ke-system atau volume data atau populasi user meningkat?
b. Menguji Host System dan Menguji Oracle Statistics
Setelah mendapatkan himpunan penuh system operasi, database dan
statistika aplikasi, ujilah data untuk setiap bukti dari masalah
performansi.
Pertimbangkan list dari error-error performansi yang biasa terjadi
untuk dapat melihat apakah data yang didapatkan berkontribusi pada
masalah tersebut atau tidak.
Buat model konsep dari apa yang terjadi pada system tersebut
dengan menggunakan data performansi yang didapatkan.
Menguji Host System
Pengujian host hardware biasanya memberikan indikasi yang kuat mengenai
bottleneck di dalam system. Dengan ini, maka dapat ditentukan data
performansi oracle yang mana yang dapat berguna untuk cross-reference dan
diagnosis selanjutnya. Berikut adalah salah satu contoh data pengujian :
Penggunaan CPU
Jika terdapat jumlah significant idle CPU (sedang senggang), maka mungkin
sedang terjadi bottleneck I/O, aplikasi ataupun database. Perlu diperhatikan
bahwa menunggu I/O dapat juga dikatakan sebagai idle CPU.
Jika terdapat penggunaan CPU yang tinggi, maka periksa apakah CPU
tersebut digunakan secara efektif. Apakah sebagian besar penggunaan CPU
merupakan akibat dari sejumlah kecil high-usage program yang
menggunakan CPU, atau CPU yang dikonsumsikan oleh distributed workload.
208

Politeknik Telkom

Database Management System Practice

Jika CPU digunakan oleh sejumlah kecil high-usage program, maka lihat
kembali program-program tersebut yang menyebabkan masalah. Cek
apakah beberapa proses tunggal mengkonsumsi full power dari sebuah
CPU. Bergantung pada proses tersebut, dapat saja ini merupakan indikasi
bahwa CPU/proses membatasi beban kerja yang dapat diberhentikan
dengan membagi atau melakukan paralelisasi aktivitas proses.
a. Proses Non-Oracle
Jika program tersebut bukan program oracle, maka identifikasi
apakah program secara sah membutuhkan sejumlah CPU.
b. Proses Oracle
Jika sejumlah kecil proses Oracle mengkonsumsi sebagian besar
resource CPU, maka gunakan SQL_TRACE dan TKPROF untuk
mengidentifikasi SQL atau PL/SQL statements agar terlihat
apakah query atau unit program PL/SQL tertentu dapat di-tuning.
Sebagai contoh, SELECT statement dapat menyebabkan 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

V$SESSTAT menunjukkan penggunakan ORACLE CPU


untuk setiap session.
Lakukan :
SELECT *
FROM V$SESSTAT

V$RSRC_CONSUMER_GROUP menunjukkan statistika


pemakaian CPU untuk tiap group consumer saat Oracle
Database Resource Manager berjalan.
Lakukan :
SELECT *
209

Politeknik Telkom

Database Management System

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

Database Management System Practice

b. Event tunggu
Event tunggu merupakan statistic yang meningkat dari suatu proses server
atau urutan untuk mengindikasikan bahwa proses server ini menunggu suatu
event selesai sebelum proses lain bisa berlanjut. Data event tunggu
menunjukkan gejala bervariasi dari masalah yang mungkin dapat mengubah
performansi, seperti perebutan hambatan, dan perebutan buffer. Ingat bahwa
hal ini hanya gejala dari masalah, bukan kasus nyata.
Event tunggu dikelompokan menjadi class-class. Class event tunggu
mencakup: Administrative, Application, Cluster, Commit, Concurrency,
Configuration, Idle, Network, Other, Scheduler, System I/O, dan User I/O.
Suatu proses server dapat menunggu untuk hal berikut:
Suatu resource sudah tersedia, seperti buffer atau hambatan
Sebuah aksi untuk menyelesaikan, seperti suatu I/O
Banyak pekerjaan yang harus dilaksanakan, seperti menunggu client
untuk meningkatkan statement SQL yang dieksekusi berikutnya.
Event yang mengidetifikasi bahwa suatu proses server menunggu
untuk banyak pekerjaan dikenal dengan idle events.
Statistik event tunggu mencakup jumlah waktu suatu event menunggu dan
waktu event tunggu selesai. Jika inisialisasi parameter TIMED_STATISTICS
diset true, maka kita juga dapat melihat berapa lama setiap resource ditunggu.
Untuk meminimumkan user response time yaitu dengan cara mengurangi
pemakaian waktu oleh proses server menunggu penyelesaian suatu event.
Tidak semua event tunggu mempunyai waktu tunggu yang sama. Maka dari itu
sangat penting untuk menguji event dengan waktu total tunggu lebih baik dari
event tunggu dengan suatu angka kejadian yang tinggi. Biasanya, hal ini baik
untuk memasang parameter dinamis TIMED_STATISTICS ke true paling tidak
ketika performansi monitoring.
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

Database Management System

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

Database Management System Practice

Memeriksa waktu tunggu dan timing data yang berelasi ketika menampilkan
performansi reaktif tuning. Event dengan waktu terdaftar diantara mereka ada
indikasi yang kuat dari performansi bottleneck. Contohnya, lihat
V$SYSTEM_EVENT, kita dapat melihat banyak buffer busy waits. Ini bisa jadi
banyak proses masuk ke block yang sama dan harus menunggu yang lain
sebelum mereka bisa masuk. Solusinya bisa jadi menggunakan automatic
segment space management atau membagi untuk object di pertanyaan.
d. Statistic System
Statistic system dikombinasikan dengan event tunggu data untuk menemukan
bukti selanjutnya dari penyebab suatu permasalahan performansi.
Contohnya, jika V$SYSTEM_EVENT mengindikasikan event tunggu terbesar
(dalah hal ini waktu tunggu) maka event itu merupakan event buffer busy
waits, lalu lihat statistik buffer tunggu spesifik tersedia pada view
V$WAITSTAT untuk melihat tipe block mana yang mempunyai jumlah tunggu
tertinggi dan waktu tunggu tertinggi.
Statistik tersedia untuk banyak V$ views. Beberapa view umum terdiri dari
berikut ini:
V$ACTIVE_SESSION_HISTORY
View ini menunjukkan aktifitas session database aktif, tersampel setiap detik.
V$SYSSTAT
Hal ini terdiri statistic keseluruhan untuk banyak bagian yang berbeda dari
Oracle, termasuk rollback, logical dan physical I/O, dan parse data. Data dari
V$SYSSTAT digunakan untuk menghitung rasio, seperti buffer cache hit ratio.
V$FILESTAT
Hal ini terdiri file detail I/O statistik untuk tiap file, termasuk jumlah dari I/O
untuk tiap file dan rataan waktu baca.
V$ROLLSTAT
Hal ini terdiri rollback detail dan undo segment statistic untuk tiap segment.
V$ENQUEUE_STAT
Hal ini terdiri enqueue statistics detail untuk tiap enqueue, termasuk jumlah
waktu suatu enqueue diminta dan jumla waktu suatu enqueue ditunggu, dan
waktu tunggu.
Tuning

213

Politeknik Telkom

Database Management System

V$LATCH
Hal ini terdiri pemakaian latch statistic detail untuk tiap latch, termasuk
jumlah waktu tiap latch diminta dan jumlah waktu latch ditunggu
e. Segment-Level Statistik
Kita dapat mengumpulkan segment-level statistic untuk membantu
memusatkan masalah performansi yang diasosiasikan dengan segment
individual. Mengoleksi dan melihat segment-level statistic merupakan cara
yang baik untuk identifikasi efektifitas table atau indeks pada suatu instance.
Setelah melihat event tunggu dan statistic system untuk mengidentifikasi
masalah performansi, kita dapat menggunakan segment-level statistics untuk
menemukan spesifik tabel atau indeks yang menyebabkan masalah. Kita dapat
menyeleksi segment tertinggi dari V$SEGMENT_STATISTICS yang
menyebabkan buffer tunggu sibuk. Lalu kita dapat fokus pada usaha kita pada
mengeliminasi masalah pada segment tersebut.
Kita dapat melakukan queri statistic segment-level melalui performansi
dinamis view berikut:
V$SEGSTAT_NAME View ini terdaftar segment statistik terkoleksi,
sebaik property dari tiap statistik (untuk instansiasi, jika ini suatu
statistic yang sederhana).
V$SEGSTAT ini sangat efisien, real-time monitoring view yang
memperlihatkan nilai statistik, nama statistik, dan informasi dasar
lainnya.
V$SEGMENT_STATISTICS ini user-friendly view dari nilai statistik.
Ada kalanya untuk semua kolom dari V$SEGSTAT, mempunyai
informasi tentang hal sepewrti itu sebagai pemilik segment dan nama
table space. Hal ini membuat statistic mudah dimengerti, tapi lebih
mahal.

Menginterpretasikan Statistik Oracle


Kumpulkan statistik yang menghemat waktu ketika instance memiliki masalah
performansi. Jika Anda sebelumnya menangkap basis data untuk
perbandingan, maka Anda dapat data sekarang dengan basis data yang paling
mewakili masalah beban kerja.
Ketika membandingkan dua laporan, pastikan bahwa dua laporan tersebut
berasal dari waktu ketika sistem sedang berjalan dan dapat dibandingkan
beban kerjanya.
214

Politeknik Telkom

Database Management System Practice

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

Database Management System

Berikut merupakan beberapa contoh generalisasi (nilai yang diterima


berubah-ubah untuk setiap tempat):
Tingkat parse sukar yang berjumlah lebih dari 100 sedetik
mengindikasikan bahwa terdapat sejumlah besar parsing sukar dalam
sistem. Tingkat parse sukar yang tinggi menyebabkan isu performansi
yang serius dan perlu diinvestigasi. Biasanya, tingkat parse sukar yang
tinggi disertai oleh latch contention pada shared pool dan library
cache latches.
Periksa apakah jumlah waktu tunggu (wait time) pada library cache
dan shared pool latch (latch: library cache, latch: library cache pin,
latch: library cache lock and latch: shared pool) penting jika
dibandingkan dengan statistik waktu DB yang ditemukan di
V$SYSSTAT. Jika memang demikian, periksa SQL yang dipesan oleh
sesi Parce Call dari laporan Automatic Workload Repository.
Tingkat parse mudah yang tinggi bisa mencapai 300 per detik atau
lebih. Parse mudah yang tidak perlu juga membatasi skalabilitas
aplikasi. Secara optimal, sebuah SQL statement harus di-parse
mudah sekali setiap sesi dan dieksekusi berulang kali.
Menggunakan Statistik Wait Event untuk Menurunkan Bottlenecks
Kapanpun sebuah proses Oracle menunggu sesuatu, Oracle akan mencatat
penungguan tersebut menggunakan satu dari sekumpulan event tunggu yang
belum terdefinisi. Event tunggu ini dikelompokkan ke dalam kelas wait. Kelas
wait Idle mengelompokkan semua event di mana sebuah proses menunggu
ketika proses tersebut tidak memiliki pekerjaan untuk dilakukan dan sedang
menunggu pekerjaan lain untuk dilakukan. Event Non-idle mengindikasikan
waktu yang tidak produktif dihabiskan untuk menunggu sumber daya atau aksi
untuk diselesaikan.

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

Database Management System Practice

Untuk mendapatkan indikasi di mana waktu dihabiskan, ikuti langkah-langkah


berikut:
1. Periksa koleksi data V$SYSTEM_EVENT. Event ini seharusnya
diurutkan menurut waktu tunggu
Identifikasi event tunggu yang memiliki persentase terpenting dari
waktu tunggu. Untuk menentukan persentase dari waktu tunggu,
tambahkan total waktu tunggu untuk semua event tunggu, kecuali
event idle, seperti event Null, pesan SQL*Net dari klien, pesan
SQL*Net ke klien, dan data lebih SQL*Net ke klien. Hitung
persentase relatif dari lima event terkemuka dengan membagi setiap
waktu tunggu event dengan total waktu tunggu untuk semua event.
Secara alternatif, lihat pada sesi Top 5 Timed Event pada permulaan
laporan Automatic Workload Repository. Sesi ini secara otomatis
mengurutkan event tunggu dan menghitung persentase relatif.
Top 5 Timed Events
~~~~~~~~~~~~~~~~~~
% Total
Event
Waits Time (s) Call Time
-------------------------------------- ------------ ----------- --------CPU time
559 88.80
log file parallel write
2,181
28
4.42
SQL*Net more data from client 516,611
27
4.24
db file parallel write
13,383
13
2.04
db file sequential read
563
2
.27

2.

Tuning

Pada situasi yang sama, mungkin ada beberapa event dengan


persentase yang sama. Hal ini akan menyediakan bukti tambahan jika
semua event berhubungan dengan tipe permintaan sumber daya yang
sama (sebagai contoh, all I/O related events).
Lihat jumlah tunggu pada event ini, dan waktu tunggu rata-rata.
Contohnya, untuk event I/O yang berhubungan, waktu rata-rata
mungkin membantu mengidentifikasi apakah sistem I/O lambat.
Contoh data berikut ini diambil dari sesi Wait Event dari laporan
Automatic Workload Repository:

217

Politeknik Telkom

Database Management System

Avg

Total Wait wait Waits


Event
Waits Timeouts Time (s) (ms)
/txn
--------------------------- --------- --------- ---------- ------ --------log file parallel write
2,181
0
28 13
41.2
SQL*Net more data from clie 516,611
0
27
0 9,747.4
db file parallel write
13,383
0
13
1 252.5

3.

Event wait teratas mengidentifikasi tempat berikutnya yang akan


diinvestigasi. Sebuah tabel wait event didaftar pada Table 10-1.
Biasanya merupakan ide yang bagus untuk juga melihat dengan segera
ke high-load SQL.
4. Periksa data yang berhubungan yang diindikasikan oleh event tunggu
untuk melihat informasi lain apa yang disediakan data ini. Tentukan
apakah informasi ini konsisten dengan data event tunggu. Di dalam
banyak situasi, terdapat data yang cukup untuk mulai
mengembangkan sebuah teori tentang penyebab berpotensi
bottleneck performansi.
Untuk menentukan apakah teori ini valid, periksa ulang data yang telah
diperiksa dengan statistik yang lain yang tersedia untuk konsistensi. Statistik
yang tepat berubah-ubah bergantung pada masalah, tapi biasanya termasuk
muatan data profle yang berhubungan dalam V$SYSSTAT, statistik sistem
operasi,
dan
seterusnya.
Lakukan
pemeriksaan
ulang
untuk
mengkonfirmasikan data atau untuk menyangkal teori yang telah
dikembangkan.
Table of Wait Events and Potential Causes
Table 10-1 menghubungkan event tunggu ke penyebab yang mungkin dan
memberikan sebuah overview data dari Oracle yang bisa berguna untuk mereview yang selanjutnya
Table 10-1 Penyebab Wait Events and Potential
Wait
Event
buffer
waits

218

General
Area
busy Buffer
cache,
DBWR

Possible
Causes
Depends
on
buffer type. For
example, waits
for an index
block may be

Look for / Examine


Examine V$SESSION while the
problem is occurring to
determine the type of block in
contention.

Politeknik Telkom

Wait
Event

General
Area

Database Management System Practice

Possible
Causes

Look for / Examine

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

Examine write time using


operating system statistics.
Check buffer cache statistics for
evidence of too small cache.

db
file I/O, SQL Poorly
scattered
statement SQL
read
tuning
Slow
system

tuned Investigate V$SQLAREA to see


whether
there
are SQL
I/O statements performing many
disk reads. Cross-check I/O
system and V$FILESTAT for
poor read time.

db
file I/O, SQL Poorly
sequential
statement SQL
read
tuning
Slow
system

tuned Investigate V$SQLAREA to see


whether
there
are SQL
I/O statements performing many
disk reads. Cross-check I/O
system and V$FILESTAT for
poor read time.

enqueue
Locks
waits (waits
starting with
enq:)

Depends
type
enqueue

library
latch
library
cache,
library
pin,
library

SQL parsing or Check V$SQLAREA to see


sharing
whether
there
are SQL
statements with a relatively high
number of parse calls or a high
number of child cursors
(column VERSION_COUNT).
Check parse statistics in

cache Latch
waits: contention
cache
and
cache

Tuning

on Look at V$ENQUEUE_STAT.
of

219

Politeknik Telkom

Wait
Event

General
Area

Database Management System

Possible
Causes

Look for / Examine

lock

V$SYSSTAT
and
their
corresponding rate for each
second.

log
buffer Log buffer, Log
space
I/O
small
Slow
system

log file sync

buffer Check the statistic redo buffer


allocation
retries
in
I/O V$SYSSTAT. Check configuring
log buffer section in configuring
memory chapter. Check the
disks that house the online redo
logs for resource contention.

I/O, over- Slow disks that


committing store
the
online logs
Un-batched
commits

Check the disks that house the


online redo logs for resource
contention. Check the number
of transactions (commits +
rollbacks) each second, from
V$SYSSTAT.

Statistik / Ciri-ciri Tambahan


Ada sebuah statistic yang mengindikasikan performansi suatu masalah yang
tidak berkorespondensi / berhubungan dengan wait events.
Redo Log Space Requests Statistic
V$SYSSTAT statistic redo log space requests mengindikasikan berapa kali
suatu proses dari server harus menunggu untuk ruang yang kosong / space
disaat online redo log, bukan space saat redo log buffer. Sebuah nilai yang
signifikan untuk statistic ini dan wait event ini seharusnya digunakan sebagai
sebuah indikasi dari suatu proses checkpoints, DBWR, atau proses
pengarsipan yang seharusnya dioptimalkan, bukan LGWR. Penambahan
ukuran dari log buffer tidak akan membantu.
Read Consistency
Sistem Anda mungkin membutuhkan waktu roll back yang besar untuk
mengubah menjadi suatu blok-blok data untuk memantain bentuk yang
konsisten. Berikut contoh scenario-skenario yang ada :
220

Politeknik Telkom

Tuning

Database Management System Practice

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

Database Management System

Fetch Tabel dengan Continued Row


Anda dapat mengetahui perpindahan atau pemotongan suatu baris / row
dengan mmeriksa angka dari table fetch continued row statistic dalam
V$SYSSTAT. Angka kecil untuk chained row (kurang dari 1 %) tidak
menunjukkan performansi system. Akan tetapi, persentase yang besar untuk
chained rows dapat mempengaruhi performansi sistem.
Penggabungan suatu baris yang melebihi ukuran suatu blok data sangatlah
inevitable.Untuk data seperti itu, Anda mungkin bisa menggunakan tablespace.
Akan tetapi, untuk ukuran row yang lebih kecil, Anda dapat mencegah
penggabungan baris dengan menggunakan sensible space parameters dan design
aplikasi yang bagus. Misalnya, jangan memasukkan sebuah baris dengan nilai
key yang terdefinisi dan di kolom yang lain bernilai null, maka update terhadap
data tersebut menyebabkan size row tersebut bertambah. Oleh karena itu,
masukkan baris yang sudah berisi data sejak awal proses.
Jika update statement menambah jumlah suatu data pada row tertentu, maka
row tersebut tidak akan lagi cukup masuk dalam blok datanya. Sehingga
Oracle mencoba menemukan blok lain dengan free space yang cukup
menyimpan seluruh baris. Jika blok yang baru sudah tersedia, maka Oracle
memindahkan seluruh baris ke blok yang baru tersebut. Hal inilah yang
disebut migrating a row. Jika baris terlalu besar ukurannya untuk masuk
kedalam blok yang tersedia, maka Oracle membagi row menjadi beberapa
bagian dan menyimpannya ke dalam blok-blok yang terpisah. Hal inilah yang
disebut chaining a row. Row dapat juga dipotong-potong ketika mereka diinsertkan.
Migration and chaining khususnya diterapkan untuk hal berikut :
UPDATE statements yang menyebabkan migration and chaining
Queries yang memilih migrated or chained rows karena
membutuhkan tambahan input dan output
Pengertian dari sebuah output table yang bernama CHAINED_ROWS
muncul dalam SQL script yang tersedia dalam distribusi medium
Anda. Nama secara umum dari script ini adalah UTLCHN1.SQL,
walaupun nama sebenarnya dan location varies-nya tergantung
platform Anda.Output table Anda harus mempunyai nama kolom
yang sama, tipe data, dan ukuran sebagai CHAINED_ROWS table.
Penambahan PCTFREE dapat membantu mencegah migrated rows. Jika Anda
menyediakan free space dalam suatu blok, maka row memiliki ruang untuk
222

Politeknik Telkom

Database Management System Practice

tumbuh.Anda dapat juga me-reorganize atau men-create ulang tabel dan


index yang memiliki tingkat deletion yang tinggi. Jika frekuensi penghapusan
row semakin tinggi, maka blok data dapat memiliki free space secara parsial di
dalamnya. Jika rows dimasukkan dan kemudian diperluas, maka inserted row
dalam sebuah blok dengan menghapus rows yang ada tetapimasih belum
memiliki space untuk meluas / expand. Peng-reorganisasian suatu tabel
memastikan bahwa free space berupa blok yang kosong.
Note:
PCTUSED bukan kebalikan dari PCTFREE.
Parse-Related Statistics
Semakin banyak aplikasi parses, semakin berpotensi untuk contention exist,
dan system semakin lama untuk menunggu. Jika parse time CPU menunjukkan
persentase waktu CPU besar, maka waktu lebih banyak digunakan untuk
parsing dibandingkan eksekusi statement.Jka kasus ini terjadi, maka aplikasi ini
sepertinya menggunakan literal SQL dan juga SQL tidak dapat di-share, atau
share-pool tidak perlu disetting.
Ada sebuah angka statistic yang tersedia untuk mengidentifikasi jumlah waktu
yang dibutuhkan Oracle untuk parsing. Query parse berkaitan dengan statistic
dari V$SYSSTAT. Contohnya :
SELECT NAME, VALUE
FROM V$SYSSTAT
WHERE NAME IN ( 'parse time cpu', 'parse time elapsed',
'parse count (hard)', 'CPU used by this session' );
Ada bermacam-macam rasio yang dapat diolah untuk memperkirakan apakah
parsing menjadi suatu masalah :
parse time CPU / parse time elapsed
Rasio ini mengindikasikan berapa banyak waktu yang dihabiskan
untuk parsing karena operasi parsing itu sendiri, bukan karena
menunggu resources, seperti latches. Sebuah rasio disebut bagus,
yang mengindikasikan bahwa elapsed time tidak digunakan secara
penuh untuk mendapatkan resources.
parse time CPU / CPU used by this session
Rasio ini mengindikasikan berapa kali CPU digunakan Oracle server
untuk operasi yang berkaitan dengan parsing. Rasio semakin bagus
jika mendekati 0, yang menunjukkan bahwa CPU tidak digunakan
secara penuh untuk parsing.
Tuning

223

Politeknik Telkom

Database Management System

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:

Mengurangi Beban Kerja (Reduce the Workload)


Menyeimbangkan Beban Kerja (Balance the Workload)
Memparalelkan Beban Kerja (Parallelize the Workload)

a. Mengurangi Beban Kerja (Reduce the Workload)


SQL Tuning secara umum melibatkan pencarian cara yang lebih efisien untuk
memproses beban kerja yang sama. SQL tuning memungkinkan untuk
mengubah rencana eksekusi dari suatu statement tanpa mengubah
fungsionalitas untuk mengurangi pemakaian resource.Dua contoh bagaimana
penggunaan resource dapat dikurangi:
1.

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.

Database Management System Practice

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.

b. Menyeimbangkan Beban Kerja (Balance the Workload)


Sistem cenderung memiliki penggunaan penuh pada siang hari ketika user
yang sebenarnya terhubung ke sistem dan penggunaan yang sedikit di malam
hari. Jika noncritical report dan batch job dapat dijadwalkan untuk berjalan pada
malam hari dan penggunaan sistem pada siang hari dikurangi, maka hal
tersebut dapat membebaskan resource agar dapat digunakan pada programprogram yang lebih penting pada siang hari.
c. Memparalelkan Beban Kerja (Parallelize the Workload)
Query-query yang mengakses sejumlah besar data (typical data warehouse
queries) sering dapat diparalelkan. Hal ini sangat berguna untuk mengurangi
waktu respon dalam data warehouse yang rendah konkurensinya. Akan
tetapi, untuk lingkungan OLTP, yang cenderung tingggi konkurensinya, hal ini
dapat merugikan user-user lain dengan meningkatkan penggunaan resource
secara keseluruhan pada program.
Identifikasi High-Load SQL
Pada bagian ini, akan dijelaskan langkah-langkah yang termasuk ke dalam
identifikasi dan penggapaian data pada High-Load SQL statements. High-Load
(Beban-Tinggi) SQL memiliki performansi yang buruk; resource-intensive
pada SQL statement berdampak pada performansi Oracle Database. HighLoad SQL statements dapat diidentifikasikan dengan :
Automatic Database Diagnostic Monitor
Automatic Workload Repository
V$SQL view
Custom Workload
SQL Trace

Tuning

225

Politeknik Telkom

Database Management System

Identifikasi Resource-Intensive SQL


Langkah dalam mengidentifikasikan resource-intensive SQL adalah dengan
mengkategorikan tiap masalah yang harus diperbaiki:
Apakah masalah tersebut spesifik untuk tiap satuan program (atau
sedikit program)?
Apakah program biasa terjadi pada aplikasi?
Melakukan Tuning pada Program yang Spesifik
Jika anda melakukan tuning terhadap program spesifik (GUI atau 3GL), maka
identifikasi SQL untuk pengujian adalah hal yang cukup mudah jika dilihat pada
SQL yang tereksekusi di dalam program. Oracle Enterprise Manager
menyediakan alat-alat (tools) untuk mengidentifikasi resource-intensive SQL
statements, meng-generate explain plans, dan mengevaluasi performansi SQL
Jika tidak dimungkinkan adanya identifikasi SQL (contohnya, SQL degenerate
secara dinamis), maka gunakan SQL_TRACE untuk meng-generate jejak file
yang mengandung SQL yang tereksekusi, lalu gunakan TKPROF untuk menggenerate output-an file.
SQL statements pada file output TKPROF dapat diurutkan bedasarkan
berbagai macam parameter, seperti eksekusi yang telah lalu (exeela), yang
mana biasanya dapat membantu dalam mengidentifikasi dengan mengurutkan
SQL statements berdasarkan urutan waktu (waktu yang paling lama berada di
bagian atas dari file). Maka, dengan ini, pekerjaan mengidentifikasi performansi
SQL yang buruk menjadi lebih mudah, jika ada terdapat banyak SQL
statements di dalam file.
Melakukan Tuning Aplikasi/ Mengurangi Beban
Jika keseluruan aplikasi anda berjalan kurang optimal, atau jika anda ingin
mengurangi beban keseluruhan CPU atau I/O pada database server, maka
identifikasi SQL dengan langkah-langkah berikut ini :
1.

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

Database Management System Practice

(V$SQLAREA, V$SQL or V$SQLSTATS, V$SQLTEXT, V$SQL_PLAN,


dan V$SQL_PLAN_STATISTICS).
Lakukan Select * From V$-view untuk melihat data dari table view diatas.
Misal :
SELECT *
FROM V$FILESTAT;
3.

Dengan data yang didapatkan dari langkah ke-2, identifikasi SQL


statements dengan kebanyakan resources. Cara yang baik untuk
mengidentifikasi kandidat SQL statements adalah dengan menggunakan
query V$SQLSTATS. V$SQLSTATS mengandung informasi pemakaian
resource buat semua SQL statements pada shared pool. Data pada
V$SQLSTATS sebaiknya diurutkan berdasarkan pemakaian resource.
Source yang biasanya ada, antara lain :
Buffer gets (V$SQLSTATS.BUFFER_GETS, for high CPU using
statements)
Disk reads (V$SQLSTATS.DISK_READS, for high I/O statements)
Sorts (V$SQLSTATS.SORTS, for many sorts)

Satu metode untuk mengidentifikasi SQL statements saat menghasilkan beban


terberat adalah dengan membandingkan resource yang digunakan oleh suatu
SQL statement dengan jumlah total resource yang digunakan pada periode
tersebut. Untuk BUFFER_GETS, bagi BUFFER_GETS untuk tiap SQL
statement dengan jumlah total BUFFER_GETS delama periode. Jumlah total
BUFFER_GETS pada system tersedia pada table V$SYSTAT, untuk
pembacaan lojik sesi statistika.
Sepertinya, sangat dimungkinkan membagi secara adil jumlah persentase dari
pembacaan disk terhadaap tampilan statement di luar pembacaan total disk
yang
ditampilakan
oleh
system
dengan
membagi
V$SQL_STATS.DISK_READS dari nilai pembacaan fisikal terhadap statistika
V$SYSTAT.
Setelah anda mengidentifikasi kandidat SQL statements, langkah berikutnya
adalah mendapatkan informasi yang penting untuk menguji statementstatement tersebut dan melakuakn tuning terhadapnya.
Tuning

227

Politeknik Telkom

Database Management System

Mendapatkan data pada SQL yang teridentifikasi


Jika anda lebih terfokuskan pada CPU, maka ujilah bagian atas dari SQL
statements yang menampilkan BUFFER_GETS paling banyak selama interval.
Atau dengan kata lain, mulai dengan SQL statement yang menampilkan
DISK_READS paling banyak.
Informasi yang musti didapatkan selama Tuning
Lakukan pencarian untuk mendapatkan informasi-informasi berikut :
1.
2.
3.
4.
5.
6.
7.
8.

SQL text lengkap dari V$SQLTEXT


Struktur table berasal dari SQL statement, biasanya dengan
menggambarkan table pada SQL*Plus
Penjelasan tiap index (kolom, kolom terurut), dan apakah indexindex tersebut unique atau non-unique
Optimizer statistics untuk segment (termasuk jumlah naris tiap table,
kepandaian memilih dari kolom index), termasuk tanggal kapan
sgment dianalisa.
Definisi tiap view berdasarkan SQL statements
Ulangi langkah ke 2, 3 dan 4 untuk setiap table berdasarkan
penjelasan view yang didapatkan di langkah ke 5
Perencanaan optimisasi untuk SQL statements (baik dari EXPLAIN
PLAN, V$SQL_PLAN, atau keluaran TKPROF )
Rencanakan optimisasi untuk SQL statement yang sebelumnya

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.

Fitur-fitur Otomatis dalam Tuning SQL


Oleh karena petunjuk proses SQL tuning memperlihatkan banyak tantangan
pada pengembang aplikasi, proses SQL tuning telah diotomatisasi oleh fitur
manageability otomatis SQL Tuning. Fitur-fitur ini telah didesain untuk bekerja
sama baiknya pada OLTP dan tipe aplikasi Data Warehouse.
228

Politeknik Telkom

Database Management System Practice

ADDM
Automatic Database Diagnostic Monitor (ADDM) menganalisa informasi yang
dikumpulkan oleh AWR tentang masalah-masalah performansi yang mungkin
terjadi dengan Oracle database, termasuk high-load SQL statement.
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

Database Management System

Restrukturisasi SQL Statements


Restrukturisasi Indeks
Modifikasi atau Disable Trigger dan ConstrainModifying or Disabling
Triggers and Constraints
Restrukturisasi Data
Perawatan Rencana Eksekusi Over Time
Kunjungan Data Dengan Waktu Sesedikit Mungkin

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.

Verifikasi Statistik Optimizer


Query optimizer menggunakan statistik yang dikumpulkan pada tabel dan
indeks ketika memutuskan rencana eksekusi yang optimal. Jika statistik ini
tidak dikumpulkan, atau jika statistik tidak lagi mewakili data yang disimpan
pada basis data, maka optimizer tidak lagi memiliki informasi yang penting
untuk meng-generate rencana terbaik.
Hal-hal yang perlu diperiksa:
Jika kita mengumpulkan statistik untuk beberapa tabel pada basis
data, maka mungkin hal yang terbaik adalah mengumpulkan statistik
untuk semua tabel. Hal ini benar terutama bila aplikasi yang
digunakan melibatkan SQL statement yang menggunakan join.
Jika statistik optimizer pada kamus data tidak lagi mewakili data pada
tabel atau indeks, maka kumpulkan statistik yang baru. Satu cara
untuk memeriksa apakah kamus statistik tidak berlaku lagi adalah
dengan membandingkan kardinalitas real (row count) pada tabel
dengan nilai DBA_TABLES.NUM_ROWS. Sebagai tambahan, jika ada
data signifikan yang mengarah pada kolom predikat, maka sebaiknya
gunakan histogram.
230

Politeknik Telkom

Database Management System Practice

Reviewing the Execution Plan


Ketika kita melakukan tuning (atau writing) sebuah SQL statement pada
lingkungan OLTP, tujuannya adalah untuk beralih dari tabel yang memiliki
filter yang paling selektif. Ini berarti bahwa ada beberapa baris yang
bergabung. Periksa untuk memastikan bahwa jalur pengaksesan telah optimal.
Ketika memeriksa rencana eksekusi optimizer, lihatlah yang berikut ini:
Rencana seperti tabel driving memiliki filter terbaik
Perintah join pada tiap langkah berarti bahwa angka terkecil pada
baris dikembalikan pada langkah selanjutnya (yaitu, perintah join
harus merefleksikan, ketika memungkinkan, mengarah filter terbaik
yang belum terpakai).
Metode join sesuai dengan jumlah baris yang dikembalikan. Sebagai
contoh, loop bersarang bergabung melalui indeks mungkin tidak
optimal ketika banyak baris dikembalikan.
View digunakan secara efisien. Lihat pada urutan SELECT untuk
melihat apakah pengaksesan ke view penting.
Ada beberapa produk Cartesian yang tidak penting (bahkan dengan
tabel kecil).
Setiap tabel diakses secara efisien:
Pertimbangkan predikat-predikat pada SQL statement dan jumlah baris pada
tabel. Lihat pada aktivitas yang mencurigakan, seperti scan tabel secara penuh
dengan sejumlah besar baris, yang memiliki predikat pada klausa where.
Tentukan mengapa sebuah indeks tidak digunakan untuk predikat selektif.
Sebuah scan tabel secara penuh tidak berarti tidak efisien. Hal tersebut
mungkin efisien untuk melakukan scan tabel penuh pada tabel kecil, atau
untuk melakukan scan tabel penuh untuk membuat metode join yang lebih
baik (misalnya, hash join) untuk sejumlah baris yang dikembalikan.
Jika ada dari kondisi-kondisi ini yang tidak optimal, maka pertimbangkan untuk
merestrukturisasi SQL statement atau indeks-indeks yang tersedia pada tabel.
Rekstruturisasi SQL Statement
Seringkali, menulis ulang SQL statement yang tidak efisien lebih mudah
daripada dimodifikasi. Jika Anda mengerti tujuan dari statement yang
Tuning

231

Politeknik Telkom

Database Management System

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

Database Management System Practice

Hindari jenis ekspresi yang kompleks seperti berikut:

col1 = NVL (:b1,col1)


NVL (col1,-999) = .
TO_DATE(), TO_NUMBER(), and so on

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

Database Management System

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

Database Management System Practice

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

Database Management System

Jika Anda menjalankan EXPLAIN PLAN pada query yang baru, maka Anda
kelihatannya akan mendapatkan rencana eksekusi yang diinginkan dan tidak
diinginkan. Akan tetapi, kondisi awal yang dievaluasi basis data untuk sebagian
UNION ALL adalah kombinasi kondisi :hival and :loval yaitu ALL. Basis data
mengevaluasi kondisi ini sebelum sebenarnya mendapatkan beberapa baris
dari rencana eksekusi untuk bagian dari query.
Ketika kondisi kembali salah untuk satu bagian dari query UNION ALL,
bagian tersebut tidak dievaluasi lebih lanjut. Hanya bagian dari rencana
eksekusi yang nilainya optimum yang diambil. Karena kondisi akhir pada :hival
and :loval dijamin tetap terpisah ekslusif, hanya satu setengah dari UNION
ALL yang dikembalikan ke baris. (ALL pada UNION ALL secara logis valid
karena eklusifitas ini. Ini membuat perencanaan dapat dijalankan tanpa
pengurutan yang mahal untuk menghilangkan baris-baris yang terduplikasi dua
setengah bagian dari query.)
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

Database Management System Practice

Catatan:
Anda harus memverifikasi ongkos optimizer dari statement
dengan angka aktual dari sumber daya yang digunakan
(BUFFER_GETS,
DISK_READS,
CPU_TIME
from
V$SQLSTATS or V$SQLAREA). Situasi seperti data tidak
langsung (tanpa menggunakan histogram) dapat secara meluas
mempengaruhi estimasi ongkos optimizer pada sebuah
operasi.
"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.

Contoh 1: Menggunakan IN - Selective Filters pada Subquery


Contoh ini menunjukan bagaimana menulis ulang suatu queri untuk digunakan
pada IN dapat meningkatkan performansi. Queri ini mengidetifikasi semua
pegawai yang menempatkan order pada keperluan dari customer 144.
Statement SQL berikut menggunakan EXISTS:
SELECT /* EXISTS example */
e.employee_id, e.first_name, e.last_name, e.salary
FROM employees e
WHERE EXISTS (SELECT 1 FROM orders o
/* Note 1 */
WHERE e.employee_id = o.sales_rep_id /* Note 2 */
AND o.customer_id = 144);
/* Note 3 */
Tuning

237

Politeknik Telkom

Database Management System

Catatan:
Note 1: Ini menunjukkan baris yang berisikan EXISTS.
Note 2: Ini menunjukkan baris yang membuat subquery
suatu subquery terkolerasi.
Note 3: Ini menunjukkan baris dimana subqueries
terkorelasi terdapat highly selective predicate customer_id =
number.
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

Penulisan ulang statement menggunakan IN menghasilkan pemakaian resource


yang lebih sedikit secara signifikan.
Statement SQL menggunakan IN:
SELECT /* IN example */
e.employee_id, e.first_name, e.last_name,
e.salary
FROM employees e
WHERE e.employee_id IN (SELECT o.sales_rep_id
/* Note 4 */
FROM orders o
WHERE o.customer_id =
144); /* Note 3 */

238

Politeknik Telkom

Database Management System Practice

Catatan:
Note 3: Hal ini menunjukkan baris dimana subquerie terkorelasi
terdapat highly selective predicate customer_id = number
Note 4: Hal ini mengidentifikasikan bahwa suatu IN digunakan.
Subqueri tidak lagi berkorelasi, karena klausa IN menggantikan
penggabungan dalam subqueri.
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

Contoh 2: Menggunakan EXISTS - Selective Predicate pada Induk


Contoh ini mendemoa bagaimana menulis ulang suatu query untuk
menggunakan EXISTS dapat meningkatkan performansi. Queri ini
mengidentifikasikan semua pegawai dari departement 80 yang sales rep nya
menempati permintaan.
Statement SQL menggunakan IN:
SELECT /* IN example */
e.employee_id, e.first_name, e.last_name,
e.department_id, e.salary
FROM employees e
WHERE e.department_id = 80
/* Note 5 */
AND e.job_id
= 'SA_REP'
/* Note 6 */
AND e.employee_id IN (SELECT o.sales_rep_id FROM
orders o); /* Note 4 */

Tuning

239

Politeknik Telkom

Database Management System

Note:

Note 4: Hal ini mengindikasikan bahwa sebuah IN sedang


digunakan. Subqueri tidak lagi berkorelasi, karena klausa IN
menempati ulang penggabungan dalam subquery.
Note 5 dan 6: Ini merupakan selective predicates pada induk SQL.

Output rencana berikut adalah rencana eksekusi (dari V$SQL_PLAN) untuk


mendahulukan statement. Statement SQL ditulis ulang oleh pengoptimasi
untuk menggunakan suatu view pada tabel orders, yang membutuhkan
pengurutan data untuk mengembalikan semua employee_ids yang unik
termasuk dalam tabel orders. Karena tidak ada predikat, banyak
employee_ids dikembalikan. Daftar yang besar dari menghasilkan
employee_ids digunaan untuk mengakses tabel employees melalui indeks yang
unik.
ID OPERATION
OPTIONS
OBJECT_NAME
OPT
COST
---- -------------------- --------------- ---------------------- --- ---------0 SELECT STATEMENT
CHO
1 NESTED LOOPS
125
2
VIEW
116
3
SORT
UNIQUE
116
4
TABLE ACCESS
FULL
ORDERS
ANA
40
5
TABLE ACCESS
BY INDEX ROWID EMPLOYEES
ANA
1
6
INDEX
UNIQUE SCAN
EMP_EMP_ID_PK
ANA

Statement SQL menggunakan EXISTS:


SELECT /* EXISTS example */
e.employee_id, e.first_name, e.last_name,
e.salary
FROM employees e
WHERE e.department_id = 80
/*
Note 5 */
AND e.job_id
= 'SA_REP'
/*
Note 6 */
AND EXISTS (SELECT 1
/*
Note 1 */
FROM orders o
WHERE e.employee_id = o.sales_rep_id);
/* Note 2 */
240

Politeknik Telkom

Database Management System Practice

Note:

Note 1: Hal ini memperlihatkan baris yang terdapat EXISTS.


Note 2: Hal inimemperlihatkan baris yang membuat subquery
sebuah subquery yang berkorelasi.
Note 5 & 6:hal ini merupakan selective predicates pada induk SQL.

Output rencana berikut adalah rencana eksekusi (dari V$SQL_PLAN) untuk


mendahulukan statement. Cost dari rencana dikurangi dengan menulis ulang
statement SQL untuk menggunakan EXISTS. Rencana ini lebih efektif, karena
dua indeks digunakan untuk memenuhi predikat pada queri induk, hal ini
mengembalikan hanya beberapa employee_ids. employee_ids kemudian
digunakan untuk mengakses tabel orders melalui indeks.
ID OPERATION
OPTIONS
OBJECT_NAME
OPT
COST
---- -------------------- --------------- ---------------------- --- ---------0 SELECT STATEMENT
CHO
1 FILTER
2
TABLE ACCESS
BY INDEX ROWID EMPLOYEES
ANA
98
3
AND-EQUAL
4
INDEX
RANGE SCAN
EMP_JOB_IX
ANA
5
INDEX
RANGE SCAN
EMP_DEPARTMENT_IX
ANA
6
INDEX
RANGE SCAN
ORD_SALES_REP_IX
ANA

Tuning

241

Politeknik Telkom

Database Management System

13 BACKUP DAN RECOVERY

Overview

Tujuan dari seorang administrator database ialah untuk memastikan suatu


database dapat digunakan dan tersedia pada saat user membutuhkan. Sebagai
support dari tujuan tersebut, database administrator membutuhkan Backup
dan Recovery untuk menjaga available data

Tujuan

1.
2.
3.

242

Mahasiswa memahami konsep dan terminologi Backup / Recovery.


Mahasiswa dapat mengimplementasikan Backup / Recovery.
Mahasiswa dapat meyelesaikan berbagai persoalan yang terkait dengan
Backup and Recovery.

Politeknik Telkom

Database Management System Practice

DEFINISI
Sistem komputer sebagaimana peralatan mekanis/elektronis lainnya, juga
berpotensi mengalami kerusakan atau kegagalan operasi. Beberapa panyebab
kerusakan atau kegagalan operasi adalah:

Aliran listrik putus, yang dapat mengakibatkan hilangnya informasi


yang ada di memori utamadan register.

Kesalahan operator (human error), dimana operator (manusia)


melakukan kesalahan operasi yang tidak disengaja.

Kesalahan perangkat lunak, yang dapat mengakibatkan hasil


pengolahan (akhir/antara) menjadi tidak benar, informasi yang
disajikan ke user salah, dan basis data menjadi tidak konsisten.

Disk rusak, yang dapat mengakibatkan hilangnya informasi atau


rusaknya basis data yang ada di dalam disk.

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

mengembalikan kondisi basis data seperti semula, ketika terjadi kerusakan


pada basis data yang kita kelola. Operasi recovery ini ada yang terjadi secara
otomatis tetapi ada pula yang harus dieksekusi manual oleh Administrator
Basis Data (DBA/ Database Administrator). Operasi recovery dijalankan secara
otomatis oleh DBMS sepanjang kerusakan tidak terjadi pada media
penyimpanan permanent (disk) yang berisi basis data utama berada. Tetapi jika
kerusakan terjadi pada media penyimpanan permanen (disk) dimana basis data
Backup dan Recovery

243

Politeknik Telkom

Database Management System

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

Database Management System Practice

1. Kegagalan Transaksi (Transaction Failure)


Ada beberapa jenis kesalahan/ error yang dapat menyebabkan
sebuah transaksi menjadi gagal:
a.

Kesalahan logika (Logical Error), di mana program/


sistem tidak dapat melanjutkan eksekusi normalnya karena
adanya kondisi internal trtentu seperti masukan yang salah/
rusak, data tidak tersedia, nilai data diluar batas domain
yang diperbolehkan (overflow), logika program yang tidak
tepat (bugs) atau batas sumber daya sistem (resource)
seperti memori habis.

b.

Kesalahan sistem (System Error), dimana program/


sistem telah memasuki kondisi yang tidak diharapkan
seperti terjadinya deadlock , sebagai hasil dari tidak
tereksekusinya program/ sistem secara normal

2. Kerusakan sistem (System Crash)


Hardware macet (hang), menyebabkan isi media penyimpanan
sementara (volatile storage) hilang.
3. Kegagalan/ kerusakan Disk (Disk Failure)
Adanya/ terjadinya

bad sector

atau disk

macet pada saat

berlangsungnya operasi I/O ke disk.


OPERASI DASAR KE MEDIA PENYIMPANAN
Basis data secara permanen dan lengkap tersimpan di dalam media
penyimpanan permanen yaitu disk. Ruang penyimpanan di dalam media ini
dipilah-pilah dalam satuan-satuan penyimpanan yang sama besarnya disebut
dengan istilah blok. Blok ini menunjukkan satuan pentransferan data dari dan
Backup dan Recovery

245

Politeknik Telkom

Database Management System

ke disk, dan dapat berisi banyak item/ baris data. Karena digunakan untuk
menampung data, kita dapat menggunakan istilah blok data. Kita dapat
mengasumsikan bahwa tidak ada satupun item data yang menggunakan dua
atau lebih blok data.
Transaksi-transaksi yang berjalan di dalam sebuah sistem basis data
akan memasukkan data/ informasi dari disk ke dalam memori utama dan
kemudian mengeluarkan kembali data/ informasi tersebut ke dalam disk.
Operasi pemasukan (input) dan pengeluaran (output) ini dilakukan dalam
satuan-satuan blok data. Blok-blok data yang bersifat permanen yang ada di
dalam disk biasanya disebut dengan blok fisik (physical blocks), sementara
blok-blok data yang berada di dalam memori utama dan bersifat temporer
disebut dengan blok buffer(buffer blocks).
Perpindahan blok data dari/ke memori ke/dari disk dilakukan dengan
menggunakan dua buah operasi dasar berikut ini:
1.

input (A), yang akan mentransfer blok fisik di disk


dimana A berada ke memori utama.

2.

output (A), yang akan mentransfer blok buffer di


memori utama dimana A berada ke disk.

246

Politeknik Telkom

Database Management System Practice

Setiap transaksi Ti mamiliki area kerja khusus di dalam memori utama untuk
tempat pengelolaan salinan dari semua item data yang diakses dan diubah oleh
transaksi tersebut. Transaksi Ti berinteraksi dengan sistem basis data dalam
melakukan pentransferan daata ke dan dari area kerja ke buffer sistem dengan
menggunakan dua buah operasi berikut ini:
1.

read (X), berarti memberi harga X dari basis data ke variabel lokal
di memori bernama xi. Operasi yang dikerjakan sebagai berikut:
a.

jika blok dimana X berada (kita sebut dengan Bx) tidak ada
di memori utama, lakukan input(Bx).

b.

Isikan harga X yang ada di blok buffer ke variabel lokal xi.

Backup dan Recovery

247

Politeknik Telkom

2.

Database Management System

write(X), berarti memberi harga dari variabel lokal xi ke item X di


blok buffer
a. Jika blok dimana X berada (kita sebut dengan Bx) tidak ada
di memori utama, lakukan input(Bx).
b.

Isikan harga dari variabel lokal xi ke dalam item X yang ada


di blok buffer.

Dapat kita lihat bahwa kedua operasi di atas membutuhkan pentransferan


blok data dari disk ke dalam memori utama, tetapi tidak membutuhkan
pentransferan sebaliknya yaitu dari memori utama ke disk. Blok buffer pada
saat-saat tertentu akan dituliskan / direkam ke dalam disk atas inisiatif DBMS
sendiri baik karena modul buffer manager sedang membutuhkan ruang
memori untuk kebutuhan tertentu atau karena DBMS ingin merefleksikan
perubahan data yang telah terjadi ke dalam disk. Pemakai / user sendiri dapat
pula memaksakan DBMS untuk mentransfer data yang telah berubah di
memori utama ke dalam disk dengan menggunakan perintah identifikasi akhir
transaksi, yaitu commit atau commit work, dimana perintah ini akan
menyebabkan dilaksanakannya perintah output(Bx) oleh DBMS, yang
membuat blok dimana X berada akan di rekam ke disk.
SKEMA MEKANISME RECOVERY
RECOVERY BERBASIS FILE LOG
File log merupakan sarana yang umum digunakan untuk merekam terjadinya
perubahan-perubahan terhadap basis data. File log ini berisi record-record log
yang berkolerasi dengan semua operasi perubahan pada basis data. Terdapat
beberapa jenis record-record log yang nantinya akan terlibat dalam
248

Politeknik Telkom

Database Management System Practice

mekanisme recovery. Sebuah record log untuk menunjukkan sebuah operasi


penulisan ke basis data, akan memiliki field-field seperti berikut ini:

Pengidentifikasi Transaksi (Transaction identifier),


yang merupakan nilai unik untuk mengidentifikasi transaksi
yang menjalankan operasi write.

Pengidentifikasi data (Data-item identifier),

yang

merupakan nilai unik untuk identifikasi item data yang


ditulis. Umumnya nilai ini juga menunjukkan lokasi fisik disk
dari item data tersebut.

Nilai lama (old value), yang merupakan nilai item data


sebelum operasi write dijalankan.

Nilai baru (new value), yang merupakan nilai item data


setelah operasi write dijalankan.

Beberapa jenis-jenis record file log yang menunjukkan operasi-operasi penting


terhadap basis data:

< Ti start> menunjukan adanya sebuah transaksi Ti telah dimulai.

< Ti , Xj , V1 , V2 > yang menunjukkan transaksi Ti telah menjalankan


operasi write terhadap item data Xj. Xj mula-mula bernilai V1 sebelum
operasi tersebut dan kemudian bernilai V2 setelah operasi write
tersebut.

< Ti commit > yang menunjukkan transaksi Ti telah direkam


sempurna (di-commit)

< Ti abort > yang menunjukkan transaksi Ti telah dibatalkan.

Backup dan Recovery

249

Politeknik Telkom

Database Management System

1. Teknik File Log dengan Penundaan Pengubahan (Incremental


Log With Deferred Updates)
Teknik ini menjamin keatomikan transaksi dengan merekam semua
perubahan basis data ke dalam file log, tetapi menunda eksekusi semua
operasi penulisan (write) dalam sebuah transaksi hingga transaksi
tersebut barada dalam keadaan ter-commit secara parsial. Ketika sebuah
transaksi telah ter-commit secara parsial, informasi pada file log yang
berhubungan

dengan

transaksi

tersebut

akan

digunakan

untuk

mengeksekusi operasi write yang tertunda. Jika sistem tersebut macet


(crash) sebelum transaksi selesai dikerjakan, atau jika transaksi tersebut
dibatalkan, maka informasi dalam file log ini dengan mudah dapat
diabaikan. Pada teknik ini sebenarnya yang dibutuhkan hanyalah nilai
baru (New Value) dari item yang terlibat dalam operasi write. Karena
itu, struktur record dalam file log dapat disederhanakan dengan
meniadakan field untuk nilai lama.
Untuk mengilustrasikan skema ini, akan diangkat lagi kasus
tentang transaksi transfer dana antar rekening. Katakanlah T 0
merupakan transaksi untuk mentransfer dana sebesar 100000 rupiah
dari rekening A ke rekening B. Transaksi ini didefinisikan sebagai
berikut:
T0 :

read(A)
A A 100000
write(A)
read(B)
B B + 100000
write(B)

250

Politeknik Telkom

Database Management System Practice

Sementara T1 menyatakan transaksi penarikan dana dari rekening C


sebesar 200000. Transaksi ini didefinisikan sebagai berikut:
T1 :

read(C)
C C 200000
write(C)

Anggaplah bahwa transaksi-transaksi ini dieksekusi secara serial, dengan


urutan T0 baru kemudian T1 dan nilai saldo awal untuk rekening A, B,
dan C berturut-turut adalah 1 juta, 2 juta, dan 500 ribu rupiah.
Potongan file log yang berkenaan dengan operasi-operasi pada kedua
transaksi tersebut beserta dengan kondisi basis data adalah:
Log

Basis data

< T0 start >


< T0, A, 900000 >
< T0, B, 2100000 >
< T0 commit >
A = 900000
B = 2100000
< T0 start >
< T0, C, 300000 >
< T0 commit >
C = 300000
Dengan menggunakan file log, sistem akan menangani berbagai
kesalahan/ kegagalan sistem yang dapat menyebabkan hilangnya
informasi dalam media penyimpanan sementara (volatile storage). Skema

Backup dan Recovery

251

Politeknik Telkom

Database Management System

recovery ini menjalankan sebuah prosedur recovery jika adal kegagalan


sistem, yaitu:

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.

2. Teknik File Log dengan Pengubahan Langsung (Incremental


Log With Immediate Updates)
Mekanisme recovery dengan pengubahan segera/langsung membuat
tindakan-tindakan perubahan ke basis data di dalam transaksi langsung
dilakukan terhadap basis data tersebut kendati transaksi tersebut masih
berlangsung. Perubahan ke basis data untuk transaksi yang sedang aktif
semacam ini disebut dengan perubahan tak sempurna (uncommitted
modifications). Hal ini tentu saja berbeda dengan teknik yang pertama,
dimana perubahan tersebut belum akan diteruskan ke basis data selama
transaksi belum berakhir. Namun demikian, sebagaimana pada teknik
pertama teknik ini juga menggunakan file log yang digunakan untuk
252

Politeknik Telkom

Database Management System Practice

memelihara semua tahapan perubahan dari keadadaan basis data serta


pengawalan dan penutupan transaksi.
Karena

informasi

dalam

file

log

akan

digunakan

untuk

merekonstruksi keadaan basis data, kita tidak membolehkan perubahan


aktual ke basis data terjadi sebelum record yang bersesuaian dalam file
log telah dituliskan ke media penyimpanan yang stabil. Karena itu kita
mensyaratkan bahwa sebelum eksekusi dari sebuah operasi output(B),
record-record dalam file log yang berhubungan dengan item data B telah
ditulis ke dalam media penyimpanan yang stabil.
Kita kembali ke contoh semula untuk mengilustrasikan hal ini.
Berikut ini adalah potongan-potongan file log yang berkaitan dengan T0
dan T1 beserta kondisi basis datanya:
Log

Basis data

< T0 start >


< T0, A, 1000000 , 900000 >
< T0, B, 2000000 , 2100000 >
A = 900000
B = 2100000
< T0 commit >
< T0 start >
< T0, C, 300000 >
C = 300000
< T0 commit >
Jika terjadi kegagalan sistem, skema recovery ini memakai dua prosedur
berikut ini:
Backup dan Recovery

253

Politeknik Telkom

Database Management System

Undo(Ti), yang merekam kembali nilai semua item data yang diubah
oleh transaksi Ti ke nilai awalnya.

Redo(Ti), yang membuat semua nilai item data yang diubah oleh
transaksi Ti ke nilai barunya.

Setelah terjadi kegagalan sistem/ basis data, skema recovery ini akan melihat
isi dari file log untuk mengetahui transaksi mana saja yang akan diulangi dan
transaksi mana saja yang akan dibatalkan. Keduanya dapat diketahui dengan
menggunakan aturan sebagai berikut:

Transaksi Ti harus dikembalikan ke kondisi awalnya (undo) jika


dalam file log terdapat record < Ti start > dan tidak ada record < Ti
commit >

Transaksi Ti harus dituntaskan (redo) jika dalam file log terdapat


record < Ti start > dan record < Ti commit >

OPERASI BACKUP
Meskipun kerusakan pada isi media penyimpanan permanen (disk)
jarang terjadi tetapi kita tetap perlu waspada terhadap jenis kerusakan ini
yang sering kali terjadi tanpa kita duga sama sekali. Di sisi lain, kerusakan
bahkan kehilangan data juga bisa terjadi karena faktor eksternal misalnya
karena perusakan/penghapusan data baik di sengaja maupun tidak oleh
pemakai yang tidak memiliki otoritas, atau bisa pula terjadi karena pemakai
yang juga memiliki otoritas. Selain itu kerusakan data dapat pula terjadi karena
sistem/aplikasi eksternal misalnya virus, worm, dll. Kerusakan-kerusakan data
yang disebabkan oleh hal-hal yang telah disebutkan diatas dapat diantisipasi
dengan melakukan operasi backup secara periodik, misalnya setiap tengah
malam.
254

Politeknik Telkom

Database Management System Practice

Disamping menunjukkan salah satu jenis operasi yang penting dalam


sebuah sistem basis data, istilah backup dapat pula merujuk pada objek dari
operasi tersebut. Sebagai objek, backup adalah salinan dari data. Data di sini
tidak hanya meliputi data pada level pemakai akhir/ enduser tetapi juga bisa
mencakup bagian-bagian penting dari basis data secara keseluruhan, seperti
file-file kontrol (meta data) ataupun file-file log. Ditinjau dari objeknya, backup
dapat dikelompokkan kedalam:
1. Backup fisik (physical backup)
Adalah salinan fisik file-file basis data seperti tabel-tabel data, file
kontrol, file log. Backup fisik dapat dihasilkan dari pengeksekusian
program utilitas yang disediakan oleh DBMS yang bersangkutan
ataupun program utilitas yang disediakan oleh sistem operasi
(Operating System) dimana DBMS itu berada.
2. Backup lojik (logical backup)
Backup lojik kita dapatkan dari pembentukan file-file /objek yang
berisi perintah (bisa berupa teks bahasa SQL ataupun perintah biner)
yang jika dieksekusi dapat mengembalikan basis data ke kondisi
semula. Backup lojik hanya dapat dihasilkan dari pengeksekusian
program

utilitas khusus yang disediakan oleh

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

Database Management System

BACKUP JARAK JAUH


Sistem pemrosesan transaksi konvensionla umumnya berbentuk
sistem tersentralisasi (centralized) dan sisanya menggunakan sistem
client-server. Kedua sistem tersebut hanya menekankan pada
pembedaan lokasi pemrosesan tetapi lokasi data tetap pada satu
lokasi saja. Karena itu kedua sistem tersebut cukup riskan dari
gangguan lingkungan seperti kebakaran, banjir, dll. Sebuah alternatif
adalah dengan menjalankan pengolahan transaksi pada sebuah situs
yang disebut sebagai situs utama/ primer, tetapi dengan memiliki
sebuah situs untuk backup jarak jauh (remote backup), dimana semua
data disitus utama direplikasi. Situs remote backup kadang-kadang
disebut juga dengan situs sekunder. Situs remote backup ini harus
disinkronisasi dengan situs primer begitu terjadi perubahan pada
situs primer yaitu dengan mengupayakan sinkronisasi dengan
mengirimkan semua record log dari situs primer ke remote backup.
Situs remote backup secara fisik harus terpisah dengan situs primer.
Sehingga begitu gangguan alam terjadi pada lokasi tempat situs
primer ini kerusakan data tidak terjadi di remote backup. Berikut ini
adalah contoh dari arsitektur adanya situs remote backup bagi sebuah
situs primer:

256

Politeknik Telkom

Database Management System Practice

Ketika situs primer mengalami kerusakan maka situs remote backup


akan segera mengambil alih pemrosesan. Beberapa isu yang perlu
kita perhatikan pada saat merancang sebuah sistem dengan remote
backup adalah:

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)

komunikasi yang independen antara kedua situs.

Pemindahan kontrol
Ketika situs primer mengalami kerusakan, situs backup akan
mengambil alih pemrosesan dan menjadi situs primer yang
baru.

Waktu untuk pemulihan


Konfigurasi hot-spare dapat membuat proses pengalihan
kontrol menjadi lebih cepat

(hampir instant). Pada

konfigurasi ini, situs remote backup secara terus menerus


memproses isi file log untuk aksi redo begitu record file log
tersebut diterima dan kemudian menerapkannya secara
lokal.

Waktu untuk commit


Sebuah transaksi harus tidak dinyatakan ter-commit
sebelum record-record log-nya telah diterima situs backupnya.

Backup dan Recovery

257

Politeknik Telkom

Database Management System

SOAL

1. Sebutkan dan jelaskan karakteristik yang harus dimiliki


oleh sebuah transaksi agar integritas basis data dapat
terjaga?
2.
T1:
read(A)
A A - 100000
read(B)
B B + 100000
write(A)
read(C)
c C + 1
write(B)
write(C)

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)

Buatlah skema pengeksekusian transaksi secara concurrent


(Urutan: T1-T2-T3)?
3. Sebutkan dan jelaskan operasi backup ditinjau dari
objeknya dan pelaksanaannya?
4. Berikan contoh dan penjelasan yang lengkap aplikasi
basis data yang anda ketahui?

258

Anda mungkin juga menyukai