You are on page 1of 262

Politeknik Telkom Database Management System

DAFTAR ISI

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


1.1 Pendahuluan ...................................................................... 2
1.2 File Sistem dan Sistem Basis Data .................................... 3
1.3 Keunggulan DBMS ............................................................ 4
1.4 Sistem Bilangan ................................................................. 4
1.5 Penyimpana Data .............................................................. 5
1.5.1 Media Penyimpanan Fisik .................................................. 5
1.5.2 Magnetic-Disk ................................................................... 8
1.6 SQL Review ...................................................................... 9
2 ARSITEKTUR BASISDATA ................................. 15
2.1 Database structure .......................................................... 16
2.1.1 Oracle Instance............................................................... 17
2.1.2 Memory Structures ........................................................ 17
2.1.3 Process Structure ........................................................... 20
2.1.4 Storage Structure ........................................................... 21
3 Database Administration ...................................... 25
3.1 Oracle Enterprise Manager ............................................. 26
3.1.1 Overview dan Konsep Oracle Enterprise Manager ....... 27
3.2 Dasar Security Database Oracle .................................... 36
3.3 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 Database Management System

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


5.1 Struktur Percabangan...................................................... 64
5.1.1 Statemen IF ..................................................................... 64
5.1.2 Statemen CASE............................................................... 70
6 Lebih Lanjut Mengenai Prosedural ...................... 81
6.1 Iterasi .............................................................................. 82
6.1.1 Simple LOOP .................................................................. 82
6.1.2 Statemen FOR ................................................................ 83
6.1.3 Statemen WHILE ............................................................ 85
6.1.4 Statemen EXIT dan EXIT WHEN .................................. 86
6.2 Cursor ............................................................................ 87
6.2.1 Cursor Eksplisit .............................................................. 87
6.2.2 Cursor Implisit ................................................................ 89
6.3 Menambahkan Exception Handling ................................ 90
6.3.1 Predefined Exception...................................................... 90
6.3.2 User Defined Exception ................................................. 93
6.3.3 Non-predefined Exception ............................................. 94
6.3.4 Prosedur RAISE_APPLICATION_ERROR .................... 95
7 Tingkat Lanjut Konsep Prosedural .................... 107
7.1 Index ............................................................................. 108
7.1.1 Membuat Index ............................................................. 108
7.1.2 Mengganti Nama Index ................................................. 110
7.1.3 Menghapus Index .......................................................... 111
7.2 Callable Procedure & Function .................................... 111
7.2.1 Prosedur ....................................................................... 111
7.2.2 Fungsi ............................................................................ 113
7.2.3 Parameter ..................................................................... 114
8 DATABASE-TRIGGER ....................................... 124
8.1 Definisi Trigger ............................................................ 125
8.2 Fungsi dan Kelebihan ................................................... 125
8.3 Aplikasi yang dapat dilakukan oleh Trigger diantaranya
adalah :.......................................................................... 125
8.4 SINTAKS ..................................................................... 126
ii
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 Database Management System

11.3 Serializability ................................................................. 188


11.4 Lock Based Protocol .................................................... 189
11.5 Multiple Granularity...................................................... 196
12 TUNING ............................................................... 203
13 BACKUP DAN RECOVERY ............................... 242

iv
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 1


Politeknik Telkom Database Management System

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

2
Politeknik Telkom Database Management System

1.2 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.

Kelemahan menggunakan file system adalah


a. 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.
b. Sulit dalam pengaksesan data: data tersebar di beberapa tempat/
divisi sehingga menyulitkan pengguna dalam pencarian data yang
berhubungan satu dengan yang lain.
c. 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.
d. Masalah Integitas dat
e. Masalah Atomicity
f. Current access anomalies
g. Masalah Keamanan

Dasar Penyimpanan Data 3


Politeknik Telkom Database Management System

1.3 Keunggulan DBMS


Keuntungan menggunakan DBMS untuk pengaturan data, yaitu:
a. Data berdiri sendiri (Data Independence): program aplikasi dan
data terpisah. Jadi jika terjadi perubahan aplikasi atau
penggunaan bahasa pemrograman yang berbeda, data tidak perlu
diubah.
b. Pengaksesan data yang efisien (Efficient data access): DBMS
menggunakan teknik penyimpanan dan pengambilan data dari
tempat penyimpanan data secara efisien. Kelebihan ini penting
karena biasanya data disimpan pada tempat penyimpanan
eksternal.
c. Integritas data dan keamanan terjamin (Data integrity and
security)
d. Administrasi data (Data administration): data dapat digunakan
oleh beberapa pengguna sekaligus, untuk itu pengaturan data
diperlukan untuk meminimalisasi redundancy data.
e. Dapat diakses bersamaan dan ada recovery saat terjadi
kegagalan (Concurrent access and crash recovery)
f. Mengurangi waktu pembangunan aplikasi (Reduced application
development time)

1.4 Sistem Bilangan


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 Perhitungan Desimal


1 20 = 1 1
10 21 + 20 = 2 + 0 2
111 22 + 21 + 20 = 4 +2 + 1 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 5


Politeknik Telkom Database Management System

1. Cache
- Memori paling cepat dan mahal
- Tidak perlu mengatur cache pada sistem basisdata
- Diatur oleh perangkat keras sistem komputer
2. Main Memory
- Penampung data yang siap diolah dan instruksi-instruksi yang
ingin dijalankan
- Daya tampung sampai dengan megabyte (MB) atau gigabyte
(GB), tapi masih terlalu mahal untuk menampung keseluruhan
basisdata
- Bersifat volatile (data hilang jika power mati)
3. Flash memory/EEPROM (electrically erasable programmable read-only
memory)
- Kecepatan membaca data menyamai main memory 100
nanoseconds (nanoseconds = 1/1000 microseconds). Namun
kecepatan penulisan data 4-10 microseconds dan tidak bisa
langsung menimpa data yang sudah ada. Untuk menimpa data
harus menghapus semua bank data.
- Bersifat non-volatile
- Pengganti magnetic disk yang dapat menyimpan data 5-10 MB,
biasanya berada dalam alat elektronik yang memiliki sistem
computer contohnya kamera digital
4. Magnetic-disk storage
- Keseluruhan data disimpan dalam magnetic-disk
- Kapasitas disk dari range satuan GB sampai ratusan GB
- Data yang siap diproses dipindahkan ke main memory, dan jika
data selesai diproses harus dipindahkan kembali ke magnetic-
disk
- Data dalam disk akan selamat jika power mati maupun jika ada
sistem crash
5. Optical storage
- Contoh compact disk (CD) kapasitas 640 MB, digital video disk
(DVD) kapasitas 4.7 – 8.5 GB.
- Proses pembacaan dan penulisan menggunakan laser
- Versi CD/DVD :
o Record-once : disk yang hanya bisa ditulis sekali tapi
bisa dibaca berkali-kali atau write-once,read-many
(WORM) disk. Contoh: CD-R, DVD-R

6
Politeknik Telkom Database Management System

o 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 7


Politeknik Telkom Database Management System

1.5.2 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 9
Politeknik Telkom Database Management System

Delete form barang where kode_barang = ‗KOMP‘;


Update barang set tipe_barang = ‗komputasi‘ where kode_barang =
‗KOMP‘;
3. View Definition
Select * from barang;

10
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
dirancang untuk membantu dalam penganturan kumpulan data yang
berjumlah besar.
3. 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
4. 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.
5. 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.
6. Track 0 pada disk terletak pada bagian paling dalam dari disk.
7. 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‘.
8. Bagian SQL terdiri dari DDL, DML dan view definition

Dasar Penyimpanan Data 11


Politeknik Telkom Database Management System

Soal

1. Jelaskan pengertian data, basis data, DBMS dan RDBMS!


2. Sebutkan contoh-contoh DBMS!
3. Jelaskan bagaimana mekanisme pengolahan data dari saat pennguna
memasukkan data kedalah computer sampai kepada data tersimpan
pada database!
4. Sebutkan dan jelaskan media penyimpanan fisik!
5. Jelaskan mekanisme penyimpanan yang terjadi di cache dan main
memory!
6. 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

Nim Kode_mk Hari jam ruang


30108123 IS007 Senin 08-00-10-00 201
Nim dank ode_mk sebagai foreign key
7. Buatlah perintah SQL untuk masukkan data sesuai dengan data di
atas!

12
Politeknik Telkom Database Management System

Latihan

1. Buatlah makalah mengenai sejarah perkembangan DBMS!


2. 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

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

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

2.1.1 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 Server background


PG PG Process PG
Process Process
A A A
1 2

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

2.1.3 Process Structure

JDBC/ODBC Server
User Process PGA
Process 1

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. Database Structure terdiri dari Memory Structure, Process


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

Soal

1. Jelaskan implementasi penggunaan instance pada Oracle!


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

22
Politeknik Telkom Database Management System

Latihan

1. Buatlah makalah tentang instance yang ada pada minimal tiga DBMS
yang anda ketahui.
2. Buatlah makalah tentang maintenance instance pada Oracle

Arsitektur BasisData 23
Politeknik Telkom Database Management System

Daftara pustaka

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

3 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. Mahasisiwa memahami konsep dan penggunaan Oracle Enterprise


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

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

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

3.1.2 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. Untuk linux/unix
Arahkan direktori ke lokasi oracle database diinstall /
ORACLE_HOME, pilih direktori bin, kemudian ketik
$ ./emctl start dbconsole.

2. 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 Database Management System

b. Host CPU
Pada Host CPU diperlihatkan status yang menunjukkan seberapa
besar CPU percentage yang dipakai oleh database tersebut
ataupun proses lain pada server.
c. Active Session
Active Session memperlihatkan berapa jumlah CPU yang dimiliki
oleh server, berapa banyak session milik user yang sedang aktif (
status sedang menggunakan User I/O, CPU atau Waiting )
d. SQL Response Time
Dalam SQL Response Time, akan ditunjukan berapa lama proses
untuk melakukan suatu sql process, tetapi terlebih dahulu kita
harus menetapkan baseline ( dasar perbandingan awal )
e. Diagnostic Summary
Diagnostic summary memperlihatkan jenis dan jumlah error
pada database atau policy database/server.
f. Space Summary
Space Summary memberikan kondisi berapa banyak database
size, apakah terdapat problem pada tablespace, dan berapa
persen disk space yang tersisa di server tersebut.
g. High Availability
High availability menunjukkan perkiraan berapa waktu yang
digunakan database untuk recovery, waktu saat backup database
terakhir dijalankan, dan apakah database menggunakan flashback
technology atau archivelog.
h. Alert
Alert menunjukkan pesan / status yang lebih detail mengenai
error/warning yang ada pada database, sehingga lebih mudah
dilihat oleh user
i. Related Alert
Related Alert memberikan pesan warning/error yang lebih detail
dari sisi server, seperti sisa disk yang dimiliki server, processor
yang digunakan, dan memory.
j. Job Activity
Job Activity menunjukkan job apa saja yang kita lakukan
terhadap database , dan kondisi job tersebut

Database Administration - Basic Administration 31


Politeknik Telkom Database Management System

2. 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 Database Management System

3. 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 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

4. 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 Database Management System

3.2 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.
c. 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 )
d. Security Policies
Policies merupakan gabungan dari aturan – aturan ( password
complexity, quota, access, dll )
e. Database Auditing
Auditing merupakan sebuah kegiatan yang melakukan penulisan
/ log terhadap aktifitas yang di lakukan pada database.

3.3 Tugas Database Administrator dalam Database


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

1. Memastikan bahwa instalasi dan konfigurasi database telah


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

4. Melakukan enkripsi terhadap data – data yang sensitif


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

3.4 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
User Account Description Installation
DBSNMP User yang digunakan untuk Open
melakukan proses monitoring
dalam Oracle Enterprise Manager

SYS User tertinggi dalam oracle Open


database, digunakan sebagai
administrator pada database, Password is
menyalakan / mematikan database. created at
installation or
database
creation time.
SYSMAN User yang gunakan pada Oracle Open
Enterprise Manager untuk
melakukan fungsi – fungsi Password is
administrasi created at
installation or
database
creation time.
SYSTEM 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

Berikut merupakan salah satu kegiatan dalam database


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

5. Dibawah ini yang merupakan bagian dari database security :


A. Installasi Database D. Auditing
B. Pembuatan Datafile E. Controlfile
C. Storage

6 User – user ini merupakan user standard dari oracle, kecuali :


A. SYS D. SYSTEM
B. SYSMAN E. SYSDBA
C. DBSNMP

42
Politeknik Telkom Database Management System

7 Salah satu kegiatan berikut yang termasuk dalam Autentification


adalah
A Network Authentification D Data Authentification
B Auditing E Monitor Authentification
C Performance Authentification

User Account memiliki beberapa atribut, berikut merupakan atribut


8 dari user account, kecuali
A Password D Quota tablespace
B Status account E Status password
C Status database

Database Administration - Basic Administration 43


Politeknik Telkom Database Management System

Latihan

1. Sebutkan 3 jenis database administration dan jelaskan perbedaanny a !


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

44
Politeknik Telkom Database Management System

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

4.1 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 Aplikasi
SQL;
END IF;

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
Aplikasi

46
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 Deskripsi


BEFORE INSERT Diaktifkan sekali sebelum statemen INSERT
AFTER INSERT Diaktifkan sekali setelah statemen INSERT
BEFORE UPDATE Diaktifkan sekali sebelum statemen UPDATE
AFTER UPDATE Diaktifkan sekali setelah statemen UPDATE
BEFORE DELETE Diaktifkan sekali sebelum statemen DELETE
AFTER DELETE Diaktifkan sekali setelah statemen 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 Convention Contoh


Variabel v_prefix v_product_name
Konstanta c_prefix c_tax
Parameter p_prefix p_cust_id
Exception e_prefix e_chk_credit_limit
Cursor cur_prefix cur_orders
Type typ_prefix typ_customer
Trigger trg_prefix trg_ins_customer

Konsep Prosedural 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 Aplikasi
SQL;
END IF;

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. bil adalah sebuah konstanta bertipe integer.

54
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. Pengeksekusian statemen SQL dalam database dapat dilakukan dengan


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

2. Berikut adalah beberapa jenis program unit, kecuali :


A. prosedur D. trigger
B. fungsi E. package
C. table

3. Blok PL/SQL yang membutuhkan event untuk mengaktivasinya


disebut :
A. prosedur D. trigger
B. fungsi E. package
C. table

4. Blok PL/SQL yang membutuhkan statement RETURN adalah :


A. prosedur D. trigger
B. fungsi E. package
C. table

5. Keuntungan dari pengaturan naming convention adalah sebagai


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

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 Output dari blok PL/SQL di atas adalah :


A. 555 D. 15
B. 125 E. Error
C. 0

7 Bila baris statemen :


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

Maka outputnya menjadi :


A 555 D. 15
B 125 E. Error
C 0

8 Pada baris statemen :


coba INTEGER;

coba merupakan sebuah :


A Variabel D Cursor
B Konstanta E Type
C Parameter

58
Politeknik Telkom Database Management System

(Untuk soal nomor 9 - 10 perhatikan trigger


berikut)

CREATE OR REPLACE TRIGGER trg_coba


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

9 Bila dilakukan eksekusi :


UPDATE barang
SET jumlah = 20;

Maka setelah eksekusi statemen di atas, field jumlah akan bernilai :


A 10 D 40
B 20 E 50
C 30

10 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 :


A 10, untuk semua jenis barang D 20, untuk jenis barang Lemari Es
B 20, untuk semua jenis barang E 30, untuk jenis barang Lemari Es
C 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 nomor 3 - 4 perhatikan prosedur


berikut)

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 nomor 5 - 6 perhatikan fungsi
berikut)

60
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 nomor 8 - 10 perhatikan trigger


berikut)

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

5 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. Mahasiswa memahami konsep percabangan.


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

Lebih Lanjut Mengenai Prosedur 63


Politeknik Telkom Database Management System

5.1 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, statemen-
statemen 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 barang telah
habis’);
END IF;

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 barang telah
habis’);
ELSE
DBMS_OUTPUT.PUT_LINE(‘Persediaan barang masih
ada’);
END IF;

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-THEN-


ELSIF)

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;

Lebih Lanjut Mengenai Prosedur 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 NUMBER(5,2);
v_gaji_col NUMBER;

BEGIN
-- Penentuan nilai gaji yang digunakan
-- untuk menentukan presentasi kenaikan gaji
SELECT gaji INTO v_gaji_col
FROM pegawai
WHERE UPPER(no_peg) = UPPER(pi_no_peg);
-- Menetapkan persentase kenaikan gaji
IF v_gaji_col >= 3000000 THEN
v_pct_fgaji := 5.00;
ELSIF v_gaji_col >= 2000000 THEN
v_pct_fgaji := 8.00;
ELSIF v_gaji_col >= 1000000 THEN
v_pct_fgaji := 10.00;
ELSE
v_pct_fgaji := 15.00;
END IF;

68
Politeknik Telkom Database Management System

-- 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  n = 0.05
2.000.000 ≤ p < 3.000.000  n = 0.08
1.000.000 ≤ p < 2.000.000  n = 0.10
p < 1.000.000  n = 0.15

- UPDATE pegawai
SET gaji = ROUND((1+v_pct_fgaji/100)*gaji, 4)
WHERE no_peg = pi_no_peg;

Berdasarkan besarnya nilai n yang diperoleh, jika gaji pegawai saat ini adalah
p dan gaji yang baru adalah q, maka besarnya update gaji yang baru adalah :
(kenaikan gaji dibulatkan ke puluhan ribu terdekat)
p ≥ 3.000.000  q = 1.05 p
2.000.000 ≤ p < 3.000.000  q = 1.08 p
1.000.000 ≤ p < 2.000.000  q = 1.10 p
p < 1.000.000  q = 1.15 p

Lebih Lanjut Mengenai Prosedur 69


Politeknik Telkom Database Management System

5.1.2 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 VARCHAR2;

BEGIN
-- Penentuan nama hari berdasar nomor urut hari
v_namaHari :=
CASE pi_noHari
WHEN 1 THEN ‘Senin’
WHEN 2 THEN ‘Selasa’
WHEN 3 THEN ‘Rabu’
WHEN 4 THEN ‘Kamis’
WHEN 5 THEN ‘Jumat’
WHEN 6 THEN ‘Sabtu’

70
Politeknik Telkom Database Management System

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 ‘Senin’
WHEN 2 THEN ‘Selasa’
WHEN 3 THEN ‘Rabu’
WHEN 4 THEN ‘Kamis’
WHEN 5 THEN ‘Jumat’
WHEN 6 THEN ‘Sabtu’
WHEN 7 THEN ‘Minggu’
ELSE ‘Tidak terdefinisi’
END CASE;

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  namaHari = Tidak
terdefinisi

Lebih Lanjut Mengenai Prosedur 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 NUMBER(5,2);
v_gaji_col NUMBER;

BEGIN
-- Penentuan nilai gaji yang digunakan
-- untuk menentukan presentasi kenaikan gaji
SELECT gaji INTO v_gaji_col
FROM pegawai
WHERE UPPER(no_peg) = UPPER(pi_no_peg);

-- Menetapkan persentase kenaikan gaji


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  n = 0.05
2.000.000 ≤ p < 3.000.000  n = 0.08
1.000.000 ≤ p < 2.000.000  n = 0.10
p < 1.000.000  n = 0.15

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;

o 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;

74
Politeknik Telkom Database Management System

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

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

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 emp_name emp_salary
EM-10001 MG-10006 SAL Sarah 400
EM-10002 MG-10006 SAL John 400
EM-10003 MG-10007 HR Michael 400
EM-10004 MG-10007 HR George 400
EM-10005 MG-10006 SAL Henk 400
MG-10006 NULL SAL Natalie 800
MG-10007 NULL HR Matt 800
... ... ... ... ...

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


emp_name : employee‘s name, emp_salary : employee‘s salary.
o 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

6 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. Mahasiswa memahami konsep dan penggunaan perulangan (iterasi).


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

Lebih Lanjut Mengenai Prosedur 81


Politeknik Telkom Database Management System

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

TRUE FALSE

6.1.1 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 Variabel iterasi (var) tidak perlu dideklarasi karena PL/SQL melakukan


deklarasi secara implisit dan variabel ini berlaku dalam LOOP itu saja.
o Kata REVERSE akan membuat iterasi dimulai dari indeks_max dan
berkurang satu untuk proses iterasi. Demikian seterusnya hingga var =
indeks_min.
o 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 Database Management System

6.2 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 Deskripsi
%FOUND Baris ditemukan
%NOTFOUND Baris tidak ditemukan
Jumlah baris yang telah
%ROWCOUNT
ditangkap melalui FETCH
Bernilai TRUE bila cursor
%ISOPEN
masih dalam keadaan terbuka

Contoh, bila ingin mengecek cursor dalam keadaan terbuka atau tidak :

IF nama_cursor%ISOPEN THEN
statemen-statemen;
END IF;

88
Politeknik Telkom Database Management System

6.2.2 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
ORA-00001 DUP_VAL_ON_INDEX
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

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 VARCHAR2(40);
no_peg_col pegawai.no_peg%TYPE;
gaji_col pegawai.gaji%TYPE;

BEGIN
-- Pengambilan data berdasar nama depan
SELECT SUBSTR(nama_dpn||’ ‘||nama_blkng,1,40),
no_peg, gaji
INTO vc_nama, no_peg_col, gaji_col
FROM pegawai
WHERE UPPER(nama_dpn) LIKE
‘%’||UPPER(pi_nama)||’%’;

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

6.3.2 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 gaji karyawan*/


CREATE OR REPLACE PROCEDURE prc_upd_gaji
(pi_nopeg VARCHAR2,
pi_gaji INTEGER) IS

e_nopeg 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 Nomor error adalah bilangan integer negatif.


o Kode errornya dalam format ―ORA-nnnnn‖ dengan ―nnnnn‖ adalah lima
angka absolut dari nomor error.
o 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 Database Management System

o nomor_error harus berada dalam rentang -20999 dan -20000. Rentang ini
sengaja disediakan untuk digunakan user.
o pesan_error adalah pesan kesalahan yang ingin dimunculkan.
o TRUE|FALSE adalah parameter optional, dengan nilai default FALSE.
TRUE bertujuan untuk menangkap exception-exception sebelumnya
bersama exception ini. FALSE bertujuan menggantikan exception
terdahulu dengan exception ini.

Contoh - 1

/*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;
o 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;
o 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 Database Management System

9. EXIT dan EXIT WHEN : digunakan untuk keluar dari blok iterasi tanpa
melanjutkan proses yang sedang dilakukan.
EXIT WHEN kondisi;

IF kondisi THEN
EXIT;
END IF;
10. Cursor adalah pointer yang menunjuk ke suatu bagian memori untuk
menyimpan hasil instruksi SQL (biasanya merupakan multiple row) dan
cursor digunakan untuk menunjuk (pointer) ke salah satu baris data.
11. Empat tahap dalam menggunakan cursor :
o deklarasi cursor (DECLARE)
o membuka cursor (OPEN)
o pengambilan data ke dalam cursor (FETCH)
o menutup cursor (CLOSE)
12. Jenis-jenis cursor :
o Eksplisit cursor : harus dibuka dan ditutup secara manual.
-- Deklarasi cursor
DECLARE
CURSOR nama_cursor IS
statemen SELECT;
-- Membuka cursor
OPEN nama_cursor;
-- Menangkap isi cursor
FETCH nama_cursor INTO nama_variabel;
-- Menutup cursor
CLOSE nama_cursor;

o 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.
o User defined exception : harus dideklarasikan manual oleh user
layaknya variabel.
nama_exception EXCEPTION;
Untuk membangkitkan exception ini :
RAISE nama_exception;
o Non-predefined exception : setelah dideklarasi, exception ini
diasosiasikan ke sebuah error internal sehingga exception ini
dibangkitkan secara otomatis.
nama_exception EXCEPTION;
PRAGMA EXCEPTION_INIT (nama_exception,
nomor_error);
15. RAISE_APPLICATION_ERROR adalah prosedur yang disediakan untuk
membuat dan membangkitkan exception. Dapat digunakan pada bagian
executable statemen mapun exception handler.
RAISE_APPLICATION_ERROR(nomor_error, pesan_error
[,TRUE|FALSE]);

100
Politeknik Telkom Database Management System

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

9. 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 emp_name emp_salary
EM-10001 MG-10006 SAL Sarah 410
EM-10002 MG-10006 SAL John 360
EM-10003 MG-10007 HR Michael 430
EM-10004 MG-10007 HR George 320
EM-10005 MG-10006 SAL Henk 400
MG-10006 NULL SAL Natalie 810
MG-10007 NULL HR Matt 870
... ... ... ... ...

Lebih Lanjut Mengenai Prosedur 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

7 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 di-
maintain, maka dapat digunakan prosedur dan fungsi yang melakukan tujuan
spesifik.

Tujuan

1. Mahasiswa memahami konsep dan penggunaan index.


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

Tingkat Lanjut Konsep Prosedural 107


Politeknik Telkom Database Management System

7.1 Index
Index adalah objek database yang dapat dibuat untuk meningkatkan
performansi dari query. Index juga dapat dibuat secara otomatis oleh server
saat dibuat primary key atau unique constraint.

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> SELECT table_name, index_name, uniqueness,


2 status
3 FROM USER_INDEXES;
108
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 Index dapat dibuat oleh user pemilik schema atau user lain yang memiliki
system priviledge CREATE ANY INDEX atau yang mempunyai object
priviledge INDEX atas tabel tersebut.
o Apabila sebuah kolom atau kombinasi kolom sudah di-index, akan
muncul pesan kesalahan saat dibuat index lain terhadap kolom tersebut.

Contoh

/*Membuat index terhadap tabel*/


CREATE INDEX idx_pos_gaji ON pegawai(pos_id, gaji);

SQL> SELECT table_name, index_name, uniqueness,


2 status
3 FROM USER_INDEXES;

Output :

TABLE_NAME INDEX_NAME UNIQUENESS STATUS


-------------- -------------- -------------- ------
PEGAWAI PK_PEGAWAI UNIQUE VALID
PEGAWAI IDX_POS_GAJI NONUNIQUE VALID

Tingkat Lanjut Konsep Prosedural 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 di-
commit. 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 Database Management System

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

7.2.2 Fungsi

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

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 input-
output.
 Parameter input : menyimpan nilai yang akan digunakan sebagai input
pada badan prosedur maupun fungsi. Ditandai dengan mode IN.
 Parameter output : menampung nilai hasil dari suatu proses yang
dilakukan di dalam prosedur atau fungsi. Ditandai dengan mode
OUT.
 Parameter input-output : berfungsi sebagai parameter input maupun
output. Ditandai dengan mode IN OUT.

120
Politeknik Telkom Database Management System

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

o barang
CREATE TABLE BARANG
(
BRG_ID VARCHAR2(8) NOT NULL,
BRG_NAME VARCHAR2(50) NOT NULL,
BRG_STOK INTEGER DEFAULT 0,
CONSTRAINT PK_BARANG PRIMARY KEY(BRG_ID)
);

o pasok
CREATE TABLE PASOK
(
PAS_ID VARCHAR2(8) NOT NULL,
PAS_DATE DATE DEFAULT SYSDATE,
PAS_SUPP VARCHAR2(8),
PAS_BRG VARCHAR2(8),
PAS_AMT INTEGER DEFAULT 0,
CONSTRAINT PK_PASOK PRIMARY KEY(PAS_ID),
CONSTRAINT FK_PASOK_SUPPLIER FOREIGN
KEY(PAS_SUPP) REFERENCES SUPPLIER(SUPP_ID),
Tingkat Lanjut Konsep Prosedural 121
Politeknik Telkom Database Management System

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 CV. KARYA Jl. Pembangunan, Jakarta
SP-10002 PT. MAJU Jl. Diponegoro, Yogyakarta
SP-10003 CV. MURAH Jl. Harapan, Bandung
... ... ...

(Bila perlu, tambahkan data lainnya).


o barang
BRG_ID BRG_NAME BRG_STOK
BR-10001 Lemari pakaian 15
BR-10002 Meja belajar 17
BR-10003 Kasur 23
... ... ...

(Bila perlu, tambahkan data lainnya).


o pasok
PAS_ID PAS_DATE PAS_SUPP PAS_BRG PAS_AMT
PS-10001 08/07/2008 SP-10001 BR-10001 5
PS-10002 08/07/2008 SP-10001 BR-10002 7
PS-10003 08/11/2008 SP-10002 BR-10003 12
PS-10004 08/12/2008 SP-10003 BR-10002 3
PS-10005 08/12/2008 SP-10003 BR-10003 10
... ... ... ... ...

(Bila perlu, tambahkan data lainnya).

122
Politeknik Telkom Database Management System

4. Buatlah sebuah fungsi untuk mengecek stok suatu jenis barang :


o Parameter input adalah id barang.
o Akan mengembalikan TRUE bila stok barang tidak nol, dan FALSE
bila stok sama dengan nol.
5. Buatlah sebuah prosedur yang akan mencetak laporan pasok berdasar
supplier tertentu :
o Parameter input adalah id supplier.
o Bentuk laporan :

Nama Supplier : _______________


Alamat : ____________________
____________________

Tgl Pasok Nama Barang Jumlah Pasok

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

6. Buatlah sebuah prosedur yang akan mencetak laporan pasok berdasar


bulan dan tahun tertentu :
o Parameter input adalah bulan dan tahun pasok.
o Bentuk laporan :

Bulan : __________*
Tahun : __________

Nama Supplier Nama Barang Jumlah Pasok

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

8.1 Definisi Trigger


Trigger adalah blok PL/SQL yang disimpan dalam database dan dijalankan
secara implisit sebagai respon terhadap perubahan yang telah ditentukan
dalam database.
Perintah DML seperti INSERT, UPDATE, dan DELETE adalah pemicu umum
terjadinya trigger. Operasi DDL seperti ALTER dan DROP juga dapat
memicu dijalankannya trigger.

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

8.4 SINTAKS
CREATE [OR REPLACE] TRIGGER [user.]nama_trigger
{BEFORE | AFTER | INSTEAD OF}
{DELETE | INSERT | UPDATE [OF nama_kolom [,
nama_kolom] ...]}
[OR {DELETE | INSERT | UPDATE [OF column [,
column] ...]}]...
ON [user.]{nama_tabel | nama_view}
[{REFERENCING {OLD [AS] old_value | NEW [AS]
new_value} ...]
FOR EACH {ROW | STATEMENT} [WHEN (condition)]
PL/SQL_BLOCK
 Nama trigger sebaiknya dengan jelas mencerminkan tabel yang
diaplikasikan. Perintah DML trigger, status before/after, dan apakah row
level atau statement level.
Bagian Keterangan Nilai yang mungkin
BEFORE
ketika trigger berelasi
trigger timing AFTER
ke event
INSTEAD OF
manipulasi data pada
INSERT
tebel/ view yang
trigger event UPDATE
menyebabkan trigger
DELETE
terpacu
berapa kali body ROW
trigger type
trigger dieksekusi STATEMENT
trigger body apa action dari trigger Block PL/SQL lengkap

126
Politeknik Telkom Database Management System

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

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

8 END IF;
9 END;
10 /

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 SET id_obat='DT02' WHERE


id_obat='DT01';

1 row updated.

134
Politeknik Telkom Database Management System

8.8 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
meeting_room
PK id_pembayaran memiliki style
PK id_mr
pembayaran_kartu PK id_punya_style PK id_style
pembayaran_tunai nama_mr
tgl_pembayaran kapasitas nama_style
tarif_mr
id_reservasi id_mr
ukuran
id_style

pesan_fasilitas fasilitas
reservasi PK id_pesan_fasilitas PK id_fasilitas
PK id_reservasi
jum_pesan_fasilitas nama_fasilitas
pemesan tgl_reservasi biaya_total_fasilitas harga_fasilitas
kegunaan id_reservasi jum_min_fasilitas
PK id_pemesan id_fasilitas jum_max_fasilitas
jum_org
nama_pemesan tgl_awal
alamat_pemesan tgl_akhir
no_telp jam_awal
jam_akhir
id_pemesan
id_punya_style
id_petugas
banquet
pesan_banquet
PK id_banquet
PK id_pesan_banquet
petugas nama_banquet
jum_pesan_banquet jenis_banquet
PK id_petugas biaya_total_banquet harga_banquet
id_reservasi jum_min_banquet
nama_petugas id_banquet jum_max_banquet
jabatan

1. 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 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?

138
Politeknik Telkom Database Management System

9 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. Mahasiswa memahami konsep optimasi query.


2. Mahasiswa memahami konsep dan algoritma sorting
3. Mahasiswa dapat memahami dan menggunakan operator relational
4. Mahasiswa dapat memahami algoritma join

Query Optimization 139


Politeknik Telkom Database Management System

9.1 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 operasi-
operasi 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 Database Management System

2. Peringkat access path tersebut


 optimizer memilih akses path dengan peringkat terbanyak dan
tertinggi

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 index-
index 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 operasi-
operasi ini:
a. Materialization
Evaluasi Materialization: evaluasi satu operasi pada satu waktu, dimulai
dari yang paling dalam. Gunakan hasil antara (intermediate result) untuk
materialisasi (membuat relasi temporer) untuk mengevaluasi operasi level
berikutnya.
Contoh: pada gambar di bawah, hitung dan simpan
 balance 2500 (account)

142
Politeknik Telkom Database Management System

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

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
1 2 1 2

  (  ( E ))    (  ( E ))
1 2 2 1

3. Projection operation
 t1 ( t 2 ( ( tn ( E )) ))   t1 ( E )
4. Combine selection with cartesian product and theta join
a. (E1 X E2) = E1  E2
b. 1(E1 2 E2) = E1 1 2 E2
5. Theta join operation (and natural joins) are commutative.
E1  E2 = E2  E1
6. (a.) Natural join are associative:
(E1 E2) E3 = E1 (E2 E3)

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


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

7. The selection operation distributes over the theta join operation under
the following two conditions:
(a) When all the attributes in 0 involve only the attributes of one
of the expressions (E1) being joined.
0E1  E2) = (0(E1))  E2
(b) When  1 involves only the attributes of E1 and 2 involves
only the attributes of E2.
1 E1  E2) = (1(E1))  ( (E2))

144
Politeknik Telkom Database Management System

8. 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
E1E2=E2E1
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 Rating Age
 rating > 8(S2)
28 Yuppy 9 35.0
31 Lubber 8 55.5
44 Guppy 5 35.0
58 Rusty 10 35.0
Tabel S2

148
Politeknik Telkom Database Management System

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 Sname Rating Age


22 Dustin 7 45.0
31 Lubber 8 55.5
58 Rusty 10 35.0

}
Tabel S1

Sid Sname Rating Age


28 Yuppy 9 35.0
31 Lubber 8 55.5
44 Guppy 5 35.0
S1  S2
58 Rusty 10 35.0
Tabel S2
150
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 Sname Rating Age


22 Dustin 7 45.0
31 Lubber 8 55.5
58 Rusty 10 35.0

}
Tabel S1

S1- S2
Sid Sname Rating Age
28 Yuppy 9 35.0
31 Lubber 8 55.5
44 Guppy 5 35.0
58 Rusty 10 35.0

Tabel S2
9.3.5 Algoritma Join
Ada beberapa algoritma berbeda untuk implementasi join, yaitu :
a. Nested-loop join
Algoritma untuk menghitung theta join r  s
for each tuple tr in r do begin
for each tuple ts in s do begin
test pair (tr,ts) to see if they satisfy
the join condition 
if they do, add tr • ts to the result.
end
end

Dimana r disebut sebagai relasi luar (outer relation) dan s sebagai relasi
dalam (inner relation) dari join. Algoritma join ini tidak membutuhkan
indeks sehingga dapat digunakan dalam kondisi join apapun.
Query Optimization 151
Politeknik Telkom Database Management System

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

b. Block nested-loop join


Algoritma ini merupakan jenis lain nested-loop join di mana masing-
masing 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 relation‘s
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 alamat-
alamat fisik penyimpanan tuple relasi yang belum terurut
- Pelaksanaan operasi join dilakukan berdasarkan urutan alamat fisik
relasi yang belum terurut tersebut
 penelusuran secara sequensial lebih efisien dar penelusuran
secara acak

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

5. 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 logM–1(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 logM–1(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. Adalah proses dimana DBMS (Optimizer) menunjukkan strategi


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

Query Optimization 157


Politeknik Telkom Database Management System

Latihan

1. Mengapa optimalisasi perlu dilakukan?


2. 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. Mahasiswa memahami konsep security pada database


2. Mahasiswa dapat membuat user dan roles pada database
3. Mahasiswa dapat memaintain security database

Query Optimization 159


Politeknik Telkom Database Management System

10.1 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, DBMS dan Program
radiasi Database Aplikasi
Aturan / Kesalahan mekanisme
amandemen yang keamanan
tidak diotorisasi, Akses yang terlalu luas
penduplikatan data, Pencurian program
pencurian data, Kesalahan program
kehilangan data
akibat gangguan
listrik

Pengguna Akhir Programmer / Database


 Menggunakan hak Operator Administrator
akses oran lain.
 Melihat &  Membuat  Kebijakan
menutup data Password. keamanan &
yang tidak  Membuat prosedur
diotorisasi program yang
 Staf tidak di- tidak aman
training  Staf yang tidak di-
 Pemasukan data training.
yang dilakukan  Kebijakan
oleh yang tidak keamanan &
berhak. prosedur
Security
 Virus dari suatu database harus bisa memproteksi
 Pemogokan staf terhadap pengrusakan
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 :

 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.

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

c. 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 Database Management System

f. Backup
Untuk menjaga keberadaan system dan menjaganya dari kerusakan maka
dilakukan backup. Backup yang dilakukan tidak hanya backup data tetapi
juga backup aplikasi dan system operasi. Dalam melakukan backup
semua detail harus dispesifikasikan dengan jelas dalam prosedur.
Penyimpanan backup dilakukan pada lokasi yang aman (dari segi
kemanan fisik seperti tahan api, tahan banjir dan dari pencurian) dan
pada lokasi yang berbeda. Waktu backup bisa dilakukan sekaligus pada
selang waktu tertentu seperti setiap bulan, setiap minggu atau setiap
hari. Tetapi backup lebih sering dilakukan secara berkala / incremental.

g. Recovery
Salah satu cara untuk menjaga keamanan datanbase adalah dengan
melakukan recovery. Recovery dilakukan berdasarkan tipe crash yang
terjadi pada database, seperti kegagalan media, software dan hardware
juga bergantung pada metode recovery yang digunakan oleh DBMS.
Prosedur recovery hendaknya selalu diuji untuk menjamin
keberhasilanya, idealnya diuji secara regular dalam interval waktu
tertentu.

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

10.4 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 pre-
defined 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 Database Management System

SQL> create user BUDI


2 identified by BUDIPASS
3 default tablespace USERS
4 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 Database Management System

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

10.6.1 Sintaks
CREATE PROFILE profile LIMIT
[FAILED_LOGIN_ATTEMPTS max_value]
[PASSWORD_LIFE_TIME max_value]
[ {PASSWORD_REUSE_TIME|PASSWORD_REUSE_MAX}
max_value]
[PASSWORD_LOCK_TIME max_value]
[PASSWORD_GRACE_TIME max_value]
[PASSWORD_VERIFY_FUNCTION
{function|NULL|DEFAULT} ]
Parameter Keterangan
PROFILE Member nama profile yang akan
dibuat
FAILED_LOGIN_ATTEMPTS Menentukan jumlah maks yang
diperbolehkan user untuk gagal
login sebelum account di lock.
PASSWORD_LIFE_TIME Menentukan lama hari
penggunaan pwd yang dipakai. Jika
PASSWORD_GRACE_TIME
ditentukan, maka pwd akan
expire setelah masa grace.

Query Optimization 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
informasi users yang dimiliki DBA

SELECT * FROM DBA_TS_Quotas;


Perintah selection diatas akan menampilkan semua
informasi 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 produk-
produk 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 Database Management System

10.10.1 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 di-
query.

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

Security
USER Langkah 1 Langkah 2
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 Database Management System

10.10.2 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. Mahasiswa memahami konsep transaksi dan properti transaksi yang harus


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

186
Politeknik Telkom Database Management System

11.1 Transaksi

Transaksi adalah satu unit pekerjaan lojik yang terdiri dari serangkaian
aksi atau operasi, dengan keseluruhan aksi atau operasi tersebut harus sukses
dijalankan atau gagal seluruhnya.

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.

Sebuah transaksi basisdata terdiri dari:


1. Pernyataan-pernyataan DML yang menyebabkab satu perubahan
konsisten pada data (Data Manipulation Language)
2. Satu pernyataan DDL (Data Definition Language)
3. Satu pernyataan DCL (Data Control Language)

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

11.2 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:


1. 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.

S X
S Compatible Incompatible
X 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 mode-
lock, 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 .

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.

190
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

Conncurency
T1 T2
control-manager
Lock-X(B)
Grant X(B,T1)
Read (B)
B:=B-50
Write (B)
Unlock (B)
Lock-S(A)
Grant S(A,T2)
Read (A)
Unlock (A)
Lock –S(B)
Grant S(B,T2)
Read (B )
Unlock (B)
Display (A+B)
Lock –X(A)
Grant X(A,T1)
Read (A)
A:=A+50
Write (A)
Unlock (A)

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

T5 T6
Lock –X(C)
Read (C)
C:=C*1.1
Write (C)
Lock –X(D)
Read (D)
D:=D*1.2
Write (D)
Lock –S(C)
Lock –S(D)

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 mode-
lock 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 masing-


masing 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
beberapa transaksi, metode locking dapat digunakan. Namun metode
locking dapat memungkinkan pada suatu keadaan yang tidak diinginkan.
6. Keadaan tersebut adalah deadlock, yaitu keadaan pada saat beberapa
transaksi saling menunggu untuk mengakses data yang sedang di lock oleh
transaksi lain.
7. Keadaan deadlock dapat dihindari. Yang diperlukan adalah bahwa setiap
transaksi harus mengikuti serangkaian aturan yang disebut dengan locking
protocol. Salah satu locking protocol adalah two-phase protocol.
8. Aturan dari two – phase protocol adalah bahwa setiap transaksi yang
meminta untuk dapat melakukan lock atau unlock data terdiri dari dua
fase:
- Growing Phase, yaitu transaksi boleh melakukan lock terhadap
data.
- Shrinking Phase, yaitu transaksi boleh melakukan unlock terhadap
data, tetapi tidak boleh meminta untuk melakukan lock baru
terhadap data.
9. Namun dengan two – phase protocol akan menghadapkan pada suatu
kondisi yang disebut dengan Cascading rollback.
10. Cascading rollback adalah keadaan pada saat terjadi kegagalan pada salah
satu transaksi dan menyebabkan beberapa transaksi yang terkait harus
melakukan rollback.
11. Untuk mencegahnya maka two phase locking protocol dikembangkan
menjadi strict two phase locking protocol. Aturannya adalah:
- sama dengan aturan dari two phase locking protocol
- Untuk setiap exclusive mode-lock dipaksa harus dipegang oleh
transaksi sebelum terjadinya COMMIT.
12. Granularitas item data adalah ukuran dari satu unit data yang terdiri dari
kumpulan item data yang akan disinkronisasi pada skema concurrency
control
13. Granularitas item data terdiri dari :
- Seluruh basis data
- Page
- Record
- Field

Konkurensi Basis Data 199


Politeknik Telkom Database Management System

Soal

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!

200
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. Mengenal Tuning pada Oracle 10g


2. Memahami Instance Tuning
3. Memahami SQL Tuning

Tuning 203
Politeknik Telkom Database Management System

12.1 PENDAHULUAN
Oracle 10g adalah salah satu produk software yang mampu dioptimisasikan
dengan baik. Penggunaan tuning secara teratur mampu mengoptimisasikan
performansi system dan mencegah bottlenecks. Dalam hal ini, pengertian
tuning adalah suatu cara untuk meningkatkan performansi (DBMS ORACLE)
dengan mengacu pada segala aspek yang ada dalam basis data. Sedangkan,
Beberapa hal yang menyebabkan bottlenecks antara lain :
 Memory Contention (Perebutan Memory)
- Perebutan memory terjadi ketika proses-proses
membutuhkan memory lebih dari apa yang sudah tersedia.
Jika hal ini terjadi, system akan mempertukarkan data antara
memory dan disk.
- Dengan pengalokasian memory yang tepat pada stuktur
database, mampu mengurangi resiko terjadinya Memory
Contention
 Disk I/O Contention (Perebutan disk I/O)
- Perebutan source Disk I/O disebabkan oleh manejemen
memory yang buruk, distribusi teblespace dan file antar disk
yang buruk, ataupun kombinasi dari kedua factor tersebut.
- Perebutan ini dapat dicegah dengan menentukan kebutuhan
I/O untuk masing-masing bagian database yang berbeda-
beda
 CPU Contention (Perebutan CPU)
- Walaupun kernel OpenVMS biasanya mengalokasikan
resource CPU secara efektif, masih saja banyak proses yang
bersaing untuk mendapatkan CPU cycles, dan hal ini dapat
menyebabkan perebutan resource CPU. Jika anda
menginstal Oracle Database 10g pada lingkungan
multiprocessor, maka kemungkinan akan terjadi perbedaan
level perebutan pada masing-masing CPU.
- Untuk performansi database yang optimal, juga lakukan
tuning pada operating system.
 Oracle Resource Contention (Perebutan resource Oracle)
Biasa terjadi pada Oracle seperti pada Locks dan Latches.

Secara umum, tuning dijalankan dengan mengidentifikasi bottleneck yang


paling signifikan dan melakukan perubahan yang tepat untuk mengurangi efek
dari bottleneck tersebut.

204
Politeknik Telkom Database Management System Practice

12.2 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 meng-
konfigurasi 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 di-
load 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 CPU-
intensive 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

 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 *

Tuning 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 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.

212
Politeknik Telkom Database Management System Practice

Memeriksa waktu tunggu dan timing data yang berelasi ketika menampilkan
performansi reaktif tuning. Event dengan waktu terdaftar diantara mereka ada
indikasi yang kuat dari performansi bottleneck. Contohnya, lihat
V$SYSTEM_EVENT, kita dapat melihat banyak buffer busy waits. Ini bisa jadi
banyak proses masuk ke block yang sama dan harus menunggu yang lain
sebelum mereka bisa masuk. Solusinya bisa jadi menggunakan automatic
segment space management atau membagi untuk object di pertanyaan.

d. Statistic System
Statistic system dikombinasikan dengan event tunggu data untuk menemukan
bukti selanjutnya dari penyebab suatu permasalahan performansi.
Contohnya, jika V$SYSTEM_EVENT mengindikasikan event tunggu terbesar
(dalah hal ini waktu tunggu) maka event itu merupakan event buffer busy
waits, lalu lihat statistik buffer tunggu spesifik tersedia pada view
V$WAITSTAT untuk melihat tipe block mana yang mempunyai jumlah tunggu
tertinggi dan waktu tunggu tertinggi.
Statistik tersedia untuk banyak V$ views. Beberapa view umum terdiri dari
berikut ini:

V$ACTIVE_SESSION_HISTORY
View ini menunjukkan aktifitas session database aktif, tersampel setiap detik.

V$SYSSTAT
Hal ini terdiri statistic keseluruhan untuk banyak bagian yang berbeda dari
Oracle, termasuk rollback, logical dan physical I/O, dan parse data. Data dari
V$SYSSTAT digunakan untuk menghitung rasio, seperti buffer cache hit ratio.

V$FILESTAT
Hal ini terdiri file detail I/O statistik untuk tiap file, termasuk jumlah dari I/O
untuk tiap file dan rataan waktu baca.

V$ROLLSTAT
Hal ini terdiri rollback detail dan undo segment statistic untuk tiap segment.

V$ENQUEUE_STAT
Hal ini terdiri enqueue statistics detail untuk tiap enqueue, termasuk jumlah
waktu suatu enqueue diminta dan jumla waktu suatu enqueue ditunggu, dan
waktu tunggu.

Tuning 213
Politeknik Telkom Database Management System

V$LATCH
Hal ini terdiri pemakaian latch statistic detail untuk tiap latch, termasuk
jumlah waktu tiap latch diminta dan jumlah waktu latch ditunggu

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

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

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).
2. 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:

Tuning 217
Politeknik Telkom Database Management System

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

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 me-
review yang selanjutnya
Table 10-1 Penyebab Wait Events and Potential
Wait General Possible
Event Area Causes Look for / Examine
buffer busy Buffer Depends on Examine V$SESSION while the
waits cache, buffer type. For problem is occurring to
DBWR example, waits determine the type of block in
for an index contention.
block may be

218
Politeknik Telkom Database Management System Practice

Wait General Possible


Event Area Causes Look for / Examine
caused by a
primary key
that is based
on an
ascending
sequence.
free buffer Buffer Slow DBWR Examine write time using
waits cache, (possibly due operating system statistics.
DBWR, I/O to I/O?) Check buffer cache statistics for
Cache too evidence of too small cache.
small
db file I/O, SQL Poorly tuned Investigate V$SQLAREA to see
scattered statement SQL whether there are SQL
read tuning Slow I/O statements performing many
system disk reads. Cross-check I/O
system and V$FILESTAT for
poor read time.
db file I/O, SQL Poorly tuned Investigate V$SQLAREA to see
sequential statement SQL whether there are SQL
read tuning Slow I/O statements performing many
system disk reads. Cross-check I/O
system and V$FILESTAT for
poor read time.
enqueue Locks Depends on Look at V$ENQUEUE_STAT.
waits (waits type of
starting with enqueue
enq:)
library cache Latch SQL parsing or Check V$SQLAREA to see
latch waits: contention sharing whether there are SQL
library statements with a relatively high
cache, number of parse calls or a high
library cache number of child cursors
pin, and (column VERSION_COUNT).
library cache Check parse statistics in
Tuning 219
Politeknik Telkom Database Management System

Wait General Possible


Event Area Causes Look for / Examine
lock V$SYSSTAT and their
corresponding rate for each
second.
log buffer Log buffer, Log buffer Check the statistic redo buffer
space I/O small allocation retries in
Slow I/O V$SYSSTAT. Check configuring
system log buffer section in configuring
memory chapter. Check the
disks that house the online redo
logs for resource contention.
log file sync I/O, over- Slow disks that Check the disks that house the
committing store the online redo logs for resource
online logs contention. Check the number
Un-batched of transactions (commits +
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 Database Management System Practice

 Jika ada banyak transaksi yang kecil dan sebuah query aktif long-
running sedang berjalan pada sebuah table yang sama dimana
perubahan terjadi, maka query mungkin perlu untuk me-roll back
perubahan itu, supaya tercipta read-consistency terhadap suatu
tabel. Bandingkan V$SYSSTAT statistics berikut untuk memeriksa
apakah hal berikut terjadi :
 Ke konsistenan perubahan statistik mengindikasikan waktu
dari sebuah blok database memiliki rollback entries yang
menunjukkan sebuah pembacaan suatu blok data yang
konsisten. Proses yang menghasilkan perubahan
kekonsistenan yang besar dapat membutuhkan resources
yang besar juga.
 Kekonsistenan yang memiliki statistic menghitung
banyaknya proses baca secara logis dalam consistent mode.
 Jika ada segment roll-back yang besar, maka system membutuhkan
waktu roll-back sebuah tabel transaksi yang banyak, selama delay
block cleanout untuk mendapatkan blok yang memiliki SCN dari suatu
transaksi yang sudah commit. Ketika Oracle meng-commit sebuah
transaksi, semua blok yang sudah berubah tidak perlu diupdate lagi
dengan commit SCN. Dalam kasus ini, hal tersebut dilakukan pada
saat yang diinginkan ketika blok data dibaca atau diupdate. Hal inilah
yang disebut delayed block cleanout.
Angka rasio dari V$SYSSTAT statistics seharusnya mendekati angka
1 : ratio
= transaction tables consistent reads - undo records applied /
transaction tables consistent read rollbacks

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.
Tuning 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 di-
insertkan.

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. Jika suatu query yang biasa dieksekusi perlu untuk mengakses suatu
persentase kecil dari data dalam tabel, maka query tersebut dapat
dieksekusi dengan lebih efisien dengan menggunakan indeks. Dengan
membuat indeks, kita dapat mengurangi jumlah pemakaian resource.

224
Politeknik Telkom Database Management System Practice

2. Jika seorang user mencari dua puluh baris pertama dari 10000 baris
yang diberikan oleh perintah pengurutan yang spesifik, dan jika query
(dan perintah pengurutan) dapat dipenuhi oleh indeks, maka user
tidak perlu untuk mengakses dan mengurutkan 10000 baris untuk
melihat dua puluh baris.

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 program-
program 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. High-
Load 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 meng-
generate 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 saat-
saat dimana aplikasi berada pada proses puncak.

2. Mendapatkan statistika system operasi dan Oracle pada awal dan akhir
periode. Minimum statistika Oracle yang didapatkan sebaiknya file I/O
(V$FILESTAT), statistika system (V$SYSTAT), dan statistika SQL

226
Politeknik Telkom Database Management System Practice

(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 di-
atas.

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 statement-
statement 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. SQL text lengkap dari V$SQLTEXT


2. Struktur table berasal dari SQL statement, biasanya dengan
menggambarkan table pada SQL*Plus
3. Penjelasan tiap index (kolom, kolom terurut), dan apakah index-
index tersebut unique atau non-unique
4. Optimizer statistics untuk segment (termasuk jumlah naris tiap table,
kepandaian memilih dari kolom index), termasuk tanggal kapan
sgment dianalisa.
5. Definisi tiap view berdasarkan SQL statements
6. Ulangi langkah ke 2, 3 dan 4 untuk setiap table berdasarkan
penjelasan view yang didapatkan di langkah ke 5
7. Perencanaan optimisasi untuk SQL statements (baik dari EXPLAIN
PLAN, V$SQL_PLAN, atau keluaran TKPROF )
8. 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 aplikasi-
aplikasi 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)) AND
(organization_id=:1)
ORDER BY employee_num;

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. Mahasiswa memahami konsep dan terminologi Backup / Recovery.


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

242
Politeknik Telkom Database Management System Practice

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

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

2. 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, record-
record 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 backup-
nya.

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) T 2: read(B) T3: read(A)
A  A - 100000 read(A) temp  0.25 *A
read(B) temp  0.1 * A A  A - temp
B  B + 100000 A  A - temp read(B)
write(A) read(C) B  B + temp
read(C) B  B + temp write(B)
c  C + 1 C  C + 1 read(C)
write(B) write(C) write(A)
write(C) write(A) C  C + 1
write(B) 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

You might also like