Upload
bob-axhan
View
882
Download
12
Embed Size (px)
Citation preview
Politeknik Telkom Database Management System
i
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
Politeknik Telkom Database Management System
ii
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
Politeknik Telkom Database Management System
iii
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
Politeknik Telkom Database Management System
iv
11.3 Serializability ................................................................. 188
11.4 Lock Based Protocol .................................................... 189
11.5 Multiple Granularity ...................................................... 196
12 TUNING ............................................................... 203
13 BACKUP DAN RECOVERY ............................... 242
Politeknik Telkom Database Management System
Dasar Penyimpanan Data 1
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
Politeknik Telkom Database Management System
2
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)
Politeknik Telkom Database Management System
Dasar Penyimpanan Data 3
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
Politeknik Telkom Database Management System
4
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
Politeknik Telkom Database Management System
Dasar Penyimpanan Data 5
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.
Politeknik Telkom Database Management System
6
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
Politeknik Telkom Database Management System
Dasar Penyimpanan Data 7
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
Politeknik Telkom Database Management System
8
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
Politeknik Telkom Database Management System
Dasar Penyimpanan Data 9
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‘);
Politeknik Telkom Database Management System
10
Delete form barang where kode_barang = ‗KOMP‘;
Update barang set tipe_barang = ‗komputasi‘ where kode_barang =
‗KOMP‘;
3. View Definition
Select * from barang;
Politeknik Telkom Database Management System
Dasar Penyimpanan Data 11
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
Politeknik Telkom Database Management System
12
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
No.10
5 Mei 1990
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!
Politeknik Telkom Database Management System
Dasar Penyimpanan Data 13
Latihan
1. Buatlah makalah mengenai sejarah perkembangan DBMS!
2. Buatlah makalah mengenai DBMS yang anda ketahui dan bandingkan dengan DBMS yang lain!
Politeknik Telkom Database Management System
14
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
Politeknik Telkom Database Management System
Arsitektur BasisData 15
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.
Politeknik Telkom Database Management System
16
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
Politeknik Telkom Database Management System
Arsitektur BasisData 17
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
Politeknik Telkom Database Management System
18
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
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.
SGA
Server
Process 1
Server Process
2
background
Process PGA
PGA
PG
A
Politeknik Telkom Database Management System
Arsitektur BasisData 19
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.
Politeknik Telkom Database Management System
20
2.1.3 Process Structure
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
Server
Process 1 PGA
SGA
User Process
JDBC/ODBC
Politeknik Telkom Database Management System
Arsitektur BasisData 21
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.
Politeknik Telkom Database Management System
22
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
Politeknik Telkom Database Management System
Arsitektur BasisData 23
Latihan
1. Buatlah makalah tentang instance yang ada pada minimal tiga DBMS
yang anda ketahui.
2. Buatlah makalah tentang maintenance instance pada Oracle
Politeknik Telkom Database Management System
24
Daftara pustaka
Course manual Oracle Database 10g: administration workshop I
http://www.Isbu.ac.uk/oracle/oracle7/server/doc/SCN73/ch9.html
Politeknik Telkom Database Management System
Database Administration - Basic Administration 25
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 ).
Politeknik Telkom Database Management System
26
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.
Politeknik Telkom Database Management System
Database Administration - Basic Administration 27
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
Politeknik Telkom Database Management System
28
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.
Politeknik Telkom Database Management System
Database Administration - Basic Administration 29
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
Politeknik Telkom Database Management System
30
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
Politeknik Telkom Database Management System
Database Administration - Basic Administration 31
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
Politeknik Telkom Database Management System
32
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.
Politeknik Telkom Database Management System
Database Administration - Basic Administration 33
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.
Politeknik Telkom Database Management System
34
- 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
Politeknik Telkom Database Management System
Database Administration - Basic Administration 35
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
Politeknik Telkom Database Management System
36
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.
Politeknik Telkom Database Management System
Database Administration - Basic Administration 37
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
Politeknik Telkom Database Management System
38
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.
Politeknik Telkom Database Management System
Database Administration - Basic Administration 39
Dalam oracle database terdapat user – user default yang memang
otomatis terbentuk saat installasi database, antara lain :
User Account Description
Status After
Installation
DBSNMP User yang digunakan untuk
melakukan proses monitoring
dalam Oracle Enterprise Manager
Open
SYS User tertinggi dalam oracle
database, digunakan sebagai
administrator pada database,
menyalakan / mematikan database.
Open
Password is
created at
installation or
database
creation time.
SYSMAN User yang gunakan pada Oracle
Enterprise Manager untuk
melakukan fungsi – fungsi
administrasi
Open
Password is
created at
installation or
database
creation time.
SYSTEM User administrator dalam database
Oracle, tetapi haknya masih
dibawah sys
Open
Password is
created at
installation or
database
creation time.
Politeknik Telkom Database Management System
40
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.
Politeknik Telkom Database Management System
Database Administration - Basic Administration 41
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.
Politeknik Telkom Database Management System
42
Pilihan Ganda
1.
Berikut merupakan salah satu kegiatan dalam database
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
4.
Dibawah ini yang bukan merupakan menu pada Oracle Enterprise
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
Politeknik Telkom Database Management System
Database Administration - Basic Administration 43
7 Salah satu kegiatan berikut yang termasuk dalam Autentification
adalah
A Network Authentification D Data Authentification
B Auditing E Monitor Authentification
C Performance Authentification
8
User Account memiliki beberapa atribut, berikut merupakan atribut
dari user account, kecuali
A Password D Quota tablespace
B Status account E Status password
C Status database
Politeknik Telkom Database Management System
44
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 !
Politeknik Telkom Database Management System
Konsep Prosedural 45
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
Politeknik Telkom Database Management System
46
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.
Aplikasi
SQL
SQL
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.
Aplikasi
IF … THEN
SQL;
ELSE
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.
AplikasiRPC
Politeknik Telkom Database Management System
Konsep Prosedural 47
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;
Politeknik Telkom Database Management System
48
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;
Politeknik Telkom Database Management System
Konsep Prosedural 49
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;
Politeknik Telkom Database Management System
50
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.
Politeknik Telkom Database Management System
Konsep Prosedural 51
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
Politeknik Telkom Database Management System
52
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.
Aplikasi
IF … THEN
SQL;
ELSE
SQL;
END IF;
2. RPC (Remote Procedure Call) : pemanggilan progam unit (prosedur
maupun fungsi) terhadap database.
AplikasiRPC
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;
Politeknik Telkom Database Management System
Konsep Prosedural 53
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.
Politeknik Telkom Database Management System
54
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.
Politeknik Telkom Database Management System
Konsep Prosedural 55
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
Politeknik Telkom Database Management System
56
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.
Politeknik Telkom Database Management System
Konsep Prosedural 57
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
Politeknik Telkom Database Management System
58
(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
Politeknik Telkom Database Management System
Konsep Prosedural 59
(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
Politeknik Telkom Database Management System
60
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)
Politeknik Telkom Database Management System
Konsep Prosedural 61
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;
Politeknik Telkom Database Management System
62
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.
Politeknik Telkom Database Management System
Lebih Lanjut Mengenai Prosedur 63
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.
Politeknik Telkom Database Management System
64
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.
TRUE FALSE
PEMILIHAN
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;
Politeknik Telkom Database Management System
Lebih Lanjut Mengenai Prosedur 65
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
Politeknik Telkom Database Management System
66
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
Politeknik Telkom Database Management System
Lebih Lanjut Mengenai Prosedur 67
--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;
Politeknik Telkom Database Management System
68
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;
Politeknik Telkom Database Management System
Lebih Lanjut Mengenai Prosedur 69
-- 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
Politeknik Telkom Database Management System
70
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’
Politeknik Telkom Database Management System
Lebih Lanjut Mengenai Prosedur 71
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
Politeknik Telkom Database Management System
72
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;
Politeknik Telkom Database Management System
Lebih Lanjut Mengenai Prosedur 73
-- 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
Politeknik Telkom Database Management System
74
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;
Politeknik Telkom Database Management System
Lebih Lanjut Mengenai Prosedur 75
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;
Politeknik Telkom Database Management System
76
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
Politeknik Telkom Database Management System
Lebih Lanjut Mengenai Prosedur 77
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
Politeknik Telkom Database Management System
78
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.
Politeknik Telkom Database Management System
Lebih Lanjut Mengenai Prosedur 79
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).
Politeknik Telkom Database Management System
80
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).
Politeknik Telkom Database Management System
Lebih Lanjut Mengenai Prosedur 81
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.
Politeknik Telkom Database Management System
82
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;
Politeknik Telkom Database Management System
Lebih Lanjut Mengenai Prosedur 83
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.
Politeknik Telkom Database Management System
84
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
Politeknik Telkom Database Management System
Lebih Lanjut Mengenai Prosedur 85
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;
Politeknik Telkom Database Management System
86
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;
Politeknik Telkom Database Management System
Lebih Lanjut Mengenai Prosedur 87
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
Politeknik Telkom Database Management System
88
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
%ROWCOUNT Jumlah baris yang telah
ditangkap melalui FETCH
%ISOPEN Bernilai TRUE bila cursor
masih dalam keadaan terbuka
Contoh, bila ingin mengecek cursor dalam keadaan terbuka atau tidak :
IF nama_cursor%ISOPEN THEN
statemen-statemen;
END IF;
Politeknik Telkom Database Management System
Lebih Lanjut Mengenai Prosedur 89
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
SQL%NOTFOUND
Berasosiasi dengan SELECT, bernilai TRUE
bila query menghasilkan NULL dan FALSE bila
query menghasilkan data
SQL%FOUND
Kebalikan SQL%NOTFOUND, bernilai FALSE bila
query menghasilkan NULL dan TRUE bila query
menghasilkan data
SQL%ISOPEN Bernilai TRUE saat eksekusi query, dan
otomatis FALSE saat eksekusi selesai
SQL%ROWCOUNT Menunjukkan banyaknya baris yang dihasilkan
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
Politeknik Telkom Database Management System
90
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.
Politeknik Telkom Database Management System
Lebih Lanjut Mengenai Prosedur 91
Beberapa predefined exception pada PL/SQL :
Error Kode Error Deskripsi
ORA-00001 DUP_VAL_ON_INDEX Input nilai duplikat pada
kolom unik
ORA-00051 TIMEOUT_ON_RESOURCE Time out
ORA-01001 INVALID_CURSOR Operasi cursor ilegal
ORA-01012 NOT_LOGGED_ON Mengakses database tapi
tidak terkoneksi
ORA-01017 LOGIN_DENIED Login dengan username atau
password yang salah
ORA-01403 NO_DATA_FOUND Statemen SELECT INTO tidak
menghasilkan baris data
ORA-01422 TOO_MANY_ROWS
Statemen SELECT INTO
menghasilkan lebih dari
satu baris data
ORA-01476 ZERO_DIVIDE Membagi dengan nol
ORA-01722 INVALID_NUMBER Gagal mengkonversi karakter
ke number
ORA-06500 STORAGE_ERROR
Memori rusak atau proses
membutuhkan memori lebih
besar
ORA-06501 PROGRAM_ERROR Terjadi PL/SQL internal
error
ORA-06502 VALUE_ERROR
Kesalahan pada operasi
aritmetika, konversi,
truncate, atau batasan
rentang nilai
ORA-06504 ROWTYPE_MISMATCH
Dalam suatu penugasan, tipe
data antara cursor variabel
dengan PL/SQL cursor tidak
cocok
ORA-06511 CURSOR_ALREADY_OPEN Membuka cursor yang sedang
dibuka
Politeknik Telkom Database Management System
92
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
Politeknik Telkom Database Management System
Lebih Lanjut Mengenai Prosedur 93
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;
Politeknik Telkom Database Management System
94
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);
Politeknik Telkom Database Management System
Lebih Lanjut Mengenai Prosedur 95
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]);
Politeknik Telkom Database Management System
96
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
Politeknik Telkom Database Management System
Lebih Lanjut Mengenai Prosedur 97
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.
Politeknik Telkom Database Management System
98
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;
Politeknik Telkom Database Management System
Lebih Lanjut Mengenai Prosedur 99
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
Politeknik Telkom Database Management System
100
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]);
Politeknik Telkom Database Management System
Lebih Lanjut Mengenai Prosedur 101
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;
Politeknik Telkom Database Management System
102
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)
Politeknik Telkom Database Management System
Lebih Lanjut Mengenai Prosedur 103
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
Politeknik Telkom Database Management System
104
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.
Politeknik Telkom Database Management System
Lebih Lanjut Mengenai Prosedur 105
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
... ... ... ... ...
Politeknik Telkom Database Management System
106
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).
Politeknik Telkom Database Management System
Tingkat Lanjut Konsep Prosedural 107
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.
Politeknik Telkom Database Management System
108
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;
Politeknik Telkom Database Management System
Tingkat Lanjut Konsep Prosedural 109
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
Politeknik Telkom Database Management System
110
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;
Politeknik Telkom Database Management System
Tingkat Lanjut Konsep Prosedural 111
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;
Politeknik Telkom Database Management System
112
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.
Politeknik Telkom Database Management System
Tingkat Lanjut Konsep Prosedural 113
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;
Politeknik Telkom Database Management System
114
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.
Politeknik Telkom Database Management System
Tingkat Lanjut Konsep Prosedural 115
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’);
Politeknik Telkom Database Management System
116
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;
Politeknik Telkom Database Management System
Tingkat Lanjut Konsep Prosedural 117
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);
Politeknik Telkom Database Management System
118
-- Mencetak nilai parameter output
DBMS_OUTPUT.PUT_LINE (vLokal);
END;
Politeknik Telkom Database Management System
Tingkat Lanjut Konsep Prosedural 119
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;
Politeknik Telkom Database Management System
120
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.
Politeknik Telkom Database Management System
Tingkat Lanjut Konsep Prosedural 121
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),
Politeknik Telkom Database Management System
122
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).
Politeknik Telkom Database Management System
Tingkat Lanjut Konsep Prosedural 123
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.
Politeknik Telkom Database Management System
124
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
Politeknik Telkom Database Management System
Query Optimization 125
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.
Politeknik Telkom Database Management System
126
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
trigger timing ketika trigger berelasi
ke event
BEFORE
AFTER
INSTEAD OF
trigger event
manipulasi data pada
tebel/ view yang
menyebabkan trigger
terpacu
INSERT
UPDATE
DELETE
trigger type berapa kali body
trigger dieksekusi
ROW
STATEMENT
trigger body apa action dari trigger Block PL/SQL lengkap
Politeknik Telkom Database Management System
Query Optimization 127
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.
Politeknik Telkom Database Management System
128
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.
Politeknik Telkom Database Management System
Query Optimization 129
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.
Politeknik Telkom Database Management System
130
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.
Politeknik Telkom Database Management System
Query Optimization 131
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
Politeknik Telkom Database Management System
132
: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;
Politeknik Telkom Database Management System
Query Optimization 133
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
Politeknik Telkom Database Management System
134
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.
Politeknik Telkom Database Management System
Query Optimization 135
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:
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 nama_trigger DISABLE | ENABLE
ALTER TRIGGER UPDATE_PEGAWAI DISABLE
Politeknik Telkom Database Management System
136
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.
Politeknik Telkom Database Management System
Query Optimization 137
Latihan
pemesan
PK id_pemesan
nama_pemesan
alamat_pemesan
no_telp
reservasi
PK id_reservasi
tgl_reservasi
kegunaan
jum_org
tgl_awal
tgl_akhir
jam_awal
jam_akhir
id_pemesan
id_punya_style
id_petugas
pembayaran
PK id_pembayaran
pembayaran_kartu
pembayaran_tunai
tgl_pembayaran
id_reservasi
petugas
PK id_petugas
nama_petugas
jabatan
fasilitas
PK id_fasilitas
nama_fasilitas
harga_fasilitas
jum_min_fasilitas
jum_max_fasilitas
banquet
PK id_banquet
nama_banquet
jenis_banquet
harga_banquet
jum_min_banquet
jum_max_banquet
meeting_room
PK id_mr
nama_mr
tarif_mr
ukuran
style
PK id_style
nama_style
memiliki
PK id_punya_style
kapasitas
id_mr
id_style
pesan_fasilitas
PK id_pesan_fasilitas
jum_pesan_fasilitas
biaya_total_fasilitas
id_reservasi
id_fasilitas
pesan_banquet
PK id_pesan_banquet
jum_pesan_banquet
biaya_total_banquet
id_reservasi
id_banquet
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!
Politeknik Telkom Database Management System
138
3. Suatu partai akan dapat diikutsertakan dalam pemilu jika partai
tersebut memiliki jumlah anggota minimal 100 orang. Buatlah trigger
yang akan memeriksa jumlah anggota suatu partai jika partai tersebut
ingin diikutsertakan dalam pemilu!
4. Buatlah contoh row level trigger dan statement level berdasarkan
studi kasus KPK, kemudian analisa perbedaannya!
5. Jika ID_Petugas seorang petugas KPU berubah maka ID_Petugas pada tabel mendaftar pun harus berubah. Mengapa demikian?
Bagaimana triggernya?
Politeknik Telkom Database Management System
Query Optimization 139
9 Query Optimization
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
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.
Politeknik Telkom Database Management System
140
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
Politeknik Telkom Database Management System
Query Optimization 141
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
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 )
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
Politeknik Telkom Database Management System
142
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
)(2500 accountbalance
Politeknik Telkom Database Management System
Query Optimization 143
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
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
)(2500 accountbalance
Politeknik Telkom Database Management System
144
Ekuivalences Rules
1. Conjunctive selection operation
2. Selection operation
3. Projection operation
4. Combine selection with cartesian product and theta join
a. (E1 X E2) = E1 E2
b. 1(E1 2 E2) = E1 1 2 E2
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.
0E1 E2) = (0(E1)) E2
(b) When 1 involves only the attributes of E1 and 2 involves only the attributes of E2.
1 E1 E2) = (1(E1)) ( (E2))
))(()(2121
EE
))(())((1221
EE
)())))((((121
EE ttntt
Politeknik Telkom Database Management System
Query Optimization 145
8. The projections operation distributes over the theta join operation as
follows:
(a) if P involves only attributes from L1 L2
))(())(()( 2......12.......1 2121
EEEE LLLL (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.
)))(())((().....( 2......121 42312121EEEE LLLLLLLL
9. Set operations union and intersection
E1E2=E2E1
E1 E2 = E2 E1 (*set difference is not commutative *). 10. Set union and intersection are associative
(E1 E2) E3 = E1 (E2 E3)
(E1 E2) E3 = E1 (E2 E3)
11. The selection operation distributes over , and –.
(E1 – E2) = (E1) – (E2)
and similarly for and in place of –Also:
(E1 – E2) = (E1) – E2
and similarly for in place of –, but not for
12. The projection operation distributes over union
L(E1 E2) = (L(E1)) (L(E2))
9.2 Sorting Sorting kumpulan record pada beberapa (search) key merupakan operasi
yang sangat berguna. Key dapat berupa atribut tunggal atau daftar atribut
terurut. Sorting perlu dilakukan dalam berbagai situasi, termasuk hal penting
berikut:
1. Sorting record merupakan langkah pertama dalam bulk-loading tree index
2. Sorting berguna untuk menghilagkan salinan duplikasi pada kumpulan
record
3. Algoritma yang digunakan secara luas untuk melakukan operasi aljabar
relasional yang sangat penting, yang disebut join ,memrlukan tahap sorting
Politeknik Telkom Database Management System
146
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 2k
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
Politeknik Telkom Database Management System
Query Optimization 147
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
Politeknik Telkom Database Management System
148
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
28 Yuppy 9 35.0
31 Lubber 8 55.5
44 Guppy 5 35.0
58 Rusty 10 35.0
Tabel S2
rating > 8(S2)
Politeknik Telkom Database Management System
Query Optimization 149
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
β 30 1
β 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
∏ A,C
(r) =
Politeknik Telkom Database Management System
150
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
}
Sid Sname Rating Age
28 Yuppy 9 35.0
31 Lubber 8 55.5
44 Guppy 5 35.0
58 Rusty 10 35.0
S1 S2
Tabel S1
Tabel S2
Politeknik Telkom Database Management System
Query Optimization 151
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
}
Sid Sname Rating Age
28 Yuppy 9 35.0
31 Lubber 8 55.5
44 Guppy 5 35.0
58 Rusty 10 35.0
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.
S1- S2
Tabel S1
Tabel S2
Politeknik Telkom Database Management System
152
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
Politeknik Telkom Database Management System
Query Optimization 153
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
Politeknik Telkom Database Management System
154
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
Politeknik Telkom Database Management System
Query Optimization 155
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
Politeknik Telkom Database Management System
156
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
Politeknik Telkom Database Management System
Query Optimization 157
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
Politeknik Telkom Database Management System
158
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’ ;
Politeknik Telkom Database Management System
Query Optimization 159
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
Politeknik Telkom Database Management System
160
10.1 Database Security Risk
Security pada database merupakan kegiatan / aturan yang dilakukan untuk
melindungi asset terpenting dalam database, yaitu data.
Security dari suatu database harus bisa memproteksi terhadap pengrusakan
data dan pemakaian data oleh pemakai yang tidak punya kewenangan.
Perangkat keras
Kebakaran, banjir, bom,
pencurian, listrik, gempa, radiasi, kesalahan mekanisme
eamanan
DBMS dan Program Aplikasi Kesalahan mekanisme
keamanan
Akses yang terlalu luas Pencurian program
Kesalahan program
Jaringan
Komunikasi Kabel yang
tidak erkoneksi, radiasi Database
Aturan / amandemen yang
tidak diotorisasi, penduplikatan data, pencurian data,
kehilangan data akibat gangguan
listrik
Pengguna Akhir
Menggunakan hak akses oran lain.
Melihat & menutup data
yang tidak
diotorisasi
Staf tidak di-
training
Pemasukan data
yang dilakukan oleh yang tidak berhak.
Virus
pemerasan
Programmer / Operator
Membuat Password.
Membuat
program yang tidak aman
Staf yang tidak di-training.
Kebijakan keamanan & prosedur
Pemogokan staf
Database Administrator
Kebijakan keamanan & prosedur
Politeknik Telkom Database Management System
Query Optimization 161
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.
Politeknik Telkom Database Management System
162
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.
Politeknik Telkom Database Management System
Query Optimization 163
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
Politeknik Telkom Database Management System
164
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
Politeknik Telkom Database Management System
Query Optimization 165
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
Politeknik Telkom Database Management System
166
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.
Politeknik Telkom Database Management System
Query Optimization 167
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
Politeknik Telkom Database Management System
168
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 :
Politeknik Telkom Database Management System
Query Optimization 169
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
Politeknik Telkom Database Management System
170
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.
Politeknik Telkom Database Management System
Query Optimization 171
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
Politeknik Telkom Database Management System
172
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.
Politeknik Telkom Database Management System
Query Optimization 173
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.
Politeknik Telkom Database Management System
174
Sebaliknya, system hanya
memberi peringatan saja.
PASSWORD_REUSE_TIME |
PASSWORD_REUSE_MAX PASSWORD_REUSE_TIME
: 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;
Politeknik Telkom Database Management System
Query Optimization 175
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
Politeknik Telkom Database Management System
176
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
Politeknik Telkom Database Management System
Query Optimization 177
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.
Politeknik Telkom Database Management System
178
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.
Politeknik Telkom Database Management System
Query Optimization 179
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.
Politeknik Telkom Database Management System
180
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.
Politeknik Telkom Database Management System
Query Optimization 181
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 :
USERSecurity
Policy
Where
Tabel
Predicate
Paket
Langkah 1 Langkah 2
Langkah 3
Langkah 4
Langkah 5
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.
Politeknik Telkom Database Management System
182
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)
Politeknik Telkom Database Management System
Query Optimization 183
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.
Politeknik Telkom Database Management System
184
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.
Politeknik Telkom Database Management System
Query Optimization 185
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.
Politeknik Telkom Database Management System
186
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.
Politeknik Telkom Database Management System
Konkurensi Basis Data 187
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.
Politeknik Telkom Database Management System
188
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
Politeknik Telkom Database Management System
Konkurensi Basis Data 189
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.
Politeknik Telkom Database Management System
190
- 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.
Politeknik Telkom Database Management System
Konkurensi Basis Data 191
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.
Politeknik Telkom Database Management System
192
Tabel penjadwalan 1
T1 T2 Conncurency
control-manager
Lock-X(B)
Grant X(B,T1)
Read (B)
B:=B-50
Write (B)
Unlock (B)
Lock-S(A)
Grant S(A,T2)
Read (A)
Unlock (A)
Lock –S(B)
Grant S(B,T2)
Read (B )
Unlock (B)
Display (A+B)
Lock –X(A)
Grant X(A,T1)
Read (A)
A:=A+50
Write (A)
Unlock (A)
Jika transaksi T1 dan T2 digambarkan seperti di atas dilakukan secara
berurutan, T1 terlebih dulu dieksekusi kemudian T2, ataupun T2 terlebih
dahulu dan kemudian T1, maka hasil dari T2 adalah harus selalu $300. Dari
table penjadwalan diatas, T1 dilakukan bersamaan dengan T2, maka akan
terjadi kesalahan hasil dari transaksi T2, yaitu menghasilkan nilai $250. Hal
tersebut terjadi karena T1 terlalu cepat melakukan unlock terhadap data B
yang menyebabkan data menjadi inkonsisten.
Politeknik Telkom Database Management System
Konkurensi Basis Data 193
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:
Politeknik Telkom Database Management System
194
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
Politeknik Telkom Database Management System
Konkurensi Basis Data 195
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 Ti 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
Politeknik Telkom Database Management System
196
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 Ti dapat
melakukan satu permintaan lock untuk melakukan lock terhadap seluruh
database.
Politeknik Telkom Database Management System
Konkurensi Basis Data 197
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.
Politeknik Telkom Database Management System
198
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)
Politeknik Telkom Database Management System
Konkurensi Basis Data 199
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
Politeknik Telkom Database Management System
200
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!
Politeknik Telkom Database Management System
Konkurensi Basis Data 201
Latihan
3. Buatlah makalah mengenai perbedaan Time Stamp Protocol dengan
Locking Based Protocol!
4. Buatlah makalah mengenai Deadlock dan cara menghindari serta
pencegahannya!
Politeknik Telkom Database Management System
202
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
Politeknik Telkom Database Management System Practice
Tuning 203
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
Politeknik Telkom Database Management System
204
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.
Politeknik Telkom Database Management System Practice
Tuning 205
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.
Politeknik Telkom Database Management System
206
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.
Politeknik Telkom Database Management System Practice
Tuning 207
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?
Politeknik Telkom Database Management System
208
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.
Politeknik Telkom Database Management System Practice
Tuning 209
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 *
Politeknik Telkom Database Management System
210
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.
Politeknik Telkom Database Management System Practice
Tuning 211
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
Politeknik Telkom Database Management System
212
V$SESSION_WAIT View V$SESSION_WAIT memperlihatkan resource atau event
dimana session aktif menunggu.
V$SESSION
View V$SESSION terdiri dari statistic tunggu yang sama yang terdiri
dalam V$SESSION_WAIT view. Jika teraplikasi, view ini juga terdiri
informasi detail pada objek yang session-nya sedang ditunggu (object
number, block number, file number, dan row number), ditambah
tanggung jawab blocking session untuk yang sedang ditunggu.
V$SESSION_EVENT
View V$SESSION_EVENT menyediakan kesimpulan dari semua
event yang session-nya ditunggu dari awal.
V$SESSION_WAIT_CLASS
View V$SESSION_WAIT_CLASS menyediakan jumlah tunggu dan
pemakaian waktu ditiap class dari event tunggu untuk tiap session.
V$SESSION_WAIT_HISTORY View V$SESSION_WAIT_HISTORY memperlihatkan sepuluh event
tunggu terakhir untuk setiap session aktif.
V$SYSTEM_EVENT
View V$SYSTEM_EVENT menyediakan suatu kesimpulan dari semua
event tunggu pada instansiasi sejak awal.
V$EVENT_HISTOGRAM
View V$EVENT_HISTOGRAM memperlihatkan suatu histogram
dari jumlah tunggu, maksimum tunggu, dan total waktu tunggu pada
suatu basis event.
V$FILE_HISTOGRAM
View V$FILE_HISTOGRAM memperlihatkan suatu histogram dari
waktu tunggu selama single block reads untuk tiap file.
V$SYSTEM_WAIT_CLASS View V$SYSTEM_WAIT_CLASS menyediakan instansiasi total
waktu yang luas untuk jumlah tunggu dan pemakaian waktu di tiap
class event tunggu.
V$TEMP_HISTOGRAM
View V$TEMP_HISTOGRAM meperlihatkan suatu histogram dari
waktu tunggu selama single block reads untuk tiap temporary file.
Politeknik Telkom Database Management System Practice
Tuning 213
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.
Politeknik Telkom Database Management System
214
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.
Politeknik Telkom Database Management System Practice
Tuning 215
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.
Politeknik Telkom Database Management System
216
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.
Politeknik Telkom Database Management System Practice
Tuning 217
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:
Politeknik Telkom Database Management System
218
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
Event
General
Area
Possible
Causes Look for / Examine
buffer busy
waits
Buffer
cache,
DBWR
Depends on
buffer type. For
example, waits
for an index
block may be
Examine V$SESSION while the
problem is occurring to
determine the type of block in
contention.
Politeknik Telkom Database Management System Practice
Tuning 219
Wait
Event
General
Area
Possible
Causes Look for / Examine
caused by a
primary key
that is based
on an
ascending
sequence.
free buffer
waits
Buffer
cache,
DBWR, I/O
Slow DBWR
(possibly due
to I/O?)
Cache too
small
Examine write time using
operating system statistics.
Check buffer cache statistics for
evidence of too small cache.
db file
scattered
read
I/O, SQL
statement
tuning
Poorly tuned
SQL
Slow I/O
system
Investigate V$SQLAREA to see
whether there are SQL
statements performing many
disk reads. Cross-check I/O
system and V$FILESTAT for
poor read time.
db file
sequential
read
I/O, SQL
statement
tuning
Poorly tuned
SQL
Slow I/O
system
Investigate V$SQLAREA to see
whether there are SQL
statements performing many
disk reads. Cross-check I/O
system and V$FILESTAT for
poor read time.
enqueue
waits (waits
starting with
enq:)
Locks Depends on
type of
enqueue
Look at V$ENQUEUE_STAT.
library cache
latch waits:
library
cache,
library cache
pin, and
library cache
Latch
contention
SQL parsing or
sharing
Check V$SQLAREA to see
whether there are SQL
statements with a relatively high
number of parse calls or a high
number of child cursors
(column VERSION_COUNT).
Check parse statistics in
Politeknik Telkom Database Management System
220
Wait
Event
General
Area
Possible
Causes Look for / Examine
lock V$SYSSTAT and their
corresponding rate for each
second.
log buffer
space
Log buffer,
I/O
Log buffer
small
Slow I/O
system
Check the statistic redo buffer
allocation retries in
V$SYSSTAT. Check configuring
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-
committing
Slow disks that
store the
online logs
Un-batched
commits
Check the disks that house the
online redo logs for resource
contention. Check the number
of transactions (commits +
rollbacks) each second, from
V$SYSSTAT.
Statistik / Ciri-ciri Tambahan
Ada sebuah statistic yang mengindikasikan performansi suatu masalah yang
tidak berkorespondensi / berhubungan dengan wait events.
Redo Log Space Requests Statistic
V$SYSSTAT statistic redo log space requests mengindikasikan berapa kali
suatu proses dari server harus menunggu untuk ruang yang kosong / space
disaat online redo log, bukan space saat redo log buffer. Sebuah nilai yang
signifikan untuk statistic ini dan wait event ini seharusnya digunakan sebagai
sebuah indikasi dari suatu proses checkpoints, DBWR, atau proses
pengarsipan yang seharusnya dioptimalkan, bukan LGWR. Penambahan
ukuran dari log buffer tidak akan membantu.
Read Consistency
Sistem Anda mungkin membutuhkan waktu roll back yang besar untuk
mengubah menjadi suatu blok-blok data untuk memantain bentuk yang
konsisten. Berikut contoh scenario-skenario yang ada :
Politeknik Telkom Database Management System Practice
Tuning 221
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.
Politeknik Telkom Database Management System
222
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
Politeknik Telkom Database Management System Practice
Tuning 223
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.
Politeknik Telkom Database Management System
224
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.
Politeknik Telkom Database Management System Practice
Tuning 225
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
Politeknik Telkom Database Management System
226
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
Politeknik Telkom Database Management System Practice
Tuning 227
(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.
Politeknik Telkom Database Management System
228
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.
Politeknik Telkom Database Management System Practice
Tuning 229
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
Politeknik Telkom Database Management System
230
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
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.
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.
Politeknik Telkom Database Management System Practice
Tuning 231
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
Politeknik Telkom Database Management System
232
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
Politeknik Telkom Database Management System Practice
Tuning 233
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:
Politeknik Telkom Database Management System
234
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:
Politeknik Telkom Database Management System Practice
Tuning 235
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');
Politeknik Telkom Database Management System
236
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
Politeknik Telkom Database Management System Practice
Tuning 237
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 */
Politeknik Telkom Database Management System
238
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 */
Politeknik Telkom Database Management System Practice
Tuning 239
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 */
Politeknik Telkom Database Management System
240
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 */
Politeknik Telkom Database Management System Practice
Tuning 241
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
.
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.
Politeknik Telkom Database Management System
242
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.
Politeknik Telkom Database Management System Practice
Backup dan Recovery 243 243
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
Politeknik Telkom Database Management System
244
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.
Politeknik Telkom Database Management System Practice
Backup dan Recovery 245 245
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
Politeknik Telkom Database Management System
246
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.
Politeknik Telkom Database Management System Practice
Backup dan Recovery 247 247
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.
Politeknik Telkom Database Management System
248
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
Politeknik Telkom Database Management System Practice
Backup dan Recovery 249 249
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.
Politeknik Telkom Database Management System
250
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 T0
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)
Politeknik Telkom Database Management System Practice
Backup dan Recovery 251 251
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
Politeknik Telkom Database Management System
252
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
Politeknik Telkom Database Management System Practice
Backup dan Recovery 253 253
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:
Politeknik Telkom Database Management System
254
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.
Politeknik Telkom Database Management System Practice
Backup dan Recovery 255 255
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.
Politeknik Telkom Database Management System
256
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:
Politeknik Telkom Database Management System Practice
Backup dan Recovery 257 257
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.
Politeknik Telkom Database Management System
258
SOAL
1. Sebutkan dan jelaskan karakteristik yang harus dimiliki
oleh sebuah transaksi agar integritas basis data dapat
terjaga?
2. T1: read(A)
A A - 100000
read(B)
B B + 100000
write(A)
read(C)
c C + 1
write(B)
write(C)
T2: read(B)
read(A)
temp 0.1 * A
A A - temp
read(C)
B B + temp
C C + 1
write(C)
write(A)
write(B)
T3: read(A)
temp 0.25 *A
A A - temp
read(B)
B B + temp
write(B)
read(C)
write(A)
C C + 1
write(C)
Buatlah skema pengeksekusian transaksi secara concurrent
(Urutan: T1-T2-T3)?
3. Sebutkan dan jelaskan operasi backup ditinjau dari
objeknya dan pelaksanaannya?
4. Berikan contoh dan penjelasan yang lengkap aplikasi
basis data yang anda ketahui?