262
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

Sistem Manajemen Basis Data

Embed Size (px)

Citation preview

Page 1: Sistem Manajemen Basis Data

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

Page 2: Sistem Manajemen Basis Data

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

Page 3: Sistem Manajemen Basis Data

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

Page 4: Sistem Manajemen Basis Data

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

Page 5: Sistem Manajemen Basis Data

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

Page 6: Sistem Manajemen Basis Data

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)

Page 7: Sistem Manajemen Basis Data

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

Page 8: Sistem Manajemen Basis Data

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

Page 9: Sistem Manajemen Basis Data

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.

Page 10: Sistem Manajemen Basis Data

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

Page 11: Sistem Manajemen Basis Data

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

Page 12: Sistem Manajemen Basis Data

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

Page 13: Sistem Manajemen Basis Data

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

Page 14: Sistem Manajemen Basis Data

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;

Page 15: Sistem Manajemen Basis Data

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

Page 16: Sistem Manajemen Basis Data

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!

Page 17: Sistem Manajemen Basis Data

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!

Page 18: Sistem Manajemen Basis Data

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

Page 19: Sistem Manajemen Basis Data

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.

Page 20: Sistem Manajemen Basis Data

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

Page 21: Sistem Manajemen 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

Page 22: Sistem Manajemen Basis Data

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

Page 23: Sistem Manajemen Basis Data

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.

Page 24: Sistem Manajemen Basis Data

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

Page 25: Sistem Manajemen Basis Data

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.

Page 26: Sistem Manajemen Basis Data

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

Page 27: Sistem Manajemen Basis Data

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

Page 28: Sistem Manajemen Basis Data

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

Page 29: Sistem Manajemen Basis Data

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

Page 30: Sistem Manajemen Basis Data

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.

Page 31: Sistem Manajemen Basis Data

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

Page 32: Sistem Manajemen Basis Data

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.

Page 33: Sistem Manajemen Basis Data

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

Page 34: Sistem Manajemen Basis Data

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

Page 35: Sistem Manajemen Basis Data

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

Page 36: Sistem Manajemen Basis Data

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.

Page 37: Sistem Manajemen Basis Data

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.

Page 38: Sistem Manajemen Basis Data

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

Page 39: Sistem Manajemen Basis Data

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

Page 40: Sistem Manajemen Basis Data

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.

Page 41: Sistem Manajemen Basis Data

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

Page 42: Sistem Manajemen Basis Data

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.

Page 43: Sistem Manajemen Basis Data

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.

Page 44: Sistem Manajemen Basis Data

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.

Page 45: Sistem Manajemen Basis Data

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.

Page 46: Sistem Manajemen Basis Data

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

Page 47: Sistem Manajemen Basis Data

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

Page 48: Sistem Manajemen Basis Data

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 !

Page 49: Sistem Manajemen Basis Data

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

Page 50: Sistem Manajemen Basis Data

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

Page 51: Sistem Manajemen Basis Data

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;

Page 52: Sistem Manajemen Basis Data

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;

Page 53: Sistem Manajemen Basis Data

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;

Page 54: Sistem Manajemen Basis Data

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.

Page 55: Sistem Manajemen Basis Data

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

Page 56: Sistem Manajemen Basis Data

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;

Page 57: Sistem Manajemen Basis Data

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.

Page 58: Sistem Manajemen Basis Data

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.

Page 59: Sistem Manajemen Basis Data

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

Page 60: Sistem Manajemen Basis Data

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.

Page 61: Sistem Manajemen Basis Data

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

Page 62: Sistem Manajemen Basis Data

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

Page 63: Sistem Manajemen Basis Data

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

Page 64: Sistem Manajemen Basis Data

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)

Page 65: Sistem Manajemen Basis Data

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;

Page 66: Sistem Manajemen Basis Data

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.

Page 67: Sistem Manajemen Basis Data

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.

Page 68: Sistem Manajemen Basis Data

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;

Page 69: Sistem Manajemen Basis Data

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

Page 70: Sistem Manajemen Basis Data

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

Page 71: Sistem Manajemen Basis Data

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;

Page 72: Sistem Manajemen Basis Data

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;

Page 73: Sistem Manajemen Basis Data

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

Page 74: Sistem Manajemen Basis Data

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’

Page 75: Sistem Manajemen Basis Data

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

Page 76: Sistem Manajemen Basis Data

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;

Page 77: Sistem Manajemen Basis Data

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

Page 78: Sistem Manajemen Basis Data

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;

Page 79: Sistem Manajemen Basis Data

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;

Page 80: Sistem Manajemen Basis Data

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

Page 81: Sistem Manajemen Basis Data

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

Page 82: Sistem Manajemen Basis Data

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.

Page 83: Sistem Manajemen Basis Data

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

Page 84: Sistem Manajemen Basis Data

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

Page 85: Sistem Manajemen Basis Data

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.

Page 86: Sistem Manajemen Basis Data

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;

Page 87: Sistem Manajemen Basis Data

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.

Page 88: Sistem Manajemen Basis Data

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

Page 89: Sistem Manajemen Basis Data

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;

Page 90: Sistem Manajemen Basis Data

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;

Page 91: Sistem Manajemen Basis Data

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

Page 92: Sistem Manajemen Basis Data

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;

Page 93: Sistem Manajemen Basis Data

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

Page 94: Sistem Manajemen Basis Data

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.

Page 95: Sistem Manajemen Basis Data

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

Page 96: Sistem Manajemen Basis Data

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

Page 97: Sistem Manajemen Basis Data

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;

Page 98: Sistem Manajemen Basis Data

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

Page 99: Sistem Manajemen Basis Data

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

Page 100: Sistem Manajemen Basis Data

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

Page 101: Sistem Manajemen Basis Data

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.

Page 102: Sistem Manajemen Basis Data

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;

Page 103: Sistem Manajemen Basis Data

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

Page 104: Sistem Manajemen Basis Data

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

Page 105: Sistem Manajemen Basis Data

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;

Page 106: Sistem Manajemen Basis Data

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)

Page 107: Sistem Manajemen Basis Data

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

Page 108: Sistem Manajemen Basis Data

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.

Page 109: Sistem Manajemen Basis Data

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

... ... ... ... ...

Page 110: Sistem Manajemen Basis Data

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

Page 111: Sistem Manajemen Basis Data

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.

Page 112: Sistem Manajemen Basis Data

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;

Page 113: Sistem Manajemen Basis Data

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

Page 114: Sistem Manajemen Basis Data

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;

Page 115: Sistem Manajemen Basis Data

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;

Page 116: Sistem Manajemen Basis Data

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.

Page 117: Sistem Manajemen Basis Data

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;

Page 118: Sistem Manajemen Basis Data

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.

Page 119: Sistem Manajemen Basis Data

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

Page 120: Sistem Manajemen Basis Data

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;

Page 121: Sistem Manajemen Basis Data

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

Page 122: Sistem Manajemen Basis Data

Politeknik Telkom Database Management System

118

-- Mencetak nilai parameter output

DBMS_OUTPUT.PUT_LINE (vLokal);

END;

Page 123: Sistem Manajemen Basis Data

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;

Page 124: Sistem Manajemen Basis Data

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.

Page 125: Sistem Manajemen Basis Data

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

Page 126: Sistem Manajemen Basis Data

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

Page 127: Sistem Manajemen Basis Data

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.

Page 128: Sistem Manajemen Basis Data

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

Page 129: Sistem Manajemen Basis Data

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.

Page 130: Sistem Manajemen Basis Data

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

Page 131: Sistem Manajemen Basis Data

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.

Page 132: Sistem Manajemen Basis Data

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.

Page 133: Sistem Manajemen Basis Data

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.

Page 134: Sistem Manajemen Basis Data

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.

Page 135: Sistem Manajemen Basis Data

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

Page 136: Sistem Manajemen Basis Data

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;

Page 137: Sistem Manajemen Basis Data

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

Page 138: Sistem Manajemen Basis Data

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.

Page 139: Sistem Manajemen Basis Data

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

Page 140: Sistem Manajemen Basis Data

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.

Page 141: Sistem Manajemen Basis Data

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!

Page 142: Sistem Manajemen Basis Data

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?

Page 143: Sistem Manajemen Basis Data

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.

Page 144: Sistem Manajemen Basis Data

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

Page 145: Sistem Manajemen Basis Data

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

Page 146: Sistem Manajemen Basis Data

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

Page 147: Sistem Manajemen Basis Data

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

Page 148: Sistem Manajemen Basis Data

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

Page 149: Sistem Manajemen Basis Data

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

Page 150: Sistem Manajemen Basis Data

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

Page 151: Sistem Manajemen Basis Data

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

Page 152: Sistem Manajemen Basis Data

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)

Page 153: Sistem Manajemen Basis Data

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

Page 154: Sistem Manajemen Basis Data

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

Page 155: Sistem Manajemen Basis Data

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

Page 156: Sistem Manajemen Basis Data

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

Page 157: Sistem Manajemen Basis Data

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

Page 158: Sistem Manajemen Basis Data

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

Page 159: Sistem Manajemen Basis Data

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

Page 160: Sistem Manajemen Basis Data

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

Page 161: Sistem Manajemen Basis Data

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

Page 162: Sistem Manajemen Basis Data

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

Page 163: Sistem Manajemen Basis Data

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

Page 164: Sistem Manajemen Basis Data

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

Page 165: Sistem Manajemen Basis Data

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.

Page 166: Sistem Manajemen Basis Data

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.

Page 167: Sistem Manajemen Basis Data

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

Page 168: Sistem Manajemen Basis Data

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

Page 169: Sistem Manajemen Basis Data

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

Page 170: Sistem Manajemen Basis Data

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.

Page 171: Sistem Manajemen Basis Data

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

Page 172: Sistem Manajemen Basis Data

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 :

Page 173: Sistem Manajemen Basis Data

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

Page 174: Sistem Manajemen Basis Data

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.

Page 175: Sistem Manajemen Basis Data

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

Page 176: Sistem Manajemen Basis Data

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.

Page 177: Sistem Manajemen Basis Data

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.

Page 178: Sistem Manajemen Basis Data

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;

Page 179: Sistem Manajemen Basis Data

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

Page 180: Sistem Manajemen Basis Data

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

Page 181: Sistem Manajemen Basis Data

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.

Page 182: Sistem Manajemen Basis Data

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.

Page 183: Sistem Manajemen Basis Data

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.

Page 184: Sistem Manajemen Basis Data

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.

Page 185: Sistem Manajemen Basis Data

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.

Page 186: Sistem Manajemen Basis Data

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)

Page 187: Sistem Manajemen Basis Data

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.

Page 188: Sistem Manajemen Basis Data

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.

Page 189: Sistem Manajemen Basis Data

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.

Page 190: Sistem Manajemen Basis Data

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.

Page 191: Sistem Manajemen Basis Data

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.

Page 192: Sistem Manajemen Basis Data

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

Page 193: Sistem Manajemen Basis Data

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.

Page 194: Sistem Manajemen Basis Data

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.

Page 195: Sistem Manajemen Basis Data

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.

Page 196: Sistem Manajemen Basis Data

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.

Page 197: Sistem Manajemen Basis Data

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:

Page 198: Sistem Manajemen Basis Data

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

Page 199: Sistem Manajemen Basis Data

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

Page 200: Sistem Manajemen Basis Data

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.

Page 201: Sistem Manajemen Basis Data

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.

Page 202: Sistem Manajemen Basis Data

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)

Page 203: Sistem Manajemen Basis Data

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

Page 204: Sistem Manajemen Basis Data

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!

Page 205: Sistem Manajemen Basis Data

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!

Page 206: Sistem Manajemen Basis Data

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

Page 207: Sistem Manajemen Basis Data

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

Page 208: Sistem Manajemen Basis Data

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.

Page 209: Sistem Manajemen Basis Data

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.

Page 210: Sistem Manajemen Basis Data

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.

Page 211: Sistem Manajemen Basis Data

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?

Page 212: Sistem Manajemen Basis Data

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.

Page 213: Sistem Manajemen Basis Data

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 *

Page 214: Sistem Manajemen Basis Data

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.

Page 215: Sistem Manajemen Basis Data

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

Page 216: Sistem Manajemen Basis Data

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.

Page 217: Sistem Manajemen Basis Data

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.

Page 218: Sistem Manajemen Basis Data

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.

Page 219: Sistem Manajemen Basis Data

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.

Page 220: Sistem Manajemen Basis Data

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.

Page 221: Sistem Manajemen Basis Data

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:

Page 222: Sistem Manajemen Basis Data

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.

Page 223: Sistem Manajemen Basis Data

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

Page 224: Sistem Manajemen Basis Data

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 :

Page 225: Sistem Manajemen Basis Data

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.

Page 226: Sistem Manajemen Basis Data

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

Page 227: Sistem Manajemen Basis Data

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.

Page 228: Sistem Manajemen Basis Data

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.

Page 229: Sistem Manajemen Basis Data

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

Page 230: Sistem Manajemen Basis Data

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

Page 231: Sistem Manajemen Basis Data

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.

Page 232: Sistem Manajemen Basis Data

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.

Page 233: Sistem Manajemen Basis Data

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

Page 234: Sistem Manajemen Basis Data

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.

Page 235: Sistem Manajemen Basis Data

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

Page 236: Sistem Manajemen Basis Data

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

Page 237: Sistem Manajemen Basis Data

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:

Page 238: Sistem Manajemen Basis Data

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:

Page 239: Sistem Manajemen Basis Data

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

Page 240: Sistem Manajemen Basis Data

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

Page 241: Sistem Manajemen Basis Data

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

Page 242: Sistem Manajemen Basis Data

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

Page 243: Sistem Manajemen Basis Data

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

Page 244: Sistem Manajemen Basis Data

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

Page 245: Sistem Manajemen Basis Data

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.

Page 246: Sistem Manajemen Basis Data

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.

Page 247: Sistem Manajemen Basis Data

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

Page 248: Sistem Manajemen 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.

Page 249: Sistem Manajemen Basis Data

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

Page 250: Sistem Manajemen Basis Data

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.

Page 251: Sistem Manajemen Basis Data

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.

Page 252: Sistem Manajemen Basis Data

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

Page 253: Sistem Manajemen Basis Data

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.

Page 254: Sistem Manajemen Basis Data

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)

Page 255: Sistem Manajemen Basis Data

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

Page 256: Sistem Manajemen Basis Data

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

Page 257: Sistem Manajemen Basis Data

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:

Page 258: Sistem Manajemen Basis Data

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.

Page 259: Sistem Manajemen Basis Data

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.

Page 260: Sistem Manajemen Basis Data

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:

Page 261: Sistem Manajemen Basis Data

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.

Page 262: Sistem Manajemen Basis Data

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?