100% menganggap dokumen ini bermanfaat (1 suara)
674 tayangan

SQL Dasar

SQL Programming Concepts

Diunggah oleh

strokenfilled
Hak Cipta
© Attribution Non-Commercial (BY-NC)
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai PDF, TXT atau baca online di Scribd
100% menganggap dokumen ini bermanfaat (1 suara)
674 tayangan

SQL Dasar

SQL Programming Concepts

Diunggah oleh

strokenfilled
Hak Cipta
© Attribution Non-Commercial (BY-NC)
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai PDF, TXT atau baca online di Scribd
Anda di halaman 1/ 269

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

PRAKTIKUM SISTEM MANAJEMEN BASIS DATA

POLITEKNIK TELKOM BANDUNG 2009

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

PENULIS : DEDY RAHMAN WIJAYA, ST EDITOR : KOMALA RATNA SARI, ST

Dilarang menerbitkan kembali, menyebarluaskan, atau menyimpan baik sebagian maupun seluruh isi buku dalam bentuk dan dengan cara apapun tanpa izin tertulis dari Politeknik Telkom Hak cipta dilindungi undang-undang @ Politeknik Telkom 2009 No part of this document may be copied, reproduced, printed, distributed, modified, removed and amended in any form by any means without prior written authorization of Telkom Polytechnic. Copyright @ 2009 Telkom Polytechnic. All rights reserved
ii User, Privilege dan Role

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

KATA PENGANTAR

Assalamualaikum Wr. Wb. Segala puji bagi Allah SWT karena dengan karunia-Nya courseware ini dapat diselesaikan. Atas nama Politeknik Telkom, kami sangat menghargai dan ingin menyampaikan terima kasih kepada penulis, penerjemah dan penyunting atas kontribusi yang telah diberikan sehingga courseware ini dapat tersusun. Kami mendorong para pengajar & mahasiswa untuk memberikan masukan yang positif. Saran mereka akan menjadi bahan pertimbangan yang serius dan banyak yang akan dimasukkan sebagai bahan perbaikan di edisi berikutnya. Kami akan sangat mengahargai apabila semua pihak dapat menyampaikan pendapatnya melalui [email protected]. Semoga courseware ini dapat memberikan manfaat bagi seluruh Civitas Akademika Politeknik Telkom dalam memahami materi perkuliahan di Politeknik Telkom. Amin. Wassalamualaikum Wr. Wb. Bandung, September 2009

Christanto Triwibisono Wakil Direktur I Bidang Akademik & Pengembangan

iii

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

DAFTAR ISI

KATA PENGANTAR ............................................................... iii DAFTAR ISI .............................................................................. iv 1 PENGANTAR DASAR DATABASE ..................... 1 1.1 Definisi ............................................................................. 2 1.2 Komponen Sistem Basis Data .......................................... 2 1.3 Sistem Basis Data dan Sistem File ................................... 2 1.4 Abstraksi Data .................................................................. 4 1.5 Database Administrator .................................................... 4 1.6 Struktur Sistem ................................................................. 5 1.7 Bahasa Basis Data ............................................................ 7 1.7.1 Data Definition Language (DDL) .................................... 7 1.7.2 Data Manipulation Language (DML) ............................ 10 1.8 JURNAL Studi Kasus Toko Buku ................................. 16 2 PENGANTAR DASAR DATABASE 2 ................ 19 2.1 Fungsi-fungsi pada SQL ................................................ 20 2.2 JURNAL ........................................................................ 35 3 INSTALASI ORACLE ........................................... 36 3.1 Pendahuluan ................................................................... 37 3.2 Hal-hal yang perlu diperhatikan sebelum proses instalasi ........................................................................................ 37 3.3 Langkah-langkah instalasi .............................................. 40 3.4 JURNAL ........................................................................ 45 4 PENGENALAN PL/SQL DAN TIPE DATA ....... 46 4.1 Pendahuluan ................................................................... 47 4.2 Variabel dan Tipe Data .................................................. 47 4.2.1 Deklarasi Variabel dan Tipe Data .................................. 47 4.2.2 Pendeklarasian Konstanta .............................................. 50 4.3 Struktur Blok PL/SQL.................................................... 53 4.4 Struktur Kondisional ...................................................... 55 4.5 Struktur Iterasi ................................................................ 56 5 CURSOR ................................................................. 67
iv User, Privilege dan Role

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

5.1 Cursor Implisit ............................................................... 68 5.2 Cursor Eksplisit .............................................................. 71 5.3 JURNAL ........................................................................ 78 6 ERROR HANDLING.............................................. 80 6.1 ERROR HANDLING (EXCEPTION) .......................... 81 6.2 Cara Kerja EXCEPTION ............................................... 81 6.3 User Defined EXCEPTION ........................................... 84 6.4 Unhandled EXCEPTION ............................................... 85 6.5 Menggunakan RAISE_APPLICATION_ERROR ......... 86 6.6 EXCEPTION INIT PRAGMA ...................................... 87 6.7 JURNAL ........................................................................ 88 7 STORED PROGRAM............................................. 89 7.1 Procedure........................................................................ 90 7.1.1 Non Nested Procedure.................................................... 90 7.1.2 Nested Procedure ........................................................... 92 7.1.3 JENIS-JENIS PROCEDURE PADA ORACLE : .......... 92 7.2 Function.......................................................................... 95 7.2.1 Non Nested Function...................................................... 96 7.2.2 Nested Function ............................................................. 98 7.3 Jurnal ............................................................................ 102 8 TRIGGER .............................................................. 106 8.1 Definisi ......................................................................... 107 8.2 Manfaat ........................................................................ 107 8.3 Batasan ......................................................................... 107 8.4 Struktur Dasar Trigger ................................................. 108 8.5 Jenis-jenis Trigger ........................................................ 110 8.6 Cascading Trigger ........................................................ 114 8.7 Status Trigger ............................................................... 115 8.8 JURNAL ...................................................................... 116 9 INDEX, VIEW dan SEQUENCE ........................ 117 9.1 INDEX ......................................................................... 118 9.1.1 Membuat Index (CREATE INDEX) ............................ 118 9.1.2 Memodifikasi Index (CREATE INDEX) ..................... 118
v

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

9.1.3 Mengubah Nama Index ................................................ 119 9.1.4 Menghapus Index (CREATE INDEX) ........................ 119 9.2 Segmen Index ............................................................... 119 9.3 Menentukan Indeks ...................................................... 121 9.3.1 Ekspresi Tunggal .......................................................... 122 9.3.2 Ekspresi Gabungan....................................................... 122 9.4 Jenis-jenis Indeks ......................................................... 122 9.5 Menghindari Duplikasi Data ........................................ 125 9.6 Keputusan Rebuild Indeks ........................................... 126 9.6.1 Rebuild Indeks Online.................................................. 127 9.7 Keputusan Mengubah Indeks ....................................... 127 9.8 Sumber informasi ......................................................... 128 9.9 Partisi Indeks ................................................................ 129 9.9.1 Indeks Global ............................................................... 130 9.9.2 Indeks Lokal ................................................................. 130 9.10 Mengidentifikasi Indeks Unused .................................. 131 9.11 VIEW ........................................................................... 133 9.11.1 Membuat View (CREATE VIEW) ..................... 134 9.11.2 Memodifikasi View (ALTER VIEW) ................. 135 9.11.3 Menghapus View (DROP VIEW) ....................... 135 9.12 SEQUENCE ................................................................. 143 9.12.1 Membuat Sequence (CREATE SEQUENCE) .... 143 9.12.2 Memodifikasi Sequence (ALTER SEQUENCE) 144 9.12.3 Menghapus Sequence (DROP SEQUENCE)...... 144 9.13 JURNAL ...................................................................... 145 10 SIMPLE REPORT ................................................. 146 10.1 Mengatur Dimensi Halaman ........................................ 147 10.1.1 Menggunakan BREAK ....................................... 148 10.1.2 Melakukan Kalkulasi dengan COMPUTE .......... 150 10.1.3 Perintah COLUMN Untuk Memformat Kolom .. 153 10.1.4 Memberi Judul pada Halaman ............................ 158 10.1.5 Menambahkan Tanggal ....................................... 160 10.2 Menyimpan dan Mencetak Laporan ............................. 161
vi User, Privilege dan Role

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

10.3 Menciptakan output HTML dengan SQL * Plus ......... 165 10.4 JURNAL ...................................................................... 169 11 USER, PRIVILEGE dan ROLE ............................ 170 11.1 USER MANAGAMENT ............................................. 171 11.1.1 User sebagai Tipe ................................................ 171 11.1.2 User versus Schema ............................................ 171 11.1.3 User versus account............................................. 171 11.1.4 CREATE USER .................................................. 171 11.1.5 ALTER USER ..................................................... 172 11.1.6 DROP USER ....................................................... 173 11.1.7 MONITORING USER ........................................ 173 11.2 PRIVILEGES ............................................................... 174 11.2.1 Operasi-operasi ................................................... 174 11.2.2 REVOKE PRIVILEGES ..................................... 177 11.2.3 Keamanan Privilege dan Roles ........................... 178 11.3 ROLES ......................................................................... 178 11.3.1 System Defined Role........................................... 179 11.3.2 Creating Roles ..................................................... 179 11.3.3 Operasi GRANT.................................................. 179 11.3.4 Memakai Roles.................................................... 180 11.3.5 Removing Roles .................................................. 180 11.3.6 Mengubah Roles.................................................. 181 11.3.7 Membuang Roles ................................................ 181 11.4 JURNAL ...................................................................... 183 12 Backup and Recovery .......................................... 184 12.1 Konfigurasi Setting Backup dan Kebijakan ( policy ) . 186 12.2 Menentukan DBID dan DB_UNIQUE_NAME ........... 189 12.3 Melakukan Backup seluruh Database .......................... 192 12.4 Melakukan Backup database dengan Strategi Oraclesuggested ...................................................................... 196 12.5 Melakukan Recovery Database Secara Keseluruhan ... 200 12.6 Flasback Tabel ............................................................. 204 12.6.1 Enable Row Movement ....................................... 204
vii

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

12.6.2 Simulasikan User Error ....................................... 207 12.6.3 Melakukan flashback pada tabel ......................... 207 12.6.4 Flashback Drop ................................................... 211 12.7 Mengatur Backup ......................................................... 218 12.7.1 Menggunakan halaman untuk membackup database yang ada pada waktu sekarang ..................................... 219 12.7.2 Backup Crosschecking ........................................ 221 12.7.3 Menghapus backup yang expired ........................ 224 12.7.4 Menghapus Backup yang usang ( Obsolete ) ...... 226 12.7.5 Menandakan Backup menjadi tidak ada ( unavailable ) ................................................................. 228 12.7.6 Membuat Katalog untuk Backup ........................ 229 12.8 JURNAL ...................................................................... 231 13 Monitoring and Resolving Lock Conflicts ......... 232 13.1 Locks ............................................................................ 233 13.2 Locking Mechanism ..................................................... 234 13.3 Data Concurrency......................................................... 234 13.4 DML Locks .................................................................. 239 13.5 Enqueue Mechanism ( mekanisme antrian ) ................ 239 13.6 Lock Conflicts .............................................................. 240 13.7 Detecting Lock Conflicts ............................................. 242 13.8 Resolving Lock Conflicts ............................................. 245 13.9 Deadlocks ..................................................................... 246 13.10 JURNAL ................................................................ 247 14 TUNING ................................................................. 248 14.1 SQL Tuning .................................................................. 249 14.2 EXPLAIN PLAN ......................................................... 250 14.3 ANALYZE ................................................................... 251 14.4 PLAN TABLE ............................................................. 252 14.5 OPERASI ..................................................................... 254 14.6 Reviewing the Execution Plan ..................................... 257 14.7 JURNAL ...................................................................... 261
viii User, Privilege dan Role

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

1 PENGANTAR DASAR DATABASE

Overview

Dalam kehidupan sehari-hari kita sering membahas mengenai data dan informasi. Informasi berasal dari kumpulan data yang disimpan secara terstruktur pada sebuah sistem yang dikenal dengan basis data (database). Pada bab awal ini akan dibahas tentang definisi, komponen sistem basis data, sistem file, abstraksi data, bahasa basis data, database administrator dan struktur sistem.

Tujuan

1. 2. 3.

Mahasiswa mengetahui dan mengerti konsep basis data. Mahasiswa mengetahui mengenai komponen-komponen sistem basis data. Mahasiswa mengetahui mengenai abstraksi data dan Database Language.

Pengantar Dasar Database

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

1.1 Definisi
Basis data adalah penyimpanan kumpulan informasi secara sistematik dalam sebuah komputer sehingga dapat diperiksa menggunakan suatu program komputer untuk memperoleh informasi dari basis data tersebut. Perangkat lunak yang digunakan untuk mengelola dan memanggil kueri (query) basis data disebut sistem manajemen basis data (database management system, DBMS). Sedangkan sistem adalah sebuah tatanan yang terdiri atas sejumlah komponen fungsional yang saling berhubungan dan secara bersama-sama bertujuan untuk memenuhi suatu proses pekerjaan. Sehingga bisa dikatakan bahwa sistem basis data adalah sistem yang terdiri atas kumpulan file-file yang saling berhubungan dan sekumpulan program (DBMS) yang memungkinkan beberapa pemakai dan atau program lain untuk mengakses dan memanipulasi data tersebut.

1.2 Komponen Sistem Basis Data


Komponen-komponen pada sebuah sistem basis data antara lain: Perangkat keras Sistem operasi Basis data DBMS (Database Management System) Pemakai Aplikasi lain

1.3 Sistem Basis Data dan Sistem File


Pada sebuah institusi, data merupakan salah satu hal yang sangat penting. Setiap bagian/divisi dari institusi memiliki data sendiri-sendiri. Tapi setiap bagian pun membutuhkan sebagian data dari bagian yang lain. Hal ini yang biasa dikenal sebagai shared data. Setiap divisi memiliki aplikasi sendiri sendiri dalam melakukan manipulasi dan pengambilan data tersebut. Setiap aplikasi memiliki file-file dalam sistem operasi yang digunakan untuk
2 User, Privilege dan Role

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

menyimpan data-data. Seiring dengan berkembangnya institusi, bertambahnya bagian/divisi, bertambah pula data dan aplikasi yang digunakan. Bertambahnya aplikasi, bertambah pula file-file yang dibuat. Gaya sistem pemrosesan-file tersebut menyebabkan setiap data disimpan dalam bentuk record dalam berbagai macam file, dan diperlukan aplikasi yang berbeda dalam melakukan pengambilan record dari, dan penambahan record ke dalam file. Hal ini berlaku pada masa sebelum adanya Sistem Basis Data (DBMS). Menyimpan data dalam bentuk file yang berbeda-beda, memiliki kekurangan-kekurangan: Data redundancy dan inconsistency. Dikarenakan programer yang berbeda membuat file dan aplikasi masing-masing, menyebabkan beragam format dan aplikasi yang dibuat. Bahkan, aplikasi pun dibuat menggunakan bahasa pemrograman yang berbeda-beda. Lebih jauh lagi, data atau informasi yang sama bisa terdapat dalam beberapa file yang berbeda. Ini yang disebut dengan redundancy. Redundancy data ini lama kelamaan akan menyebabkan inconsystency dari data. Kesulitan dalam pengaksesan data. Dikarenakan setiap aplikasi memiliki file tersendiri untuk penyimpanan dan pengambilan data, maka jika suatu bagian dari institusi membutuhkan data dari bagian lain, akan menemui kesulitan. Hal ini dikarenakan aplikasi yang dimiliki bagian tersebut, tidak dapat membaca file yang terdapat di bagian lain. Isolasi data. Dikarenakan data tersebar dalam berbagai macam file, dan file tersebut dalam beragam format, pembuatan aplikasi baru akan terasa sulit ketika harus membaca format dari masing-masing file tersebut. Masalah integritas. Data yang disimpan harus memenuhi hal yang dinamakan dengan consistency constraint. Jika sebuah constraint berubah, maka seluruh aplikasi yang digunakan harus mengakomodasinya. Masalah akan muncul, jika constraint melibatkan beberapa data dari file yang berbeda-beda. Masalah keamanan. Tidak semua pengguna dari basis data dapat mengakses semua data. Hal ini akan sulit dilakukan jika menggunakan gaya penyimpanan data dalam file.

Pengantar Dasar Database

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

1.4 Abstraksi Data


Tujuan utama dari sistem basis data adalah untuk menyediakan fasilitas untuk view data secara abstrak bagi penggunanya. Namun bagaimana sistem menyimpan dan mengelola data tersebut, hanya diketahui oleh sistem itu sendiri. Abstraksi data merupakan level dalam bagaimana melihat data dalam sebuah sistem basis data. Berikut ini tiga level abstraksi data: 1. Level fisik Merupakan level terendah pada abstraksi data yang menunjukkan bagaimana sesungguhnya data disimpan. Pada level ini pemakai melihat data sebagai gabungan dari struktur dan datanya sendiri. 2. Level lojik Merupakan level berikutnya pada abstraksi data, menggambarkan data apa yang disimpan pada basis data dan hubungan apa saja yang ada di antara data tersebut. 3. Level view Merupakan level tertinggi dari abstraksi data yang hanya menunjukkan sebagian dari basis data. Banyak user dalam sistem basis data tidak akan terlibat dengan semua data atau informasi yang ada atau yang disimpan. Para user umumnya hanya membutuhkan sebagian data atau informasi dalam basis data yang kemunculannya di mata user diatur oleh aplikasi end user.

1.5 Database Administrator


Salah satu alasan dari pemanfaatan DBMS adalah untuk mendapatkan kontrol yang terpusat atas data dan program yang mengakses data tersebut. Orang yang memiliki kontrol atas sistem seperti yang telah disebutkan tersebut adalah database administrator (DBA). Fungsi-fungsi DBA antara lain: Definisi skema Definisi struktur penyimpanan dan metode akses Modifikasi skema dan organisasi fisik Memberikan otorisasi untuk akese data Spesifikasi integritas constraint

User, Privilege dan Role

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

1.6 Struktur Sistem


Sebuah sistem basis data terbagi ke dalam beberapa modul yang masing-masing mempunyai tanggung jawab dalam membentuk struktur sistem secara keseluruhan. Beberapa fungsi dari sistem basis data mungkin telah diberikan oleh sistem operasi. Tetapi dalam sebagian besar kondisi, sistem operasi hanya menyediakan servis-servis dasar dan sistem basis data harus dibangun di atasnya.

Gambar 1-1 Struktur Sistem Basis Data


Pengantar Dasar Database 5

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

Komponen-komponen fungsional dari sebuah sistem basis data dibagi menjadi dua, yaitu komponen query processor dan komponen storage manager. Query processor terdiri atas: DML compiler, menerjemahkan perintah DML pada suatu query ke dalam instruksi level rendah yang dimengerti oleh mesin evaluasi query. Dengan kata lain, DML compiler berusaha mengubah suatu permintaan user menjadi bentuk yang ekivalen namun lebih efisien sekaligus juga menentukan sebuah strategi yang tepat untuk mengeksekusi query tersebut. Embedded DML precompiler, mengkonversi perintah DML yang embed pada sebuah program aplikasi ke procedure call yang normal dalam bahasa host. Precompiler ini harus nerinteraksi dengan DML compiler untuk menghasilkjan kode yang sesuai. DDL interpreter, menginterpretasikan perintah DDL dan mencatatnya dalam sekumpulan tabel yang mengandung metadata. Query evaluation engine, mengeksekusi instruksi level rendah yang dihasilkan oleh DML compiler. Komponen storage manager menyediakan antarmuka antara data level rendah yang tersimpan dalam basis data dan program aplikasi serta query yang diberikan ke sistem. Yang termasuk komponen ini adalah: Manajer otorisasi dan integritas, menguji integritas dari constraint yang ada serta otoritas user untuk mengakses data. Manajer transaksi, meyakinkan basis data tetap pada kondisi konsisten (benar) saat terjadi kegagalan sistem serta meyakinkan bahawa eksekusi dari transaksi yang konkuren (terjadi bersamaan) berlangsung tanpa adanya konflik. Manajer file, mengelola alokasi ruang pada disk penyimpanan struktur data yang digunakan untuk mewakili informasi yang disimpan pada disk. Manajer buffer, bertanggung jawab untuk mengambil data dari disk penyimpanan ke dalam memori utama serta menetukan data yang mana yang akan ditempatkan di memory

User, Privilege dan Role

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

1.7 Bahasa Basis Data


Sebuah sistem basis data menyediakan dua macam bahasa yang berbeda. Pertama untuk menspesifikasikan skema basis data (DDL) dan yang kedua untuk melakukan perubahan dalam basis data (DML). Selain itu juga ada select statement (query) yang digunakan untuk mengambil data yang ada di dalam database.

1.7.1 Data Definition Language (DDL)


Data Definition Language ini Berfungsi untuk mendefinisikan struktrur sebuah tabel, tipe data setiap field dan constraint yang berlaku pada data yang tersimpan di dalam sebuah tabel. Hasil dari kompilasi DDL adalah kumpulan tabel yang tersimpan pada sebuah file khusus yang disebut dengan kamus data (data dictionary) atau data directory. Kamus data merupakan sebuah file yang berupa metadata, yaitu data tentang data. Kamus data ini akan selalu diakses pada suatu operasi basis data sebelum suatu file data yang sesungguhnya diakses. DDL terdiri dari CREATE, ALTER, dan DROP yang akan dijelaskan sebagai berikut : Membuat tabel (CREATE TABLE) Query untuk membuat tabel (create table) adalah :
CREATE TABLE nama_tabel ( nama_field_1 nama_field_2 , [ CONSTRAINT (nama_field) ] [ CONSTRAINT nama_constraint FOREIGN KEY (nama_field) REFERENCE nama_table (nama_field) ON DELETE CASCADE ] );
Pengantar Dasar Database 7

tipe_data, tipe_data, nama_constraint PRIMARY KEY

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

Keterangan : nama_field1, nama_field2 adalah nama kolom (field) yang akan ada di dalam tabel. tipe_data adalah tipe data yang bisa ditampung oleh field. tipe_constraint adalah batasan yang menentukan suatu field. Tanda [ ] menyatakan bahwa yang didalamnya boleh ada atau tidak. Macam macam tipe constraint yang mungkin adalah : NULL atau NOT NULL Constraint NOT NULL ini berfungsi untuk menjamin field harus diisi sedangkan constraint NULL memperbolehkan suatu field untuk dikosongi UNIQUE Constraint ini berfungsi untuk menjamin bahwa nilai pada setiap record di dalam sebuah tabel adalah unik PRIMARY KEY FOREIGN KEY CHECK Constraint ini berfungsi untuk menjamin bahwa nilai yang akan dimasukkan ke dalam sebuah field sudah sesuai dengan aturan yang dibuat Contoh : pembuatan tabel mahasiswa dengan atribut nim bertipe char(9) dan nama bertipe varchar(20) yang tidak boleh kosong. Sintaks : CREATE TABLE mahasiswa ( Nim char(9), Nama varchar(20) not null, CONSTRAINT pk_mhs PRIMARY KEY (Nim) );

Memanipulasi tabel (ALTER TABLE) Sebuah struktur tabel yang sudah didefinisikan dapat dimodifikasi dengan menggunakan perintah ALTER TABLE. Ada beberapa jenis modifikasi pada tabel :

User, Privilege dan Role

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

1.

Menambahkan constraint baru untuk sebuah tabel Query : ALTER TABLE nama_tabel ADD CONSTRAINT nama_constraint_baru (definisi_constraint); Contoh : (misal pada tabel mahasiswa belum ada primary key) SQL > ALTER TABLE mahasiswa ADD CONSTRAINT pk_mhs PRIMARY KEY (Nim);

2.

Menghapus sebuah constraint di dalam tabel. Query : ALTER TABLE nama_tabel DROP CONSTRAINT nama_constraint; Contoh : SQL > ALTER TABLE mahasiswa DROP CONSTRAINT pk_ mhs;

3.

Manambahkan field baru pada sebuah tabel. Query : ALTER TABLE nama_tabel ADD(nama_field tipe_data [definisi_konstraint]); Contoh : SQL > ALTER TABLE mahasiswa ADD(alamat varchar(50) NOT NULL);

4.

Mengubah definisi field yang telah ada pada sebuah tabel. Query : ALTER TABLE nama_tabel MODIFY(nama_field tipe_field definisi_konstraint); Contoh : SQL > ALTER TABLE mahasiswa MODIFY(alamat varchar(25) not null);

Pengantar Dasar Database

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

Menghapus tabel (DROP TABLE) Query untuk menghapus tabel (drop table) adalah : DROP TABLE nama_table [CASCADE CONSTRAINT]; CASCADE CONSTRAINT : akan menghapus semua constraint yang terhubung dengan tabel yang dihapus. Contoh : SQL > DROP TABLE buku;

1.7.2 Data Manipulation Language (DML)


Level abstraksi yang telah dibahas sebelumnya tidak hanya berlaku pada definisi atau struktur data tetapi juga pada manipulasi data. Manipulasi data itu sendiri dapat berupa: Pemasukan informasi baru ke dalam basis data (insert) Penghapusan informasi dari basis data (delete) Modifikasi informasi yang tersimpan pada basis data (update) DML merupakan bahasa yang memungkinkan user untuk mengakses atau memanipulasi data sebagaimana telah direpresentasikan oleh model data. Terdapat dua macam DML, yaitu: Prosedural, mengharuskan user untuk menentukan data apa yang dibutuhkan dan bagaimana untuk mendapatkan data tersebut. Nonprosedural, mengharuskan pemakai untuk menentukan data apa yang dibutuhkan tanpa menyebutkan bagaimana mendapatkan data tersebut. Sintaks-sintaks pada DML antara lain : INSERT RECORD Insert digunakan untuk menyisipkan sebuah record ke dalam sebuah tabel. Query :
INSERT INTO nama_tabel [(nama_field1, nama_field2, .)]

VALUES (nilai1, nilai2, );

Perlu diperhatikan bahwa nama_field1, nama_field2, dapat dihilangkan. Hal ini dapat dilakukan bila nilai yang dimasukkan user,
10 User, Privilege dan Role

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

urutan sesuai dengan urutan field di dalam tabel tersebut, dan jumlah nilai yang dimasukkan juga harus sama dengan jumlah field pada tabel. Selain itu, proses penyisipan juga harus mematuhi aturan constraint yang telah didefinisikan pada sebuah tabel Contoh : insert into mahasiswa values('30108001', 'paijo', 'skp'); atau insert into mahasiswa (nim,nama,alamat) values('30108001', 'paijo', 'skp'); UPDATE RECORD Setiap nilai record yang telah disimpan di dalam tabel dapat dimodifikasi kembali berdasarkan kondisi tertentu. Jika kondisi tidak didefinisikan, maka nilai semua record akan terupdate Query :
UPDATE nama_tabel SET nama_field1 = nilai_baru1, nama_field2 = nilai_baru2, . [WHERE kondisi];

Contoh : SQL > update mahasiswa set nama = 'paimin', alamat = 'skb' where nim = '30108001'; DELETE RECORD Record yang telah disimpan di dalam sebuah tabel dapat dihapus berdasarkan kondisi tertentu. Jika kondisi untuk menghapus tidak didefinisikan maka seluruh record pada tabel tersebut akan dihapus. Query : DELETE nama_tabel [WHERE kondisi];

Pengantar Dasar Database

11

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

Contoh : SQL > delete mahasiswa where nim = '30108001'; (menghapus sebuah record pada tabel mahasiswa dimana nimnya 30108001) SQL > delete mahasiswa; (menghapus semua record pada table mahasiswa) Select Statement Statement SELECT digunakan untuk mengambil record dari sebuah tabel atau lebih. Record yang diambil dengan SELECT dapat disaring dengan menggunakan kondisi yang terdefinisi. Statement SELECT mempunyai format sebagai berikut :
SELECT [DISTINCT | ALL] FROM nama_tabel [WHERE kondisi1] [GROUP BY nama_field] [HAVING kondisi2] [ORDER BY nama_field [ASC | DSC]]; * | nama_field 1, nama_field 2,

DISTINCT digunakan untuk mengambil record yang nilainya tidak ganda. FROM digunakan untuk mendefinisikan tabel yang menjadi sumber data dari suatu perintah SELECT. WHERE digunakan untuk mendefinisikan kondisi pengambilan data pada tabel yang disebutkan di klausa FROM. GROUP BY digunakan untuk mengelompokkan baris baris data berdasarkan ekspresi group group tertentu yaitu untuk field tertentu. HAVING digunakan untuk memilih / mendefinisikan kriteria kelompok group yang akan ditampilkan berdasarkan group yang akan dibuat. Penggunaa klausa HAVING dipakai sebagai pengganti klausa WHERE pada GROUP BY. ORDER BY digunakan untuk mengurutkan seleksi berdasarkan kondisi yang diinginkan.
12 User, Privilege dan Role

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

ASC (ascending) berarti pengurutan menaik 1, 2, 3, 4 . DSC (descending) berarti pengurutan menurun 10, 7, 4, 2, . Untuk mengambil semua field pada setiap record, maka ganti semua nama field menjadi tanda bintang * (tanpa tanda kutip) SELECT * FROM nama_tabel [WHERE kondisi]; Contoh : SELECT * FROM mahasiswa; Untuk mengambil record yang memenuhi kondisi tertentu maka statement SELECT digabung dengan klausa WHERE. Format WHERE : WHERE nama_field operator_kondisional nilai Operator kondisional yang diganakan adalah :
Operator = <>, !=, ^= > < >= <= BETWEEN AND IN LIKE IS NULL Arti Sama dengan Tidak sama dengan Lebih besar Lebih kecil Lebih besar atau sama dengan Lebih kecil atau sama dengan Mengambil nilai yang berada pada antara 2 buah bilangan. Mengetes nilai nilai pada list yang disepsifikasikan Menyocokkan sebuah pola karekter Apakah sebuah nilai null?

Untuk menggabungkan beberapa kondisi didalam klausa WHERE, maka digunakan operator boolean AND, OR, dan NOT. AND : apabila setiap kondisi harus dipenuhi. OR : apabila cukup salah satu kondisi yang terpenuhi. NOT : apabila merupakan kebalikan / negasi dari kondisi yang dipenuhi. Contoh : Select * from mahasiswa where nama not paimen;

Pengantar Dasar Database

13

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

BETWEEN AND Untuk mengambil record dengan nilai field berada pada batas tertentu, maka digunakan statement BETWEEN atau NOT BETWEEN. Statement ini bergabung menjadi satu dengan klausa WHERE.
WHERE nama_field BETWEEN nilai_awal AND nilai_akhir

WHERE nama_field NOT BETWEEN nilai_awal AND nilai_akhir

IN dan NOT IN Untuk menampilkan record yang nilai fieldnya berada pada suatu kelompok nilai tertentu maka gunakan statement : IN atau NOT IN yang dipakai bersama klausa WHERE
WHERE nama_field IN (nilai1, nilai2, nilai3, ) WHERE nama_field NOT IN (nilai1, nilai2, nilai3, )

LIKE dan NOT LIKE


WHERE nama_field LIKE pola; WHERE nama_field NOT LIKE pola;

Untuk menampilkan record yang nilai fieldnya mengandung nilai tertentu, digunakan statement LIKE atau NOT LIKE yang diletakkan pada klausa WHERE. Pola adalah karekter atau string, yang dapat dipadukan dengan dua macam wild character, yaitu : % : mewakili 0,1 atau beberapa karakter _ : mewakili tempat sebuah karakter. Contoh : 1. %JO% String yang sesuai dengan %JO% adalah : JOHAN, IJO, PAIJO, JOJON

14

User, Privilege dan Role

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

2. _ELO_ String yang sesuai dengan _ELO_ adalah : BELOK, KELOK, BELON Field yang dapat menggunakan statement LIKE atau NOT LIKE adalah field yang bertipe Char, Varchar, atau Varchar2. IS NULL dan IS NOT NULL
WHERE nama_field IS NULL; WHERE nama_field IS NOT NULL;

Salah satu kegunaan nilai NULL adalah untuk merepresentasikan sebuah nilai yang belum ada. Dalam hal ini nilai field untuk sebuah record belum terisi. Sebuah nilai NULL tidak idektik dengan spasi atau 0. Untuk menampilkan record yang mempunyai nilai field NULL atau tidak, gunakan statement IS NULL atau IS NOT NULL yang dimasukkan dalam statement WHERE OPERATOR ARITMATIKA Ada kemungkinan, pada saat menampilkan nilai, kita ingin memodifikasi nilai yang ingin ditampilkan, misalnya kita ingin menampilkan harga barang, namun harga barang tersebut ditambah 500. Untuk memodifikasi nilai tersebut kita gunakan operator aritmatika yang diletakkan pada klausa SELECT.
SELECT nama_field1 operator nilai_tambahan, FROM nama_tabel [WHERE kondisi];

Operator yang digunakan adalah : *, /, +, dan Field yang bisa menggunakan operator ini harus bertipe numerik, date? Contoh : SQL > SELECT nim, spp + 50000 FROM keuangan;

Pengantar Dasar Database

15

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

1.8 JURNAL Studi Kasus Toko Buku


nama alamat Id_supplier

No_telp

supplier
1
jml_beli no_faktur supply Jml_jual

n
punya

jenis
Id_jenis

buku
n

punya

transaksi
m n
ditangani

Id_buku Tgl_transaksi kategori judul

1
stock

pengarang

pegawai

harga

id_pegawai alamat nama No_telp

16

User, Privilege dan Role

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

1. 2.

Berdasarkan ER Diagram diatas buatlah Data Definition Language (DDL)? Masukkan data-data berikut ke tabel jenis !
ID JENIS AG AK BH BI EK FL FI IT KATEGORI Agama Akuntansi Bahasa Biologi Ekonomi Filsafat Fisika Komputer dan Internet Manajemen Umum

MN UM

3.

Masukkan data-data berikut ke tabel supplier !


NAMA PT Sidogiri NO TELEPON 022-8768509 ALAMAT JL Ruwet Gg Buntet No.34 Bandung JL Badak Jawa No. 6 Jakarta JL Darmo No.7 Surabaya JL Sukabirus no.9 Bandung

ID SUPPLIER SP-001

SP-002 SP-003 SP-004

PT Moroseneng PT Suka-suka PT Sukabaca

021-8695465 031-4568698 022-9797966

Pengantar Dasar Database

17

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

4.
ID BUKU

Masukkan data-data berikut ini ke dalam table buku!


ID JENIS ID SUPPLIER

JUDUL 10 Langkah Belajar Logika & Algoritma Meng. Bahasa C & C++ 10 Mp.Lotus Notes 4.5 Kamus Bahasa Inggris 101 Tip & Trik Adobe Photoshop Cs 101 Tip & Trik Belajar Anatomi Manusia 101 Tip & Trik Ms Access Project 2003 & Sql Server 2000 Konsep-konsep Marketing RENUNGAN JUM'AT 11 Langkah Menjadi Sahabat Ana 12 Kreasi Logo Dengan Adobe Illustrator Cs2

PENGARANG

HARGA

STOCK

BK-001

IT

SP-002

Ema Utami

Rp27.375

10

BK-002

IT

SP-001

Jane Calabria Jubilee Enterprise

Rp9.180

34

BK-003

BH

SP-004

Rp15.980

65

BK-004

IT

SP-001

Gregorius Agung

Rp16.830

26

BK-005

BI

SP-001

Gregorius Agung

Rp19.380

84

BK-006

IT

SP-002

Hengky Alexander M.

Rp16.830

36

BK-007

MN

SP-002

Anwar Khaidir ABDURRAHMA N ARROISI

Rp12.580

26

BK-008

AG

SP-004

Rp31.280

BK-009

UM

SP-003

V. Dwiyani

Rp19.380

BK-010

IT

SP-002

Jubilee Enterprise

Rp27.880

88

BK-011

UM

SP-004

13 Cara Praktis Memetik Sukses

R. Herry Prasetyo

Rp16.830

25

18

User, Privilege dan Role

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

2 PENGANTAR DASAR DATABASE 2

Overview

Pengambilan data dari database dijalankan melalui sebuah queri atau select statement. Fungsionalitas - fungsionalitas dalam pembuatan queri ini sangat beragam dalam rangka membentuk informasi yang sesuai dengan keinginan developer.

Tujuan

4. 5. 6.

Mahasiswa dapat menggunakan fungsi fungsi untuk queri dengan menggunakan SQL * Plus. Mahasiswa dapat melakukan join terhadap beberapa tabel. Mahasiswa dapat membuat query bersarang dengan menggunakan SQL *Plus.

Pengantar Dasar Database 2

19

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

2.1 Fungsi-fungsi pada SQL


DUAL DUAL adalah sebuah built-in tabel yang disediakan oleh Oracle untuk memproses ekspresi aritmatika, logika, tanggal dan lain sebagainya. Contoh : SQL > SELECT 10 * 12 2 FROM DUAL; Menampilkan hasil operasi aritmatika 10 * 12 2 SQL > SELECT sysdate FROM DUAL; Menampilkan tanggal hari ini GROUP BY HAVING . GROUP BY . HAVING digunakan untuk menyeleksi himpunan yang dihitung berdasarkan sebuah fungsi agregasi (agregate function) sesuai dengan kondisi yang didefinisikan setelah HAVING. SELECT fungsi_agregasi, .. FROM nama_tabel GROUP BY nama_field [HAVING kondisi]; Aggregate Function AVG (Average / rata - rata) AVG berfungsi untuk mengembalikan nilai rata rata dari sekumpulan nilai yang terdapat pada sekumpulan nilai record pada sebuah field. Contoh : SQL > SELECT AVG(donasi) Donasi FROM keuangan; Donasi : merupakan alias dari hasil fungsi AVG(donasi) Queri diatas digunakan untuk menampilkan donasi rata rata mahasiswa yang terdapat di dalam tabel keuangan. MAX (Maximum) MAX berfungsi untuk mengembalikan nilai maksimum yang terdapat pada sekumpulan nilai pada sebuah field. Contoh :
20 User, Privilege dan Role

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

SQL > SELECT MAX(donasi) Donasi Terbesar FROM keuangan; Donasi Terbesar : merupakan alias dari hasil fungsi MAX(donasi) Queri diatas digunakan untuk menampilkan nilai donasi yang paling besar di dalam tabel keuangan. MIN (Minimum) MIN berfungsi untuk mengambil nilai minimum yang terdapat pada sekumpulan nilai pada sebuah field. Contoh : SQL > SELECT MIN(donasi) Donasi Terkecil FROM keuangan; Donasi Terkecil : merupakan alias dari hasil fungsi MIN(donasi) Queri diatas digunakan untuk menampilkan nilai donasi yang paling kecil di dalam tabel keuangan. SUM (jumlah / sigma) SUM berfungsi untuk menghitung jumlah total nilai pada sebuah kolom tertentu. Contoh : SQL > SELECT SUM(donasi) Total donasi FROM keuangan; Queri diatas digunakan untuk menampilkan total jumlah donasi untuk seluruh mahasiswa pada tabel keuangan. COUNT (banyak record) COUNT berfungsi untuk menghitung jumlah record yang memenuhi kondisi tertentu. Contoh : SQL > SELECT COUNT(*) Donasi Manajemen Informatika FROM keuangan WHERE nim like 3010%;

Pengantar Dasar Database 2

21

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

Queri diatas digunakan untuk menampilkan jumlah mahasiswa Manajemen Informatika yang memberikan donasi. Built-In Function Oracle Built-In Function adalah fungsi yang disediakan oleh Oracle agar dapat digunakan di dalam SQL *Plus maupun oleh program eksternal. Fungsi ini terdiri dari beberapa kelompok, yaitu : Fungsi Aritmatika Fungsi Kegunaan ABS Mengembalikan nilai absolute CEIL Mengembalikan bilangan bulat terbesar EXP Mengembalikan nilai pemangkatan bilangan natural (ex) FLOOR Mengembalikan bilangan bulat terkecil LN Mengembalikan nilai logaritma natural LOG Mengembalikan nilai logaritma MOD Menghasilkan sisa pembagian POWER Mengembalikan nilai pangkat ROUND Mengembalikan bilangan pembulatan SIGN Mengembalikan nilai positif, negative, atau nol. Nilai balikan sign ada tiga yaitu 1 jika x>0 0 jika x=0 -1 jika x<0
22

Contoh ABS(-10) = 10 CEIL(4.2) = 5 CEIL(-4.2) = -4 EXP(0) = 1 EXP(1) = 2.718 FLOOR(4.2) = 4 FLOOR(-4.2) = -5 LN(2) = 0.693147181 LOG(10,10) =1 MOD(4,2) = 0 MOD(7,2) = 1 POWER(2,3) = 8 ROUND(5.56,1) = 5.6 SIGN(-6) = -1 SIGN(3) = 1

User, Privilege dan Role

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

SIN, COS, TAN, SINH, COSH,TANH SQRT TRUNC

Fungsi trigonometri Mengembalikan nilai akar Mengembalikan nilai yang telah dipotong

SIN(0) = 0 COS(90) = 0 SQRT(16) = 4 TRUNC(5.671,2) = 5.67

Fungsi Karakter / String Fungsi Kegunaan ASCII(karakter) Memgembalikan nilai ASCII dari karakter CHR(nilai_ASCII) Memgembalikan karakter dari sebuah nilai ASCII CONCAT(teks1, Menggabungkan teks2) teks1 dan teks2 DECODE(field, kode_decode) Menggantikan nilai yang terdapat di dalam field dengan nilai lain.

Contoh ASCI(A) = 65 CHR(65) = A CONCAT (sate, ayam) = sate ayam DECODE(bulan,1, Januari, 2,Februari, 3,Maret, 4,April, 5,Mei, 6,Juni, Bulan Lain ) bulan GREATEST (3,10,15,4) = 15 INITCAP(pOLItek Nik tElkoM) = Politeknik Telkom INSTR (SQL n PL/SQL, SQL) = 1
23

GREATEST(nilai1, nilai2, nilai3, ) INITCAP(String)

INSTR (teks1, teks2)


Pengantar Dasar Database 2

Mengembalikan nilai terbesar dari sederetan nilai Mengembalikan string yang terdiri dari huruf kapital pada setiap kata. Mencari posisi teks2 yang terdapat di dalam teks1.

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

INSTR(teks1, teks2, i) INSTR(teks1, teks2, 1, n) LEAST(nila1, nilai2, nilai3,) LENGTH(String) LOWER(String) LPAD (teks1, n , teks2)

LTRIM (teks1, teks2)

REPLACE (teks1, teks2, teks3)

Pencarian dapat dimulai dari posisi ke-i. n menyatakan pengulangan yang ken kali dari teks2 yang terdapat di dalam teks1. Mengembalikan nilai terkecil dari sederetan nilai Mengembalikan panjang String Mengubah String menjadi huruf kecil semuanya Menyisipkan karakter teks2 ke dalam teks1 untuk karakter kosong sepanjang n disebelah kiri teks1 Menghapus karakterkarakter pada bagian kiri teks1 sehingga tidak diawali dengan sembarang karakter pada teks2. Default teks2 adalah spasi Menggantikan kemunculan karakter teks2 di dalam teks1 dengan teks3. Bila teks3 tidak disebutkan maka teks2 pada teks1 akan dihapus karena default teks3 null

INSTR (SQL n PL/SQL, SQL, 4) = 10 INSTR (SQL n PL/SQL, SQL,1,2) = 10 LEAST(2,2,5,1,6) =1 LENGTH(1233) =4 LOWER (PoLTeK) = poltek LPAD (Oracle, 10 , /) = ////Oracle

LTRIM (xxxOracle,x) = Oracle

REPLACE (siswa,a,i) = siswi

24

User, Privilege dan Role

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

RPAD (teks1, n, teks2)

RTRIM (teks1, teks2)

SUBSTR(Teks,i) SUBSTR(Teks, i, n)

TRANSLATE (teks1, teks2, teks3)

UPER(String)

Menyisipkan karakter teks2 ke dalam teks1 untuk karakter kosong sepanjang n disebelah kanan teks1 Menghapus karakterkarakter pada bagian kanan teks1 sehingga tidak diakhiri dengan sembarang karakter pada teks2. Default teks2 adalah spasi Mengambil karakter pada string teks dimulai dari posisi ke-i (dari kiri ke kanan) sebanyak n buah. Jika i bernilai negatif, maka posisi ke-i dimulai dari kanan ke kiri Menggantikan kemunculan karakter teks2 di dalam teks1 dengan teks3. perbedaannya dengan REPLACE adalah karakter yang digantikan dilakukan secara individual Mengubah String menjadi huruf besar semuanya

RPAD (Oracle, 10 , /) = Oracle////

RTRIM ('123000', '0') = 123

SUBSTR(ABCD, 2) = BCD SUBSTR (ABCD, -3, 2 ) = BC

UPER(PoLTeK) = POLTEK

Pengantar Dasar Database 2

25

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

Fungsi Tanggal Fungsi ADD_MONTHS (tanggal, n)

Kegunaan Menambah atau mengurangi tanggal terhadap n

Contoh sysdate =06-JUL-05 ADD_MONTHS (sysdate, 2) = 08-JUL-05 ADD_MONTHS (sysdate, -2) = 04-JUL-05 LAST_DAY (sysdate) = 31-JUL-05 MONTHS_BETW EEN (01-JUL-05, 14-MAR-05) = 3.58064516129032 NEXT_DAY() = 07-JUL-05 TO_CHAR (sysdate, DD-MM-YYYY) = 06-07-2006

LAST_DAY (tanggal) MONTHS_BETW EEN (tanggal 2, tanggal1)

Menghasilkan tanggal terakhir pada sebuah bulan Mengahsilkan selisih tanggal2 dan tanggal1 dalam satuan bulan

NEXT_DAY() TO_CHAR (tanggal, format)

Mengembalikan tanggal berikutnya Mengubah tanggal menjadi bentuk karakter sesuai dengan format. Sehingga dapat ditampilkan sebagai string

26

User, Privilege dan Role

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

Join Tabel
JOIN adalah menggabungkan beberapa tabel dangan cara mengakses setiap tabel secara individu berdasarkan kondisi yang diberikan, kemudian hasilnya digabungkan. Syarat penggunaan JOIN adalah harus terdapat hubungan / keterkaitan diantara tabel tabel yang dijadikan sumber dari kolom kolom yang hendak di join dan ditampilkan. Keterkaitan diatara tabel tabel berupa kolom kolom yang memiliki nilai dan tipe data yang sama. Join dimungkinkan dikarenakan oleh model relasional, begitu juga sebaliknya, join dibutuhkan dikarenakan model relational. Join sebetulnya secara umum terbagi dalam 3 jenis: cartesian product, join condition dan outer join. Cartessian Product Cartessian product merupakan himpunan dari hasil kombinasi yang memungkinkan dari baris-baris data dari 2 tabel atau lebih. Cartessian product merupakan join tanpa menggunakan join condition. Dengan demikian, sebuah baris pada tabel yang satu akan digabungkan dengan semua baris pada tabel yang lain, seterusnya sehingga jumlah baris hasil query menjadi ( n1* n2 *...*nn ) dengan ni adalah jumlah baris pada tabel ke-i. Jumlah baris hasil query yang merupakan hasil perkalian dari jumlah baris dari tabel-tabel inilah yang disebut dengan produk kartesian (cartesian product). Contoh : Misalkan ilustrasi sebagai berikut Tabel A A1 1 2 A2 10 100 Tabel B B1 2 3 B2 4 9

Jika kita melakukan operasi seperti ini: SELECT * FROM A, B; maka akan dihasilkan Cartesian Product.

Pengantar Dasar Database 2

27

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

A1 1 1 2 2

Tabel Produk Cartesian A2 B1 B2 10 10 100 100 2 3 2 3 4 9 4 9

Untuk menghindari hal seperti ini, paling tidak terdapat sebuah join condition pada query yang melakukan join terhadap kedua tabel tersebut dengan catatan join condition tersebut valid. Join Condition Join condition menspesifikasikan kondisi join dari beberapa tabel. Seperti telah disinggung sebelumnya, join biasanya selalu melibatkan kolom-kolom yang terdapat pada tabel yang terlibat join yang memiliki kesamaan dan keserupaan maksud representasi dari kolom tersebut. Equjoin/simple join/inner join adalah join yang menggunakan operator sama dengan (=) pada join condition-nya. Contoh : Misalnya jika kita melakukan operasi SELECT * FROM A, B WHERE A.A1 = B.B1 Maka akan dihasilkan sbb: A1 A2 2 100

B1 2

B2 4

Dari hasil operasi join tersebut dapat terlihat bahwa hanya nilai-nilai dari field A1 pada tabel A dan nilai-nilai field B1 pada tabel B yang bersesuaian yang ditampilkan. Dalam skenario ini adalah A1=B1=2. Non-Equjoin adalah sebuah join yang menggunakan join condition yang berisi operator selain sama dengan (=) misalnya operator BETWEEN...AND Self Join adalah query yang menggabungkan sebuah tabel dengan dirinya sendiri. Tabel tersebut muncul dua kali pada klausa from dan
28 User, Privilege dan Role

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

masing-masing harus diikuti dengan nama aliasnya. Penggunaan tabel alias ini wajib dilakukan untuk menghindari ambiguous karena semua nama kolom pada tabel pertama ada juga pada tabel kedua. Contoh: Misalkan terdapat tabel C sebagai berikut Tabel C C1 C2 C3 C4 1 1 2 2 10 10 100 100 2 3 2 3 4 9 4 9

Jika dilakukan perintah: SELECT a.C1,a.C2,a.C3,a.C4 FROM C a, C b WHERE a.C1=b.C3 Dari skenario ini dapat dibayangkan kita memiliki dua buah tabel yang identik yaitu tabel alias a dan tabel alias b. Dimana operasi yang dilakukan dapat digambarkan sebagai berikut: Tabel C C1 1 1 2 2 Tabel Alias a C1 1 1 2 2 C2 10 10 100 100 C3 2 3 2 3 C4 4 9 4 9 C1 1 1 2 2 C2 10 10 100 100 C2 10 10 100 100 C3 2 3 2 3 C4 4 9 4 9 Tabel Alias b C3 2 3 2 3 C4 4 9 4 9
29

Pengantar Dasar Database 2

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

Maka akan dihasilkan seperti ini C1 C2 2 2 2 2 100 100 100 100

C3 2 3 2 3

C4 4 9 4 9

Outer Join Outer join biasanya digunakan ketika kita ingin baris data dari tabel yang pertama, atau dari tabel yang kedua atau dari keduanya tetap ditampilkan meskipun tidak terdapat pasangan baris data tersebut dari tabel lain pada kondisi join-nya. Misalkan tabel A di-join dengan tabel B. Semua baris data pada tabel A ingin ditampilkan walaupun tidak memenuhi join condition. Untuk itu, operator outer join (+) pada join condition harus disertakan setelah kolom-kolom tabel B. Penulisan operator join dapat ditulis sebagai berikut. A.col_name = B.col_name(+) Dalam hal ini, tabel B akan memberikan nilai NULL untuk setiap baris pada tabel A jika join condition tidak terpenuhi. Contoh : Misalnya jika kita melakukan operasi SELECT * FROM A, B WHERE A.A1 = B.B1(+) maka akan dihasilkan A1 A2 B1 B2 1 2 10 100 NULL 2 NULL 4

Pada outer join ada beberapa aturan yang perlu diperhatikan : Operator + hanya boleh ada pada klausa WHERE dan hanya dapat dikenakan pada kolom dari tabel atau view.

30

User, Privilege dan Role

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

Jika terdapat lebih dari satu join condition, operator + harus dikenakan pada semua join condition tersebut. Jika tidak, hasilnya dengan inner join. Jika ada kondisi yang mengandung kolom tabel B dan kolom tersebut dibandingkan dengan sebuah nilai konstan, operator + haru s dikenakan pada kolom tersebut. Misalkan: SELECT * FROM A, B WHERE A.A1 = B.B1(+) and B.B1(+) > 0; Kondisi yang mengandung operator + tidak boleh dikombinasikan dengan logika OR dan IN. Kolom dengan operator + tidak boleh dibandingkan dengan hasil subquery. Misalkan: SELECT * FROM A, B WHERE A.A1 = B.B1(+) and B.B1(+) > (SELECT C4 FROM C WHERE C4=2); Untuk query yang menggunakan outer join dan melibatkan lebih dari dua tabel, misalnya tabel A, B, dan C, maka tabel yang satu hanya dapat men-generate tabel NULL untuk satu tabel. Dengan demikian, operator + tidak dapat dikenakan pada kolom tabel B untuk dua buah join condition: A join B dan C join B. Misalkan: SELECT * FROM A, B WHERE A.A1 = B.B1(+) and C.C1=B.B1(+) ; Kesimpulan: Operasi join digunakan untuk menampilkan data dari beberapa tabel. Ada beberapa macam operasi join, antara lain : Operator Join Cartesian Product

Deskripsi Menampilkan data dari beberapa tabel tanpa kondisi tertentu. Menampilkan data dari beberapa tabel dengan kondisi tertentu Menampilkan data dari beberapa tabel

Contoh SELECT NAMA_PEGAWAI, NAMA_DEPARTEMEN FROM PEGAWAI P, DEPARTEMEN D SELECT NAMA_PEGAWAI, NAMA_DEPARTEMEN FROM PEGAWAI P, DEPARTEMEN D WHERE P.NO_DEP= D.NO_DEPARTEMEN; SELECT P. NAMA_PEGAWAI, M. NAMA_PEGAWAI AS
31

Join Condition

Outer Join

Pengantar Dasar Database 2

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

dimana kolom yang diacu tidak memiliki anggota

MANAJER FROM PEGAWAI P, PEGAWAI M WHERE P.NO_MANAJER = M.NO_PEGAWAI(+);

Query Bersarang
Pada kondisi tertentu, terkadang beberapa query membutuhkan nilai yang dihasilkannya dan digunakan sebagai kondisi pembandingan (dalam klausa WHERE sebagai contoh). Query tersebut dapat diformulasikan menggunakan nested query (query bersarang). Query bersarang akan melibatkan query dan subquery. Subquery merupakan statement SELECT yang bersarang didalam klausa WHERE dari statement SELECT yang lain. Meskipun jarang, tetapi subquery juga bisa terdapat pada statement DML yang lain seperti INSERT, UPDATE ataupun DELETE. Secara umum, sintaks dari NESTED QUERY adalah: SELECT [DISTINCT] select_list FROM table1, table_2 [,table_3 ] WHERE {expression {[NOT] IN | comparison operator} | [NOT] EXIST } ( SELECT [DISTINCT] subquery_select_list FROM table_list WHERE search_conditions ) Yang dilakukan oleh subquery adalah menetapkan kondisi pencarian pada klausa WHERE dalam beberapa cara: Menghasilkan list untuk klausa IN Mengembalikan sebuah nilai yang dapat digunakan oleh operator Mengembalikan nilai boolean (true atau false)

32

User, Privilege dan Role

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

Didalam sebuah SELECT statement, subquery boleh berada pada klausaklausa berikut ini: Klausa WHERE Klausa HAVING Klausa FROM Klausa START WITH (pada query hirarki) Sebagai catatan, subquery pada klausa WHERE sering disebut sebagai nested subquery. Sedangkan subquery pada klausa FROM sering disebut dengan istilah inline view. Banyak permasalahan yang dapat dipecahkan dengan menggunakan subquery. Daftar berikut ini menunjukkan beberapa kegunaan subquery: Memberikan nilai sebagai kondisi di dalam klausa WHERE, HAVING, dan START WITH (subquery pada SELECT, UPDATE, dan INSERT statement). Menentukan sekumpulan baris data untuk kebutuhan membuat view (subquery pada CREATE VIEW statement). Mendefinisikan sebuah tabel (inline view) yang digunakan oleh query utama (subquery pada klausa FROM dari sebuah SELECT statement). Menentukan sekumpulan baris data yang dimasukkan ke dalam tabel tujuan, baik ke dalam tabel yang sudah ada (subquery pada INSERT statement) maupun pada saat yang bersamaan dengan pembuatan tabel (subquery pada CREATE TABLE statement). Mendapatkan satu nilai atau lebhih yang digunakan untuk mengubah data yang sudah ada (subquery pada UPDATE statement). Klausa IN Subquery yang dilakukan menggunakan klausa IN akan dilakukan pengecekan apakah suatu nilai ada atau tidak dalam hasil dari subquery. Contoh : SELECT A1 FROM A WHERE A1 IN (SELECT C3 FROM C) Hasilnya sbb: A1 A2 2 100

Pengantar Dasar Database 2

33

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

Klausa ALL Membandingkan nilai dengan setiap nilai yang dikembalikan oleh query tersarang. Kondisi perbandingan akan bernilai benar jika semua nilai yang dikembalikan oleh subquery memenuhi kondisi tersebut. Contoh : SELECT * FROM A WHERE A1 < ALL(SELECT C3 FROM C) Hasilnya sbb: A1 A2 1 10 Klausa ANY/SOME Membandingkan nilai dengan salah satu nilai yang dikembalikan oleh query tersarang. Kondisi perbandingan akan bernilai benar jika salah satu nilai yang dikembalikan oleh subquery memenuhi kondisi tersebut dan akan bernilai salah atau tidak terpenuhi jika subquery tidak mengembalikan nilai apapun (tabel kosong). Contoh : SELECT * FROM A WHERE A1 < ANY(SELECT C3 FROM C) Hasilnya sbb: A1 A2 1 10 2 100 Klausa [NOT] EXISTS Klausa EXISTS digunakan untuk melakukan pengecekan apakah hasil dari nested query yang berkorelasi menghasilkan baris data atau tidak. Operator exists akan menghasilkan nilai TRUE jika subquery yang mengikutinya menghasilkan paling tidak satu baris data. Contoh : SELECT * FROM A WHERE EXISTS (SELECT C3 FROM C) Hasilnya sbb: A1 A2 1 10 2 100

34

User, Privilege dan Role

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

2.2 JURNAL
1. 2. 3. Buatlah query untuk menampilkan data-data supplier( id supplier, nama) dan jumlah jenis buku yg disupplay oleh supplier ybs! Buatlah query untuk menampilkan data-data buku beserta nama supplier dan jenis bukunya! Jelaskan dan tuliskan output query dibawah ini, jika query tersebut salah maka buatlah query yang benar: select a.id_buku, (select kategori from jenis where id_jenis=a.id_jenis) as kategori, (select nama from jenis where id_supplier=a.id_supplier) as supplier, a.judul from buku a where stock > 50; Jelaskan dan tuliskan output query dibawah ini, jika query tersebut salah maka buatlah query yang benar: select a.id_jenis, a.kategori, sum(b.stock) from jenis a, buku b where a.id_jenis=id_supplier;

4.

Pengantar Dasar Database 2

35

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

INSTALASI ORACLE

Overview

Sebelum menggunakan DBMS hal pertama yang harus kita lakukan tentu saja adalah melakukan instalasi dan konfigurasi DBMS. Hal ini juga berlaku ketika kita akan menggunakan Oracle, ada beberapa hal yang harus diperhatikan baik sebelum maupun pada saat instalasi dan konfigurasi. Pada bab ini akan dibahas mengenai persyaratan dan cara instalasi dan konfigurasi oracle 10g.

Tujuan

1. 2.

Mahasiswa mengerti mengenai persyaratan sistem yang harus dipersiapkan untuk instalasi oracle. Mahasiswa memahami tetang cara konfigurasi Oracle 10g.

36

User, Privilege dan Role

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

3.1 Pendahuluan
Secara umum, guide ini berlaku untuk semua instalasi Oracle. Di semua OS baik Windows maupun Unix (Sun Solaris, IBM AIX, HP UX, Linux, dan lainlain) proses instalasi itu sama, hanya sedikit berbeda di pre-installation requisite-nya.

3.2 Hal-hal yang perlu diperhatikan sebelum proses instalasi


Secara umum, berikut ini spesifikasi yang diminta oleh instalasi tipe ini. Lebih detail tentang spesifikasi komputer yang bisa di-install, lihat dokumentasi (installation guide) yang ada di paket software yang telah di download; saya cantumkan juga direferensi. Dalam contoh ini instalasi dilakukan pada windows XP service pack 2. Hardware: Physical memory (RAM) : 256 MB minimum, 512 MB recommended Virtual memory: dua kali RAM Disk space: kira-kira 5 G Video (monitor) adapter: 256 colors Processor : 550 MHz minimum Operating system (OS): Windows 2000 with service pack 1 or later. All editions, including Terminal Services and Microsoft Windows 2000 MultiLanguage Edition (MLE) Windows Server 2003 - all editions Windows XP Professional Windows NT is not supported.
Instalasi Oracle 37

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

Pilihan instalasi Database Oracle 10g : 1. Enterprise Editon : Merupakan pilihan instalasi yang membutuhkan lisensi. Selain fitur-fitur standar yang dimiliki oracle, konfigurasi database dan management tool serta fitur untuk data warehousing dan transaction processing disertakan dalam pilihan instalasi ini. Standard Edition : melakukan instalasi management tool, distribusi penuh, replikasi, fitur-fitur untuk web, dan fasilitas-fasilitas untuk membangun aplikasi. Personal Edition : melakukan instalasi fitur yang sama seperti pada Enterprise Edition tetapi hanya mendukung single user development dan deployment environment. Custom : melakukan instalasi dengan cara memilih fitur-fitur yang dibutuhkan secara manual.

2.

3.

4.

38

User, Privilege dan Role

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

Hal-hal yang perlu diperhatikan pada saat instalasi Oracle 10g: Ketika setup meminta memasukkan password ada beberapa hal yang perlu diperhatikan antara lain: Pastikan panjang password 4 sampai dengan 30 karakter. Sertakan database character set seperti underscore( _ ), dollar ( $ ), dan pound sign ( # ) karena akan dapat memperkuat password. Jangan memulai password dengan karakter numeric Jangan menggunakan username untuk password. Jangan menggunakan istilah-istilah yang sudah ada di oracle untuk password. Jangan menggunakan password change_on_install untuk account SYS. Jangan mengunakan password manager untuk account SYSTEM. Jangan menggunakan password sysman untuk account SYSMAN. Jangan menggunakan password dbsnmp untuk account DBSNMP. Pastikan password terdiri dari punctuation mark character. karakter alphabet, numeric, dan

Jangan menggunakan kata-kata sederhana untuk password seperti welcome, account, database, user, dll. Jangan mengubah-ubah setingan Java Runtime Environment (JRE) yang digunakan oleh oracle. Jika tipe instalasi yang anda pilih mengharuskan untuk melakukan konfigurasi Database Configuration Assistant dan Oracle Net Configuration Assistant secara manual anda harus mendefinisikan secara detail mengenai konfigurasi database dan jaringan.

Instalasi Oracle

39

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

3.3 Langkah-langkah instalasi


1. Jalankan command setup.exe yang ada di paket software yang telah di download. Kemudian muncul Install wizard (GUI). Lihat gambarnya di sini

Pilih option Basic Installation Masukkan directory Oracle Home Location Pilih Installation Type Jangan pilih Create Starter Database Klik button Next

40

User, Privilege dan Role

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

2. Oracle installer akan mengecek OS kita, apakah requirement-nya dipenuhi atau tidak. Lihat gambarnya di sini

Pastikan semua statusnya Succeeded. Kalau ada warning, atau statusnya bukan Succeed, bereskan dulu OS-nya. Kemudian klik button Next

Instalasi Oracle

41

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

3. Dalam proses installasi, Oracle akan menjalankan program java. Bila firewall PC anda memblock java, dan muncul alert Windows Security Alert, klik tombol Unblock. Lihat gambarnya di bawah ini

4. Muncul summary komponen Oracle Database 10g yang siap kita install. Kemudian klik tombol Install. Lihat gambarnya di bawah ini

42

User, Privilege dan Role

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

5.

Installation progress. Lihat gambarnya di bawah ini

Instalasi Oracle

43

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

6. Setelah itu akan dilakukan konfigurasi tambahan oleh Oracle Installer. Kita cukup perhatikan saja. Setelah konfigurasi selesai, klik tombol Next. Kadang-kadang kita tidak perlu kilk tombol Next tersebut karena secara otomatis wizard menuju ke berikutnya. Lihat gambarnya di bawah ini

44

User, Privilege dan Role

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

7. Akhirnya instalasi selesai. Setelah itu klik tombol Exit. Lihat gambarnya di bawah ini

3.4 JURNAL
1. Lakukan instalasi Oracle 10g berdasarkan langkah-langkah yang telah dijelaskan diatas, kemudian masuk ke SQL Plus dan login sebagai user SYSTEM! Jelaskan perbedaan antara Oracle 10g dan Oracle 10g XE!

2.

Instalasi Oracle

45

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

PENGENALAN PL/SQL DAN TIPE DATA

Overview

PL/SQL mengkombinasikan kemampuan manipulasi data SQL dengan kemampuan bahasa prosedural, dengan kata lain PL/SQL adalah SQL ditambah Procedural Language. PL/SQL merupakan bahasa berstruktur blok yang berupa fungsi, prosedur, dan blok anonim. Suatu blok biasanya ditujukan untuk menyelesaikan suatu tugas tertentu dan suatu blok boleh memiliki subblok (nested). Struktur blok PL/SQLitu terdiri dari bagian deklarasi, bagian kode program, dan bagian eksepsi untuk penanganan error.

Tujuan

1. Mengerti esensi penggunaan Percabangan (pemilihan/kodisional) dalam PL/SQL. 2. Mengerti esensi penggunaan Pengulangan (Looping/Iterasi) dalam PL/SQL. 3. Mengerti esensi penggunaan Sekuensial dalam PL/SQL. 4. Memahami bentuk umum Percabangan, Pengulangan dan Sekuensial. 5. Mampu memecahkan masalah sederhana dengan menggunakan Percabangan atau Pengulangan atau Sekuensial dan mengimplementasikan ke dalam PL/SQL.

46

User, Privilege dan Role

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

4.1 Pendahuluan
Karena pada SQL tidak mendukung pemrograman secara prosedural, maka dikembangkanlah PL/SQL. PL merupakan kependekan dari Procedural Language. PL/SQL mengkombinasikan kekuatan dan kefleksibilitasan SQL dengan pemrograman prosedural. PL/SQL memiliki keistimewaan sebagai berikut: Programmer dapat mendeklarasikan variable untuk digunakan selama pemrosesan statement. Programmer dapat menggunakan penanganan kesalahan untuk mencegah kegagalan program. Programmer dapat menulis program yang interaktif yang menerima input dari user. Programmer dapat membagi fungsi-fungsi ke dalam blok-blok lojik dari kode. Teknik pemrograman secara modular ini mendukung fleksibilitas selama pengembangan aplikasi. Statement SQL dapat diproses secara simultan untuk performansi keseluruhan yang lebih baik.

4.2 Variabel dan Tipe Data


4.2.1 Deklarasi Variabel dan Tipe Data
Bagian deklarasi variabel di antara kata kunci DECLARE dan BEGIN. Penamaan variabel tidal bersifat case sensitive. Tipe data variabel dapat berupa salah satu tipe data database Oracle atau tipe data built in PL/SQL. Sintaks: Identifier typedata [(presisi, skala)] [NOT NULL] [:=iekspresi];

Pengenalan PL/SQL dan Tipe Data

47

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

Dimana ekspresi bisa merupakan literal, variabel yang lain atau sebuah ekspresi yang terdiri atas operator dan fungsi. Jika nilai inisial/awal tidak diberikan, maka suatu variabel akan diberikan nilai NULL untuk nilai inisialnya. Contoh untuk data karakter: alamat VARCHAR2(20); kodepos CHAR(5) := 40257; Contoh untuk tipe data number: gaji NUMBER(7,2); jumlah NUMBER NOT NULL := 0; Contoh untuk tipe data tanggal: alamat VARCHAR2(20); kodepos CHAR(5) := 40257; Tanda := dipakai untuk menugaskan ( assign) nilai kepada suatu variabel. Nilai inisial/awal atau disebut juga nilai default adalah nilai yang diberikan pada saat awal variabel tersebut dideklarasikan. Tipe Data pada PL/SQL Selain tipe data yang ada di Oracle SQL, PL/SQL menyediakan beberapa tambahan tipe data yang dapat dideklarasikan sebagai berikut: Tipe Data BOOLEAN DATE NUMBER [(p [,s])] Keterangan Data lojikal dengan nilai TRUE atau FALSE. Data tanggal waktu. Nilai yang valid adalah antara 1 Januari 4712 SM sampai dengan 31 Desember 9999. Tipe data numerik dengan p angka penting dan sejumlah s angka penting di belakang koma. Nilai p adalah integer dengan nilai maksimal 38 dan nilai s berada pada rentang -84 sampai dengan 127. Nilai s negatif berarti pembulatan sampai dengan 10 s terdekat. Turunan dari NUMBER. Presisi sampai dengan 38 digit. Sama dengan FLOAT. Turunan dari number. Presisi sampai dengan 18 digit. Sama dengan NUMBER [(p [,s])]. Sama dengan NUMBER [(p [,s])]. Sama dengan NUMBER [(p [,s])]. Sama dengan NUMBER [(n,0)].
User, Privilege dan Role

FLOAT DOUBLE PRECISION REAL DEC [(p [,s])] DECIMAL [( p [,s])] NUMERIC [(p [,s])] INTEGER [(n)]
48

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

INT [(n)] SMALLINT [(n)] BINARY_INTEGER NATURAL NATURALN POSITIVE POSITIVEN SIGNTYPE PLS_INTEGER VARCHAR2(n) VARCHAR(n) CHAR [(n)] STRING(n) CHARACTER [(n)] LONG [(n)] NCHAR [(n)]

NVARCHAR2(n)

RAW(n)

Sama dengan NUMBER [(n,0)]. Sama dengan NUMBER [(n,0)]. Tipe variabel ini digunakan menyimpan nilai mulai dari -2.147.483.647 s/d 2.147.483.647 Bagian dari binary integer, mampu menyimpan mulai dari 0 s/d 2.147.483.647. Bagian dari binary integer, mampu menyimpan mulai dari 0 s/d 2.147.483.647. Tipe data ini tidak boleh bernilai NULL. Bagian dari binary integer, mampu menyimpan mulai dari 1 s/d 2.147.483.647 Bilangan integer dengan rentang nilai 1 sampai dengan 2147483647. Tipe data ini tidak boleh bernilai NULL. Tipe data bilangan yang bernilai -1, 0 atau 1. Bilangan integer dengan rentang nilai -2147483647 sampai 2147483647. Data karakter dengan panjang tidak tetap. Nilai n minimum sama dengan 1 dan maksimum sama dengan 32767 byte. Sama dengan VARCHAR2(n). Data karakter dengan panjang tetap sebesar n byte. Nilai n maksimum adalah 32767. Nilai n minimum dan juga nilai default adalah 1. Sama dengan VARCHAR2(n). Sama dengan CHAR(n). Data karakter dengan panjang tidak tetap. Nilai n maksimum sama dengan 32760 byte. Data karakter dengan panjang tetap. Panjang maksimum sama dengan 32767 byte. maksimum bergantung pada national character set yang dipakai. Nilai default adalah 1. Data karakter dengan panjang tidak tetap. Panjang maksimum sama dengan 32767 byte. Nilai n maksimum bergantung pada national character set yang dipakai. Data binary dengan panjang tidak tetap. Nilai n
49

Pengenalan PL/SQL dan Tipe Data

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

LONG RAW [(n)] ROWID

UROWID [(n)]

BFILE BLOB CLOB NCLOB %TYPE %ROWTYPE

maksimum sama dengan 32767 byte. Data binary dengan panjang tidak tetap. Nilai n maksimum sama dengan 32760 byte. Identitas baris pada suatu tabel-index yang dinyatakan dengan string heksa desimal. Identitas tersebut menunjukkan posisi baris data. Tipe data ini merupakan balikan dari kolom palsu ROWID. Identitas baris pada suatu tabel-index yang dinyatakan dengan string heksa desimal. Nilai n adalah ukuran kolom UROWID. Nilai n maksimum adalah 4000 byte. Tipe data large object untuk data file. Tipe data large object untuk karakter binary. Tipe data large object untuk karakter satu byte. Tipe data large object untuk karakter multi byte. Untuk mendeklarasikan variabel dengan tipe data yang sesuai dengan suatu kolom pada suatu tabel. Untuk mendeklarasikan variabel dengan tipe data yang sesuai dengan semua kolom pada suatu tabel. Biasanya untuk menampung suatu cursor.

4.2.2 Pendeklarasian Konstanta


Sintaks: Identifier CONSTANT typedate[(presisi,skala)] := ekspresi; Contoh: pi CONSTANT NUMBER(9,2):=3.14; Atribut Variabel Jika menggunakan variabel yang menampung nilai dari suatu kolom dari suatu tabel, maka sebaiknya menggunakan atribut variabel. Hal ini untuk menghindari terjadinya kerepotan seperti: user harus melihat struktur tabel yang terkait terlebih dahulu untuk memberikan tipe data yang cocok. Selain itu jika terjadi tipe data kolom maka deklarasi variabel tersebut harus diubah juga.

50

User, Privilege dan Role

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

Atribut variabel berfungsi untuk memberikan tipe data yang sama dengan tipe data suatu kolom dari suatu tabel. Atribut variabel juga dapat digunakan untuk tipe data record. Dengan demikian, atribut variabel ada dua. Untuk atribut kolom digunakan %TYPE, sedangkan untuk atribut record gunakan %ROWTYPE. Cara penggunaannya ditunjukkan berikut ini: [schema.]table.column%TYPE; <cursor_name|[schema.]table>%ROWTYPE; Sebagai contoh, varaiabel v_nama mempunyai tipe data yang sama dengan kolom nama pada tabel pegawai. Deklarasi variabel tersebut dapat dituliskan seperti ini: v_nama mahasiswa.nama%type; Selain dapat digunakan untuk variabel record, atribut %ROWTYPE bisa dipakai pada variabel cursor. Dan untuk mengakses baris-baris pada cursor atau record tersebut digunakan format nama_var.COLUMN. Contoh: pgw_rec pgw_cur%rowtype; Menugaskan Nilai ke Dalam Variabel Sintaks: identifier := ekspresi; Dimana identifier adalah nama variabel target, atau field untuk menerima nilai dari ekspresi. Sedang ekspresi mungkin berupa literal, nama variabel lain yang sudah ada, atau suatu ekspresi yang cukup kompleks yang diperlukan untuk menentukan suatu nilai yang akan ditugaskan. Contoh: v_jumlah := 0; Operator pada PL/SQL Operator-operator SQL statement juga berlaku pada PL/SQL. Berikut ini prioritas dari semua operator tersebut ditampilkan pada tabel di bawah ini dengan prioritas yang lebih tinggi ditempatkan pada baris yang lebih atas: Operator **, NOT +, *, / +, -, || =, <, >, <=, >=, <>, !=, IS Operasi Pemangkatan dan negasi logika Tanda positif dan negatif Perkalian dan pembagian Penjumlahan., pengurangan konkatinasi Perbandingan

dan

Pengenalan PL/SQL dan Tipe Data

51

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

NULL, LIKE, BETWEEN, IN AND OR

Konjungsi inklusi

Mencetak Keluaran pada Layar SQL*Plus Untuk mencetak sebuah nilai pada layar SQL*Plus dapat digunakan procedure PUT, PUT_LINE dan NEW_LINE yang terdapat dalam package DBMS_OUTPUT. Package ini merupakan salah satu package yang telah built in pada Oracle. Procedure PUT dan PUT_LINE membutuhkan sebuah argumen berupa NUMBER, VARCHAR2 ataupun DATE. Kedua procedure tersebut akan menyimpan argumen tersebut ke dalam buffer dan akan ditampilkan di layar bila procedure tersebut dijalankan. Procedure NEW_LINE tidak membutuhkan argumen apapun. Procedure ini berfungsi untuk menyimpan karakter new line ke dalam buffer. Namun sebelum procedure tersebut dijalankan, harus dijalankan perintah SET SERVEROUTPUT ON untuk mengaktifkan pencetakan ke layar dengan menggunakan procedure yang ada pada package DBMS_OUTPUT. SET SERVEROUTPUT <ON|OFF> [SIZE n] [FOR[MAT] <WRA[PPED] | WOR[D_WAPPED] | TRU[NCATED]] Pilihan SIZE n bertujuan untuk menentukan jumlah byte maksimum yang dapat ditampung oleh buffer. Nilai n ini tidak boleh kurang dari 2000 dan tidak boleh lebih dari 1.000.000. Nilai defaultnya 2000. pilihan format bertujuan untuk menetukan format keluaran. WRAPPED akan melanjutkan bagian yang tidak mencukupi dari suatu baris ke baris yang baru. Pilihan TRUNCATE akan memotong bagian yang melampaui ukuran satu baris tepat pada karakter yang berada setelah batas maksimum baris. Ukuran satu baris, yakni jumlah karakter maksimum dalam satu baris, ditentukan oleh sistem variabel LINESIZE.

52

User, Privilege dan Role

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

4.3 Struktur Blok PL/SQL


Terdapat dua macam blok pada PL/SQL yaitu blok bernama dan blok tidak bernama (anonymous block), dimana blok-blok ini akan membentuk suatu unit PL/SQL. Blok-blok yang bernama bisa disimpan dan dapat berupa procedure, function serta trigger. Sedangkan blok yang tidak bernama tidak dapat disimpan dalam database kecuali jika dipakai sebagai subblok dalam sebuah unit PL/SQL bernama. Secara umum, satu blok PL/SQL yang lengkap terdiri atas tiga bagian, yaitu: declaration section (bagian deklarasi variabel), executable section (bagian pengeksekusian) serta exception section (bagian penanganan kesalahan). Berikut ini penggambarannya: [DECLARE ...] BEGIN ... [EXCEPTION ...] END; Dengan declaration dan exception bersifat opsional, maka satu bok PL/SQL paling tidak terdiri atas executable section. Contoh: begin null; end; Catatan: Null dipakai untuk menyatakan nilai yang tidak diketahui, sehingga untuk contoh di atas, blok PL/SQL tersebut tidak melakukan proses apapun. EXCEPTION SECTION EXECUTABLE SECTION DECLARATION SECTION

Pengenalan PL/SQL dan Tipe Data

53

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

1) DECLARATION SECTION Digunakan untuk mendefinisikan atau mendeklarasikan variabel, konstanta, cursor dan seluruh exception yang didefinisikan oleh user yang akan digunakan pada bagian eksekusi. Penulisan blok ini dimulai dengan menulis DECLARE. Contoh: declare v_nama mahasiswa.nama%type; v_nim mahasiswa.nim%type;

2) EXECUTABLE SECTION Digunakan untuk mengeksekusi atau menjalankan blok perintah PL/SQL seperti pengulangan, percabangan, perintah SQL dan perintah cursor. Berisi statement SQL untuk memanipulasi data pada basis data dan statement PL/SQL untuk memanipulasi data dalam blok. Contoh: declare v_nama mahasiswa.nama%type; v_nim mahasiswa.nim%type; begin select nim, nama into v_nim, v_nama from pegawai where nim=30108001 dbms_output.put_line(v_nama); exception when no_data_found then dbms_output.put_line(gak ada); end; 3) EXCEPTION SECTION Merupakan bagian yang akan diaktifkan bila terjadi kesalahan atau pengecualian pada saat menjalankan program PL/SQL. Exception section terdiri atas predefined dan user defined. Sebagai contoh exception predefined NO_DATA_FOUND akan diaktifkan bila perintah DML SQL tidak menemukan data dalam klausa WHERE.
54 User, Privilege dan Role

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

Contoh: declare v_nama mahasiswa.nama%type; v_nim mahasiswa.nim%type; begin select nim, nama into v_nim, v_nama from pegawai where nim=30108001 dbms_output.put_line(v_nama); exception when no_data_found then dbms_output.put_line(gak ada); end;

4.4 Struktur Kondisional


Perintah IF terdiri atas tiga bentuk, yaitu IF THEN, IF THEN ELSE, serta IF THEN ELSEIF. Struktur dari ketiganya ditampilkan dalam satu rumusan umum sebagai berikut: IF kondisi 1 THEN Baris perintah... [ELSIF kondisi 2 THEN Baris perintah...] ... [ELSE baris perintah..] END IF;

Baris pada baris perintah dapat berupa perintah IF sehingga akan membentuk blok IF bersarang. Bagian ELSIF bisa muncul beberapa kali sesuai dengan kebutuhan sedangkan bagian ELSE biasanya dipakai untuk menangani
Pengenalan PL/SQL dan Tipe Data 55

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

kondisi jika semua kondisi pada kalang IF... THEN atau ELSIF... THEN tidak terpenuhi. Namun bagian ELSE ini bisa saja tidak digunakan. contoh: declare penuh exception; n1 number; n2 number; begin if b1>n2 then raise penuh; else dbms_ouput.put_line(bisa); end if; end;

4.5 Struktur Iterasi


Pernyataan Loop
Untuk perintah LOOP, akan dilakukan pengulangan terus-menerus. Bentuk umum dari pernyataan LOOP sebagai berikut: LOOP //Baris perintah END LOOP; Karena tidak mempunyai kondisi untuk keluar dari iterasi, maka perlu digunakan perintah EXIT. Perintah EXIT dapat digunakan dengan cara seperti berikut: EXIT WHEN kondisi;

56

User, Privilege dan Role

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

Contoh: DECLARE x number; BEGIN x := 0; LOOP x := x + 1; EXIT WHEN x > 5; -- exit loop immediately END LOOP; dbms_output.put_line('Hasil looping : '||x); END; Bisa juga digunakan format seperti ini: IF kondisi THEN EXIT; END IF;

Contoh: DECLARE x number; BEGIN x := 0; LOOP x := x + 1; IF x > 5 THEN EXIT; -- exit loop immediately END IF; dbms_output.put_line('Hasil looping ke- '||x); END LOOP; END;

Pengenalan PL/SQL dan Tipe Data

57

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

DECLARE vno number; BEGIN vno:=1; LOOP insert into coba(no) values vno; vno:=vno+1; if vno > 10 then exit; end if; END LOOP; END; Pernyataan LOOP bisa diberi label atau nama, sintaksnya sebagai berikut : <<label_name>> LOOP sequence_of_statements END LOOP label_nama; //optional Contoh: <<outer>> LOOP ... LOOP ... EXIT outer WHEN ... -- exit both loops END LOOP; ... END LOOP outer; Pada contoh diatas, saat EXIT maka akan keluar dari kedua looping yang ada.

Pernyataan While - Loop

Perintah WHILE-LOOP akan terus melakukan iterasi (memproses baris perintah secara berulang) selama KONDISI bernilai TRUE. Bentuk umum dari pernyataan LOOP sebagai berikut:

58

User, Privilege dan Role

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

WHILE kondisi LOOP //Baris perintah END LOOP; Contoh: DECLARE x number; BEGIN x := 0; WHILE x <= 5 LOOP x := x + 1; dbms_output.put_line('Hasil looping ke- '||x); END LOOP; END; Selain dapat digunakan pada perintah LOOP, perintah EXIT ini juga dapat digunakan pada WHILE-LOOP untuk menambahkan kondisi tertentu. Namun perintah EXIT ini hanya bisa digunakan dalam loop saja. Contoh: DECLARE vno number; BEGIN vno:=1; WHILE vno <= 10 LOOP insert into coba(no) values vno; EXIT WHEN vno = 10; vno:=vno+1; END LOOP; END;

Pernyataan For - Loop


Struktur pengulangan For digunakan untuk menghasilkan pengulangan sejumlah kali tanpa penggunaan kondisi apapun. Stuktur ini menyebabkan aksi diulangi sejumlah beberapa kali (tertentu). Bentuk umum struktur for ada dua
Pengenalan PL/SQL dan Tipe Data 59

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

macam yaitu : menaik (ascending) atau menurun (descending). Sintaksnya sebagai berikut : FOR LOOP Baris perintah END LOOP; Perintah FOR-LOOP melakukan iterasi selama nilai COUNTER berada dalam range nilai i_terendah dan i_teratas. Pada FOR-LOOP, counter tidak perlu dideklarasikan. Penggunaan kata kunci RESERVE akan menyebabkan nilai counter dimulai dari i_teratas ke i_terendah. Dua titik antara i_terendah dan i_teratas merupakan operator rentang nilai. i_terendah maupun i_terkecil bisa berupa nilai integer ataupun variabel yang bernilai integer yang sudah dideklarasikan sebelumnya. i_upper harus lebih besar dari i_lower dan jika tidak maka iterasi tidak akan dilakukan. Contoh: BEGIN FOR vno IN 1..10 LOOP insert into coba(no) values vno; dbms_output.put_line('Hasil looping ke- '||x); END LOOP; END; BEGIN FOR vno IN REVERSE 1..10 LOOP insert into coba(no) values vno; dbms_output.put_line('Hasil looping ke- '||x); END LOOP; END; counter IN [REVERSE] i_terendah .. i_teratas

60

User, Privilege dan Role

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

Ruang Lingkup Pernyataan FOR LOOP Contoh : DECLARE ctr INTEGER; -- global variable BEGIN ... FOR ctr IN 1..25 LOOP ... IF ctr > 10 THEN ... -- refers to loop counter END IF; END LOOP; END; Untuk menuju ke variabel global, harus ditambahkan label dan notasi dot. Contoh : <<main>> DECLARE ctr INTEGER; ... BEGIN ... FOR ctr IN 1..25 LOOP ... IF main.ctr > 10 THEN -- refers to global variable ... END IF; END LOOP; END main; Hal ini juga berlaku untuk nested loop. Contoh : <<main>> DECLARE ctr INTEGER; ...
Pengenalan PL/SQL dan Tipe Data 61

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

BEGIN <<outer>> FOR step IN 1..25 LOOP FOR step IN 1..10 LOOP ... IF outer.step > 15 THEN ... END IF; END LOOP; END LOOP outer; END main; Selain dapat digunakan pada perintah LOOP, perintah EXIT ini juga dapat digunakan pada FOR-LOOP untuk menambahkan kondisi tertentu. Namun perintah EXIT ini hanya bisa digunakan dalam loop saja. Contoh: BEGIN FOR j IN 1..10 LOOP FETCH c1 INTO mhs_rec; EXIT WHEN c1%NOTFOUND; ... END LOOP; END;

BEGIN <<outer>> FOR i IN 1..5 LOOP ... FOR j IN 1..10 LOOP FETCH c1 INTO mhs_rec; EXIT outer WHEN c1%NOTFOUND; -- exit both FOR loops ... END LOOP; END LOOP outer; -- control passes here END;
62 User, Privilege dan Role

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

Perintah GOTO
Perintah ini digunakan untuk mengarahkan proses ke baris yang ditandai dengan label tertentu. Bentuk umum pemakaian perintah ini adalah: GOTO nama_label; Untuk memberikan label pada suatu baris tertentu, gunakan format penamaan label seperti berikut ini: <<nama_label>> Penggunaan perintah GOTO dalam jumlah yang banyak akan

menyebabkan suatu blok PL/SQL menjadi tidak terstruktur. Karena itu sebaiknya penggunaan GOTO ini dihindari. Contoh: DECLARE x number; BEGIN x := 0; LOOP x := x + 1; IF x = 5 THEN GOTO EndOfLoop; END IF; END LOOP; <<EndOfLoop>>dbms_output.put_line('Hasil looping : '||x); END; Contoh: create or replace procedure coba (v_nim mahasiswa.nim %type) is cursor mhs_cur is select nim, nama, alamat from mahasiswa where nim=v_nim; mhs_rec mhs_cur%rowtype;
Pengenalan PL/SQL dan Tipe Data 63

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

begin open mhs_cur; <<iterasi>> fetch mhs _cur into mhs _rec; if mhs _cur%notfound then goto lbl_end; end if; dbms_output.put_line(mhs _rec.nama_pegawai||' '|| mhs_rec.alamat||' '|| mhs_rec.gaji); goto iterasi; Dengan adanya perintah goto iterasi, proses berikutnya menuju baris <<iterasi>> yang berada beberapa sebelum baris goto tersebut. Selanjutnya, perintah-perintah yang mengikutinya akan diproses sesuai dengan urutannya (sekuensial). Sedangkan perintah <<lbl_end>> menentukan proses berikutnya adalah baris <<lbl_end>> yang berada setelah perintah goto tersebut. Namun demikian, pada saat menggunakan perintah goto harus diperhatikan hal-hal berikut: perintah goto tidak boleh menuju label yang berada dalam perintah IF, LOOP, blok lain dan blok yang menjadi sub bloknya. Sebuah label harus diikuti oleh paling tidak sebuah perintah eksekusi PL/SQL. Kata atau reserved word seperti END, END IF dan END LOOP tidak termasuk sebagai perintah eksekusi. Tetapi NULL termasuk perintah eksekusi.

64

User, Privilege dan Role

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

JURNAL 1. Buatlah tampilan seperti ini pada SQL Plus: 1 3 5 7 8 11 2. 3. Buatlah tampilan seperti ini pada SQL Plus: 1 3 5 7 9 11 Jelaskan maksud blok PL/SQL dibawah ini, jika nilai variabel input_nilai = 8: DECLARE nilai1 number; nilai2 number; nilai3 number; hasil number; BEGIN nilai1:=1; nilai2:=1; nilai3:='&input_nilai'; dbms_output.put_line(nilai1||' '); dbms_output.put_line(nilai2||' '); loop hasil:=nilai1+nilai2; if hasil>=nilai3 then goto endloop; end if; dbms_output.put_line(hasil||' '); nilai1:=nilai2; nilai2:=hasil; end loop; <<endloop>>
65

Pengenalan PL/SQL dan Tipe Data

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

dbms_output.put_line(' '); END; / 4. Jelaskan maksud blok PL/SQL dibawah ini, jika nilai variabel input_nilai = 8:

DECLARE batas_b number; batas_a number; BEGIN batas_b:='&batas_bawah'; batas_a:='&batas_atas'; while batas_b<=batas_a loop if mod(batas_b,2)=1 then dbms_output.put_line(batas_b||' '); end if; batas_b:=batas_b+1; end loop; dbms_output.put_line(' '); END; /

66

User, Privilege dan Role

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

5 CURSOR

Overview

Pada Programming Language untuk Oracle pengambilan data dari database yang dijalankan melalui sebuah queri atau select statement hanya menghasilkan sebuah output. Diperlukan cursor yang bisa digunakan untuk menampung output sehingga berapa baris pengambilan data tidak menjadi masalah

Tujuan

1. 2.

Mengetahui dan mengerti cursor. Mampu mengimplementasikannya dalam pemrograman di oracle.

Cursor

67

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

Blok PL/SQL tidak memungkinkan untuk menangani query dengan keluaran lebih dari satu baris(record) karena variabel penampungnya harus mempunyai sebuah nilai. Karena itu, diperlukan sebuah cursor untuk menampung semua kondisi dari keluaran sebuah query. Cursor merupakan suatu variabel yang digunakan untuk menampung hasil query yang terdiri atas lebih dari satu row atau record. Cursor dapat diilustrasikan sebagai penampung sekaligus pointer atas hasil eksekusi query. Pada dasarnya perintah SELECT .. pada PL/SQL merupakan sebuah cursor. Terdapat dua macam cursor, yaitu: cursor implisit dan cursor eksplisit

5.1 Cursor Implisit


Merupakan perintah SELECT statement dengan klausa INTO yang terdapat di dalam blok PL/SQL dan harus menghasilkan satu baris record. Jika hasil cursor implisit ini lebih dari satu baris atau tidak menghasilkan satu baris pun, maka Oracle akan mengeluarkan pesan kesalahan. Klausa into pada cursor implisit dipakai untuk menugaskan nilai hasil proses select ke dalam variabel-variabel yang dipilih. Atribut SQL%FOUND SQL%NOTFOUND SQL%ROWCOUNT SQL%ISOPEN Keterangan TRUE jika cursor menghasilkan sebuah baris dari queri yang dideklarasikan. Sebaliknya FALSE. Kebalikan dari %FOUND Jumlah baris yang telah diambil/ditangkap (FETCH) Mengembalikan nilai TRUE jika cursor masih dalam keadaan terbuka (OPEN)

68

User, Privilege dan Role

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

Contoh: declare mhs_rec mahasiswa%rowtype; nim_nya mahasiswa.nim%type; begin nim_nya := '30108001'; select nim, nama, alamat into mhs_rec from nahasiswa where nim = nim_nya; ... end;

Jika nilai nim sama dengan 30108001 dipenuhi maka hasil proses select menghasilkan satu baris, sedangkan jika nilai nim_nya diganti dengan nilai lain dimana nilai tersebut tidak akan menghasilkan satu baris pun, maka Oracle akan mengeluarkan pesan kesalahan. Demikian pula jika klausa where pada cursor di atas dihilangkan sementara di dalam tabel proyek terdapat lebih dari satu baris, maka cursor tersebut tidak dapat menampung semua baris yang diterima. Hal ini akan menimbulkan error exact fetch returns more than requested number of rows.

--IMPLICIT CURSOR CONTOH 1.


declare vnim mahasiswa.nim%type:='&nim_mhs'; vnama mahasiswa.nama%type; begin select nim,nama into vnim,vnama from mahasiswa where nim =vnim; dbms_output.put_line('Nim : '||vnim); dbms_output.put_line('Nama mahasiswa : '||vnama); exception
Cursor 69

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

when no_data_found then dbms_output.put_line('Tidak ada mahasiswa dengan nim : '||vnim); when too_many_rows then dbms_output.put_line('Data yang dihasilkan lebih dari 1 baris'); end; /

-- IMPLICIT CURSOR CONTOH 2.


declare vnim mahasiswa.nim%type:='&nim_mhs'; vnama mahasiswa.nama%type; n number; begin select nim,nama into vnim,vnama from mahasiswa where nim =vnim; n := sql%rowcount; dbms_output.put_line('Data Mahasiswa'); if sql%found then dbms_output.put_line('Nim : '||vnim); dbms_output.put_line('Nama : '||vnama); dbms_output.put_line('Jumlah data : '||n); end if; exception when no_data_found then dbms_output.put_line('Tidak ada mahasiswa dengan nim: '||vnim); when too_many_rows then dbms_output.put_line('Data yang dihasilkan lebih dari 1 baris'); end; /

70

User, Privilege dan Role

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

-- IMPLICIT CURSOR CONTOH 3.


declare vnama mahasiswa.nama%type :='&nama_mhs'; -- masukkan paijo misal ada 2 mahasiswa dengan nama depan paijo n number; begin update mahasiswa set alamat='SKB' where nama like vnama||'%'; n := sql%rowcount; if sql%found then dbms_output.put_line('Mahasiswa dengan nama depan '||vnama||' telah di update'); dbms_output.put_line('Jumlah data yang diupdate = '||n); else dbms_output.put_line('Tidak ada mahasiswa dengan nama depan : '||vnama); dbms_output.put_line('Jumlah data yang diupdate = '||n); end if; exception when too_many_rows then dbms_output.put_line('Data yang dihasilkan lebih dari 1 baris'); end; /

5.2 Cursor Eksplisit


Tidak seperti cursor implisit, cursor eksplisit harus dideklarasikan terlebih dahulu sebelum digunakan. Terdapat empat tahapan penggunaan cursor eksplisit ini yaitu: declare, open, fetch dan terakhir adalah close.

Cursor

71

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

Statement declare: CURSOR nama_cursor IS query

Merupakan deklarasi nama cursor dan definisi struktur query yang akan dilakukan di dalamnya. Contoh: DECLARE CURSOR CUR1 IS SELECT nim, nama, alamat FROM mahasiswa .. .. ..

Statement open
OPEN nama_cursor; Sebelum suatu cursor dapat digunakan, cursor harus dibuka terlebih dahulu. Contoh: OPEN CUR1;

Statement fetch FETCH nama_cursor INTO <variable1,variable2,..>; Fetch merupakan perintah untuk mengambil isi cursor, dimana isi dari cursor tersebut adalah hasil query yang telah dideklarasikan pada statement deklarasi cursor. Dan tiap-tiap field hasil query tersebut
72 User, Privilege dan Role

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

kemudian ditampung dalam variable-variable yang tipe datanya sesuai dengan tipe-tipe kolom query pada statemen deklarasi. Fetch ini dilakukan untuk tiap-tiap baris. Contoh: FETCH CUR1 INTO v_nim, v_nama, v_alamat;

Statement close CLOSE nama_cursor;

Setelah pemrosesan query selesai, cursor harus ditutup dengan satatemen CLOSE ini. Berikut ini adalah atribut-atribut untuk mendapatkan status cursor. Setiap atribut dalam penggunaannya harus didahului dengan nama cursor. Atribut nama_cursor%FOUND Keterangan TRUE jika cursor menghasilkan sebuah baris dari queri yang dideklarasikan. Sebaliknya FALSE. nama_cursor%NOTFOUND nama_cursor%ROWCOUNT Kebalikan dari %FOUND Jumlah baris yang difetch atau diambil dari active set. nama_cursor%ISOPEN TRUE jika cursor sedang terbuka dan FALSE jika sebaliknya.
Cursor 73

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

Contoh: DECLARE v_nama varchar2(20); v_nim char(9); CURSOR CUR1 IS SELECT NAMA, NIM FROM MAHASISWA; BEGIN OPEN CUR1; FETCH CUR1 INTO v_nama, v_nim; WHILE CUR1%FOUND LOOP DBMS_OUTPUT.PUT_LINE(v_nama); DBMS_OUTPUT.PUT_LINE(v_nim); FETCH CUR1 INTO v_nama, v_nim; END LOOP; CLOSE CUR1; END;

Cursor FOR LOOP


Ada sebuah cara untuk mengambil isi cursor secara otomatis, yaitu dengan struktur pengulangan FOR LOOP. Disebut otomatis karena tidak perlu proses pembukaan cursor ( OPEN ) memanipulasi proses pengambilan cursor ( FETCH ) tidak perlu penutupan cursor ( CLOSE ) variabel indeks yang digunakan dalam struktur pengulangan FOR_LOOP tidak perlu dideklarasikan terlebih dahulu Sintaks: DECLARE CURSOR nama_cursor IS ekspresi-query BEGIN FOR nama_record IN nama_cursor LOOP -- nama_record tidak perlu dideklarasikan ... END LOOP END;
74 User, Privilege dan Role

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

Contoh: DECLARE CURSOR cur1 IS select nama from mahasiswa; BEGIN FOR rec IN cur1 LOOP dbms_output.put_line(rec.nama); END LOOP END; Nama record yang didefinisikan sesudah for merupakan pendeklarasian yang hanya internal di dalam loop, dan ruang lingkupnya bersifat internal sampai loop berhenti. Sebenarnya di dalam loop for, cursor tidak harus dideklarasikan terlebih dahulu.

-- EKSPLISIT CURSOR CONTOH 1. (Menggunakan LOOP-EXIT)


declare vnim mahasiswa.nim%type; vnama mahasiswa.nama%type;

cursor cursor1 is select nim, nama from mahasiswa; n number; begin dbms_output.put_line('Data Mahasiswa); dbms_output.put_line('No Nim Nama'); open cursor1; loop fetch cursor1 into vnim, vnama; exit when cursor1%notfound; dbms_output.put_line(cursor1%rowcount||'. '||vnim||' '||vnama); end loop; n := cursor1%rowcount; dbms_output.put_line('Jumlah data = '||n);
Cursor 75

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

close cursor1; exception when no_data_found then dbms_output.put_line('Tidak ada data mahasiswa'); end; /

-- EKSPLISIT CURSOR CONTOH 2. (Menggunakan WHILE-LOOP)


declare vnim mahasiswa.nim%type; vnama mahasiswa.nama%type; cursor cursor1 is select nim, nama from mahasiswa; n number; begin dbms_output.put_line('Data Mahasiswa); dbms_output.put_line('No Nim Nama'); open cursor1; fetch cursor1 into vnim, vnama; while cursor1%found loop dbms_output.put_line(cursor1%rowcount||'. '||vnim||' '||vnama); fetch cursor1 into vnim, vnama; end loop; n := cursor1%rowcount; dbms_output.put_line('Jumlah data = '||n); close cursor1; exception when no_data_found then dbms_output.put_line('Tidak ada data mahasiswa); end; /
76 User, Privilege dan Role

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

-- EKSPLISIT CURSOR CONTOH 3. (Menggunakan FOR-IN-LOOP)


declare cursor cursor1 is select nim, nama from mahasiswa; n number; begin dbms_output.put_line('Data Mahasiswa); dbms_output.put_line('No Nim Nama'); for x in cursor1 loop -- x tidak perlu di deklarasikan dbms_output.put_line(cursor1%rowcount|| '.'||x.nim||' '||x.nama); n := cursor1%rowcount; end loop; dbms_output.put_line('Jumlah data = '||n); exception when no_data_found then dbms_output.put_line('Tidak ada data mahasiswa'); end; /

-- EKSPLISIT CURSOR CONTOH 4. (Menggunakan FOR-IN-LOOP tanpa mendeklarasikan cursor)


declare n number:=0; begin dbms_output.put_line('Data Mahasiswa); dbms_output.put_line('No Nim Nama'); for x in (select nim, nama from mahasiswa) loop -- x tidak perlu di deklarasikan
Cursor 77

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

n := n + 1; dbms_output.put_line(n||'. '||x.nim|| ' '||x.nama); end loop; dbms_output.put_line('Jumlah data = '||n); exception when no_data_found then dbms_output.put_line('Tidak ada data mahasiswa'); end; /

5.3 JURNAL
1. 2. Jelaskan perbedaan antara cursor dengan perintah SELECT! Buatlah cursor implisit dan eksplisit yang menampilkan datadata buku beserta suppliernya! 3. Jelaskan maksud dan keluaran dari blok PL/SQL dibawah ini: declare vid_buku buku.id_buku%type; vjudul buku.judul%type; cursor cursor1 is select id_buku, judul from buku; n number; begin dbms_output.put_line('Data Buku); dbms_output.put_line(id_buku Judul); open cursor1; fetch cursor1 into vid_buku, vjudul; while cursor1%found loop dbms_output.put_line(cursor1%rowcount|| .'||vid_buku||' '||vjudul); fetch cursor1 into vid_buku, vjudul; end loop; n := cursor1%rowcount;
78 User, Privilege dan Role

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

dbms_output.put_line('Jumlah data = '||n); close cursor1; exception when no_data_found then dbms_output.put_line('Tidak buku); end; / Jalankan blok PL/SQL dibawah ini pada SQL Plus kemudian jika terjadi error perbaiki : DECLARE v_idsupplier supplier.id_supplier%TYPE; v_nama supplier.nama%TYPE; v_no_telepon supplier.no_telepon%TYPE; v_alamat supplier.alamat%TYPE; BEGIN select id_supplier, nama, no_telepon, alamat into vid_supplier, vnama, vno_telepon, valamat from supplier order by id_supplier; if SQL%NOTFOUND then dbms_output.put_line('Nama Pemesan Tidak Ditemukan '); else dbms_output.put_line('Daftar Nama Pemesan yang Total Banquetnya <= 500000 :'); dbms_output.put_line(v_npm); end if; END; / 4.

ada

data

Cursor

79

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

6 ERROR HANDLING

Overview

Jika terdapat kesalahan, maka pada Oracle akan muncul pesan kesalahan yang kurang dipahami user. Handling error dimaksudkan untuk menangani hal tersebut.

Tujuan

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

Mampu memahami cara kerja exception. Mampu memahami Predefined Exception pada Oracle. Mampu memahami User Defined Exception. Mampu memahami Unhandled Exception. Mampu memahami penggunaan RAISE_APPLICATION_ERROR Mampu memahami EXCEPTION INIT PRAGMA. Mampu menerapkannya exception dalam PL/SQL di Oracle. Mampu Menguasai dan menerapkan Multi Blok dalam PL/SQL
User, Privilege dan Role

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

6.1 ERROR HANDLING (EXCEPTION)


Setiap kesalahan (error) atau peringatan (warning) yang muncul karena suatu perintah disebut dengan exception. Bagian exception ini ditujukan untuk menangani exception tersebut. Bagian ini disebut juga exception handler, sedangkan mekanisme penanganan exception itu disebut exception handling. Jika tidak terdapat EXCEPTION dalam sebuah blok, maka semua proses akan terhenti dengan tanpa adanya penanganan kesalahan. Sebaliknya jika terdapat exception section, maka semua perintah berikutnya dalam bagian executable section tidak dieksekusi dan proses akan berpindah ke bagian exception handler.

6.2 Cara Kerja EXCEPTION


Setiap kali exception muncul, semua perintah berikutnya di dalam executeble section tidak dieksekusi dan proses akan berpindah ke exception handler. Contoh: DECLARE ... BEGIN ... SELECT NIM INTO vnim FROM MAHASISWA WHERE... ... EXCEPTION WHEN NO_DATA_FOUND THEN DBMS_OUTPUT.PUT_LINE(DATA TIDAK ADA); END;

Misalkan ketika proses SELECT tidak menghasilkan baris data apapun, Oracle akan membangkitkan error dengan kode ORA-01403. Begitu error tersebut muncul, proses akan berpindah ke bagian exception section.

Handling Error

81

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

Bentuk umum blok exception adalah sebagai berikut: EXCEPTION WHEN exception1 [OR exception2 [OR ...]] THEN Statement-statement [ WHEN exceptiona [OR exceptionb [OR ...]] THEN statement-statement ] ... [ WHEN OTHERS THEN statement-statement ]

Beberapa jenis kesalahan yang umum terjadi antara lain : Jenis Error Keterangan Syntax Error Misal kurang tanda ; dan dalam penulisan statement Logic Error Loop yang tanpa berhenti, urutan dari operator Compile Error Penggunaan perintah yang salah yang baru diketahui pada saat di compile Run Time Error Error yang terjadi pada saat program dijalankan

Predefined EXCEPTION
Beberapa jenis error yang sangat umum dimasukkan ke dalam predefined exception sehingga seorang user dapat membuat penanganan error terhadap exception yang umum tersebut tanpa harus mengetahui kode error-nya.

82

User, Privilege dan Role

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

Nama Exception
CURSOR_ALREADY_OPEN DUP_VAL_ON_INDEX INVALID_CURSOR INVALID_NUMBER LOGIN_DENIED NO_DATA_FOUND NOT_LOGGED_ON PROGRAM_ERROR ROWTYPE_MISMATCH

Kode Error
ORA-06511 ORA-00001 ORA-01001 ORA-01722 ORA-01017 ORA-01403 ORA-01012 ORA-06501 ORA-06504

Deskripsi
Membuka cursor yang sedang terbuka Memasukkan nilai duplikat pada kolom unik Operasi cursor ilegal Gagal mengkonversi karakter ke NUMBER. Login dengan username atau password yang salah. SELECT INTO statement tidak menghasilkan baris data. Mengakses database tetapi tidak terkoneksi. Terjadi PL/SQL internal error. Dalam satu penugasan, tipe data antara cursor, variabel dengan PL/SQL cursor tidak cocok Memori rusak atau proses membutuhkan memori yang lebih besar. Time out. SELECT INTO statement menghasilkan lebih dari satu baris data. Kesalahan pada operasi aritmetika, konversi, truncate atau batasan rentang nilai. Membagi dengan nol.

STORAGE_ERROR TIMEOUT_ON_RESOURCE TOO_MANY_ROWS VALUE_ERROR

ORA-06500 ORA-00051 ORA-01422 ORA-06502

ZERO_DIVIDE

ORA-01476

Handling Error

83

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

Contoh: DECLARE v_pembagi NUMBER := &v_pembagi; v_hasil NUMBER := 1000; BEGIN v_hasil := v_hasil/v_pembagi; DBMS_OUTPUT.PUT_LINE(v_hasil); EXCEPTION WHEN ZERO_DIVIDE THEN DBMS_OUTPUT.PUT_LINE(dibagi dengan nol); END;

6.3 User Defined EXCEPTION


Merupakan exception yang dibuat oleh user dan diaktifkan dengan perintah RAISE. Sintaks:

Identifier EXCEPTION;
Dan dibangkitkan dengan perintah:

RAISE Identifier;

84

User, Privilege dan Role

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

6.4 Unhandled EXCEPTION


Penggunaan kata kunci OTHERS yang digunakan untuk menampilkan kesalahan dan keterangan kesalahan pada exception others. Jenis exception OTHERS ini digunakan untuk menangani semua kesalahan yang tidak ditangani. Sebaiknya hindari penggunaan exception OTHERS ini dihindari karena tidak menangani exception yang sifatnya spesifik. Contoh: DECLARE Exep_lebih EXCEPTION; v1 NUMBER := &v1; v2 NUMBER := 99; BEGIN If v1 > v2 then RAISE Exep_lebih; else DBMS_OUTPUT.PUT_LINE('volume masih bisa menampung'); End if; EXCEPTION WHEN Exep_lebih THEN DBMS_OUTPUT.PUT_LINE('volume '|| v1 ||'lebih dari '|| v2); WHEN OTHERS then DBMS_OUTPUT.PUT_LINE('volume tidak bisa menampung'); END;

Handling Error

85

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

6.5 Menggunakan RAISE_APPLICATION_ERROR


RAISE_APPLICATION_ERROR merupakan sebuah prosedur yang disediakan oleh Oracle yang dapat digunakan untuk membuat dan sekaligus membangkitkan sebuah exception dengan cara membuat pesan dan nomor kesalahan untuk sebuah aplikasi. Nomor kesalahan harus berada dalam rentang nilai -20999 dan -20000. Sintaks: RAISE_APPLICATION_ERROR (angka_kesalahan, pesan [TRUE|FALSE]); Contoh: Begin Insert into mahasiswa(nim, nama, alamat) Values('30108001','jammie', 'pga'); Exception When DUP_VAL_ON_INDEX then Raise_application_error (-20000, 'nim mahasiswa harus unik');

End;

86

User, Privilege dan Role

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

6.6 EXCEPTION INIT PRAGMA


Exception_init pragma memungkinkan dibuatnya suatu exception (yang sifatnya sama dengan predefine exception) yang dikaitkan dengan nomor kesalahan. Keuntungan dari penggunaan exception_init ini adalah tidak diperlukan lagi pengecekan kondisi secara eksplisit. Contoh: declare v_nama v_nim varchar2(20) := &vnama; char(9) := &vnim;

v_alamat varchar2(25) := &valamat; jangan_null exception; kepanjangan exception; pragma exception_init(jangan_null,-1400); pragma exception_init(kepanjangan,-6502); begin insert into Mahasiswa values(v_nim,v_nama,v_alamat); exception when jangan_null then dbms_output.put_line('kolom harus diisi'); when kepanjangan then dbms_output.put_line('isinya kepanjangan'); when others then dbms_output.put_line('apa coba yang salah?'); end;
Handling Error 87

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

6.7 JURNAL
1. Sebutkan dan jelaskan kegunaan dari error handling pada PL/SQL! 2. Tambahkan exception pada blok PL/SQL dibawah ini DECLARE pe_ratio NUMBER(3,1); BEGIN SELECT price / earnings INTO pe_ratio FROM buku WHERE id_jenis = 'IT; -- might cause division-by-zero error INSERT INTO stats (symbol, ratio) VALUES ('XYZ', pe_ratio); COMMIT; END; -- exception handlers and block end here 3. Buatlah cursor untuk mengambil nilai stok buku pada tabel buku kemudian buatlah exception untuk menangani kesalahan ketika stok buku yang dihasilkan bernilai nol.

88

User, Privilege dan Role

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

7 STORED PROGRAM

Overview

Pada Programming Language setiap iterasi dijalan secara terurut. Jika akan menjalankan kegiatan yang sebenarnya sama developer perlu mendeklarasikan ulang apa yang telah dibuat sebelumnya. Stored program dibuat untuk mengatasi hal tersebut. Sehingga menghemat tenaga dan lebih memudahkan dalam memodifikasi sebuah program.

Tujuan

1. Mengetahui dan memahami procedure. 2. Mengetahui dan memahami function. 3. Mampu mengimplementasikan procedure pemrograman di oracle.
Stored Program

dan

function

dalam

89

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

STORED PROGRAM

PROCEDURE

FUNCTION

NESTED PROCEDURE

NON NESTED PROCEDURE

NESTED FUNCTION

NON NESTED FUNCTION

7.1 Procedure
7.1.1 Non Nested Procedure
Non nested Procedure atau stored procedure merupakan sekumpulan blok PL/SQL yang tersimpan di dalam skema database dan dapat dieksekusi secara berulang kali jika user memiliki privilege untuk mengeksekusi procedure tersebut. Nama procedure yang dibuat nantinya akan menjadi objek dengan tipe procedure. Procedure akan dieksekusi pada saat pemanggilan setelah sebelumnya dibuat terlebih dahulu. Sintaks Pendeklarasian: CREATE [OR REPLACE] PROCEDURE nama_procedure [argumen1 tipe_data, argumen2 tipe_data,...] AS [deklarasi variabel lokal] BEGIN badan_prosedur EXCEPTION END;
90 User, Privilege dan Role

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

Keterangan nama_procedure argumen badan_prosedur Contoh : CREATE OR REPLACE ( v_nim v_nama v_alamat ) IS BEGIN

: nama dari procedure yang akan dibuat : parameter-parameter yang dipakai saat pemanggilan procedure : tempat blok PL/SQL yang memuat baris kode. PROCEDURE tambahMahasiswa mahasiswa.nim%type; mahasiswa.nama%type; departemen.lokasi%type

insert into mahasiswa values(v_nim,v_nama,v_alamat); END; Setelah procedure dibuat, dijalankan dengan sintaks berikut. EXECUTE nama_procedure(parameter_1,parameter_2,...); Contoh : EXECUTE tambahMahasiswa (30108002,paimen,sukapura); Untuk menghapus procedure yang telah kita buat, dapat menggunakan sintaks berikut DROP PROCEDURE nama_procedure; Contoh : DROP PROCEDURE tambahMahasiswa;
Stored Program 91

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

7.1.2 Nested Procedure


Adalah procedure yang dideklarasikan di dalam Declaration Section suatu blok PL/SQL yang anonim. Karena dideklarasikan di dalam blok PL/SQL yang anonim maka nested procedure tidak disimpan dalam basis data dan tidak dapat dijalankan oleh blok lain kecuali dideklarasikan kembali oleh blok tersebut. Contoh : DECLARE PROCEDURE CETAK(kata varchar2, n number) IS BEGIN FOR i IN 1..n LOOP DBMS_OUTPUT.PUT_LINE(to_char(i)|| . ||kata); END LOOP; END CETAK; BEGIN CETAK(&v_kata, &v_n); END;

7.1.3 JENIS-JENIS PROCEDURE PADA ORACLE :


PROCEDURE TANPA PARAMETER/ARGUMEN Procedure yang tidak memiliki parameter/argument biasanya bersifat statis (outputannya selalu sama) setiap kali dieksekusi. Contoh: CREATE OR REPLACE PROCEDURE lihat_mahasiswa IS vnama mahasiswa.nama%type; BEGIN SELECT nama INTO vnama FROM mahasiswa WHERE nim = '30108002'; DBMS_OUTPUT.PUT_LINE('Nama mahasiswa dengan nim 30108002 adalah '||vnama);
92 User, Privilege dan Role

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

END; /

Hasil setelah dieksekusi adalah sbb, SQL> EXECUTE lihat_mahasiswa; Nama mahasiswa dengan nim 30108002 adalah paimen Procedure lihat_mahasiswa di atas bersifat statis, dieksekusi kapanpun memiliki output yang sama. PROCEDURE DENGAN PARAMETER/ARGUMEN Perbedaan dengan procedure tanpa parameter yaitu procedure dengan parameter memiliki output yang dinamis sesuai dengan nilai yang diberi pada parameter procedure tersebut. Default argumen pada Oracle adalah IN. Jenis-Jenis parameter/argumen dari Procedure adalah : Parameter Masukan (Input) Ditandai dengan atribut IN, dimana nilai dari parameter ini merupakan inputan untuk sebuah procedure. Contoh: CREATE OR REPLACE PROCEDURE lihat_mahasiswa (vnim IN mahasiswa.nim%type) IS vnama mahasiswa.nama%type; BEGIN SELECT nama INTO vnama FROM mahasiswa WHERE nim = vnim; DBMS_OUTPUT.PUT_LINE('Nama mahasiswa dengan nim '||vnim||' adalah '||vnama); END; /
Stored Program 93

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

Parameter Keluaran (Output) Ditandai dengan atribut OUT, dimana parameter ini merupakan variabel penampung untuk output sebuah procedure. Contoh: Procedure yang menggunakan parameter masukan dan juga keluaran adalah sebagai berikut : CREATE OR REPLACE PROCEDURE lihat_mahasiswa (vnim IN mahasiswa.nim%type, vnama OUT mahasiswa.nama%type) parameter

IS BEGIN SELECT nama INTO vnama FROM mahasiswa WHERE nim = vnim; DBMS_OUTPUT.PUT_LINE('Nama mahasiswa dengan nim '||vnim||' adalah '||vnama); END; /

Untuk mengeksekusi procedure lihat_mahasiswa : SQL> SET SERVEROUTPUT ON; SQL> DECLARE 2 vnama mahasiswa.nama%type; 3 BEGIN 4 lihat_mahasiswa ('30108002',vnama); 5 DBMS_OUTPUT.PUT_LINE('Nama mahasiswa teladan bulan ini adalah '||vnama); 6 END; 7 / Nama mahasiswa teladan bulan ini adalah paimen

94

User, Privilege dan Role

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

Parameter Masukan/Keluaran (Input/Output) Ditandai atribut IN OUT, dimana parameter tersebut dianggap sebagai masukan kemudian diproses dan ditampilkan kembali sebagai keluaran. Contoh: CREATE OR REPLACE PROCEDURE kuadrat (x IN OUT number) IS BEGIN x:=x*x; END; / Untuk mengeksekusi procedure kuadrat : SQL> SET VERIFY OFF; SQL> DECLARE 2 bil number := '&input_angka'; 3 n number; 4 BEGIN 5 n := bil; 6 kuadrat(bil); 7 DBMS_OUTPUT.PUT_LINE('kuadrat dari '||n||' adalah '||bil); 8 END; 9 / Enter value for input_angka : 5 kuadrat dari 5 adalah 25

7.2 Function
Perbedaan mendasar antara function dan procedure adalah bahwa function harus mengembalikan nilai tertentu kepada pemanggilnya. Nilai ini dikembalikan dengan menggunakan sintaks RETURN.

Stored Program

95

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

7.2.1 Non Nested Function


Disebut juga stored function yang mirip dengan stored procedure tetapi harus memberikak output sebuah nilai. Function ini tersimpan dalam basis data. Sintaks: CREATE [OR REPLACE] FUNCTION nama_function [(argumen [IN|OUT|IN OUT] tipe_data, argumen [IN|OUT|IN OUT]tipe_data, ...)] RETURN tipe_data {IS|AS} [deklarasi variabel lokal] BEGIN badan fungsi END; RETURN adalah nilai yang dikembalikan oleh function. Jika terdapat RETURN dalam badan fungsi, maka itu berfungsi untuk mengembalikan kontrol kepada pemanggil fungsi bersama nilai yang dikembalikan fungsi. Sintaks:

RETURN ekspresi;
Dalam satu fungsi dimungkinkan penggunaan RETURN yang lebih dari satu tetapi bila di dalam badan fungsi tidak terdapat pernyataan RETURN maka akan terjadi error. Contoh: CREATE OR REPLACE FUNCTION tambah

(n1 number, n2 number)


RETURN number IS BEGIN return (n1+n2); END;
96 User, Privilege dan Role

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

Cara mengeksekusi : SQL > select tambah (1,8) from dual; tambah (1,8) ----------9

Contoh : CREATE OR REPLACE FUNCTION cariMahasiswa (vnim mahasiswa.nim%type) RETURN number IS v_nim mahasiswa.nim%type; BEGIN SELECT nim FROM mahasiswa WHERE nim = vnim; IF SQL%FOUND THEN RETURN 1; END IF; EXCEPTION WHEN NO_DATA_FOUND THEN RETURN 0; END cariPegawai;

Contoh pemanggilan fungsi: declare begin IF(cariMahasiswa('30108002') = 1) THEN; dbms_output.put_line('mahasiswa terdaftar'); ELSE dbms_output.put_line('mahasiswa tidak terdaftar'); END IF; end;

Stored Program

97

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

Untuk meng-compile ulang sebuah function digunakan sintaks berikut

ALTER FUNCTION nama_fungsi COMPILE;

Sedangkan untuk menghapus funsi digunakan sintaks berikut

DROP FUNCTION nama_fungsi;

7.2.2 Nested Function


Seperti nested procedure, fungsi ini adalah fungsi yang dideklarasikan dalam suatu blok PL/SQL, tidak tersimpan dalam basis data dana hanya bisa dipanggil oleh blok dimana fungsi dideklarasikan. Contoh: DECLARE jum number; FUNCTION tambah(n1 number, n2 number) RETURN number IS BEGIN RETURN(n1+n2); END tambah; BEGIN jum:=tambah(2,3); dbms_output.put_line('Hasil penjumlahan antara 2 dan 3 adalah '||TO_CHAR(jum));

END;

JENIS-JENIS FUNCTION : 1. FUNCTION TANPA PARAMETER Function ini tidak memiliki parameter/argumen biasanya bersifat statis setiap kali dieksekusi. Contoh :
User, Privilege dan Role

98

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

DECLARE FUNCTION jumMahasiswa RETURN number IS jum number; BEGIN select count(nim) into jum from mahasiswa; RETURN(jum); END jumMahasiswa; BEGIN dbms_output.put_line('Jumlah mahasiswa saat ini adalah '||TO_CHAR(jumMahasiswa));

END;

2.

FUNCTION BER-PARAMETER Sama seperti Procedure berparameter, Function ber-parameter memiliki outputan yang dinamis sesuai dengan nilai yang diassign ke parameter pada function tersebut. Adapun parameter yang dimaksud disini adalah : a. Parameter masukan Contoh : CREATE OR REPLACE FUNCTION luas_persegi_panjang (p number,l number) RETURN number IS BEGIN RETURN (p*l); END;

Stored Program

99

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

Salah satu cara untuk mengeksekusinya dengan menggunakan klausa SELECT seperti di bawah ini : SQL> SELECT luas_persegi_panjang (8,3) FROM dual; LUAS_PERSEGI_PANJANG(8,3) -----------------------------------------24 b. Parameter keluaran Contoh : CREATE OR REPLACE FUNCTION volume_tabung (r IN number, t IN number,luas OUT number) RETURN number IS pi number:=3.14; vol number; BEGIN luas:=pi*r*r; return (luas*t); END;

Misal digunakan blok PL/SQL untuk menjalankan fungsi diatas : declare L_alas number; begin dbms_output.put_line('Volume tabung paijo adalah '||volume_tabung(2,5,L_alas)); dbms_output.put_line('Luas alas lingkaran pada tabung paijo adalah '||L_alas); end;

100

User, Privilege dan Role

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

Output : Volume tabung paijo adalah 62.8 Luas alas lingkaran pada tabung paijo adalah 12.56 Contoh di atas menunjukan bahwa function dapat mengembalikan lebih dari satu nilai lewat parameter OUT. c. Parameter masukan/keluaran Contoh : CREATE OR REPLACE FUNCTION volume_tabung_ku (x IN OUT number, t IN number) RETURN number IS pi number:=3.14; vol number; BEGIN x:=pi*x*x; vol:= x*t; return (vol); END; digunakan blok PL/SQL berikut untuk menjalankan fungsi diatas : declare y number:='&jari_alas'; begin dbms_output.put_line('Volume tabung paimen adalah '||volume_tabung2(y,5)); dbms_output.put_line('Luas alas lingkaran tabung paimen adalah '||y); end;

Stored Program

101

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

Output : Enter value for jari_alas: 2 old 2: L number:='&jari_alas'; new 2: L number:='2'; Volume tabung paimen adalah 62.8 Luas alas lingkaran tabung paimen adalah 12.56

7.3 Jurnal
1. Buat sebuah procedure untuk melakukan enkripsi sebuah string yang diinputkan oleh user. jika string yang dihasilkan tetap sama maka keluarkan perintah gagal enkripsi. contoh : SQL> execute enkripsi('oh semoga nilaiku bagus'); ====================== enkripsi berhasil ====================== string sebelum enkripsi : oh semoga nilaiku bagus string sesudah enkripsi : 0h s3m0g4 n1l41ku b4gus PL/SQL procedure successfully completed. SQL> execute enkripsi('kyt kmnwxz zzbfr'); ====================== enkripsi gagal ====================== PL/SQL procedure successfully completed.

102

User, Privilege dan Role

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

2.

Buatlah fungsi untuk menghasilkan nilai biner dari suatu angka desimal. Tuliskan juga cara mengeksekusinya. Contoh: SQL> select biner(10) from dual; BINER(10)

3.

Jelaskan maksud dari procedure dibawah ini

PROCEDURE calc_bonus (emp_id IN INTEGER, bonus OUT REAL) IS hire_date DATE; bonus_missing EXCEPTION; BEGIN SELECT sal * 0.10, hiredate INTO bonus, hire_date FROM emp WHERE empno = emp_id; IF bonus IS NULL THEN RAISE bonus_missing; END IF; IF MONTHS_BETWEEN(SYSDATE, hire_date) > 60 THEN bonus := bonus + 500; END IF; ... EXCEPTION WHEN bonus_missing THEN ... END calc_bonus;

Stored Program

103

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

4.

Jalankanlah Package di bawah ini ! CREATE OR REPLACE PACKAGE lihat IS function is_kartu(id pembayaran.id_pembayaran%type) return number; procedure all_kartu; END; create or replace package body lihat is function is_kartu(id pembayaran.id_pembayaran%type) return number is kartu pembayaran.pembayaran_kartu%type; tunai pembayaran.pembayaran_tunai%type; begin select pembayaran.pembayaran_kartu, pembayaran.pembayaran_tunai into kartu, tunai from pembayaran where id=pembayaran.id_pembayaran; if kartu>=tunai then return (1); else return (0); end if; end; procedure all_kartu is cursor c_pembayaran is select * from pembayaran where is_kartu (pembayaran.id_pembayaran)=1 ;

104

User, Privilege dan Role

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

nama pemesan.nama_pemesan%type; id pembayaran.id_pembayaran%type; begin dbms_output.put_line ('---------------------------------------------------------------'); for x in c_pembayaran loop id:=x.id_reservasi; select c.nama_pemesan into nama from reservasi b, pemesan c where id=b.id_reservasi and b.id_pemesan=c.id_peme san; dbms_output.put_line (c_pembayaran%rowcount ||'. '||x.id_pembayaran||' pada tanggal '||x.tgl_pembayaran||' oleh '||nama); end loop; end; end; EXECUTE lihat.all_kartu; Apa output dari package tersebut dan Analisalah package tersebut !!

Stored Program

105

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

8 TRIGGER

Overview

Salah satu masalah dalam database adalah integritas bagaimana menjaga data agar tetap konsisten. Hal ini bisa ditangani dengan trigger yang menyerupai fungsi atau procedure yang dijalankan secara otomatis sebagai pemicu dari sebuah kondisi.

Tujuan

1. 2. 3.

Praktikan mengetahui dan mengerti trigger dalam Oracle. Praktikan mengerti manfaat dan batsan penggunaan trigger. Praktikan Mampu mengimplementasikan trigger dalam oracle.

106

User, Privilege dan Role

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

8.1 Definisi
Merupakan blok PL/SQL yang memiliki fungsi hampir sama dengan procedure maupun function , hanya saja, jika procedure atau function dijalankan secara eksplisit lewat pemanggilan procedure atau function tersebut, sedangkan untuk trigger, dijalankan secara implisit melalui perintah insert, delete atau update.

8.2 Manfaat
Manfaat trigger: Mengatur integritas dari constraint yang kompleks yang tidak mungkin ditangani oleh sintaks-sintaks pembuatan tabel. Mencegah transaksi yang tidak valid Memperbaiki keamanan database dengan menyediakan audit yang lebih kompleks mengenai informasi perubahan database dan user siapa yang melakukan perubahan. Secara otomatis memberi sinyal program lain untuk melakukan sesuatu jika isi tabel diubah.

8.3 Batasan
Trigger mempunyai batasan Tidak dapat menggunakan perintah commit dan rollback, selain itu juga tidak dapat memanggil procedure, function atau package yang menggunakan perintah commit dan rollback. Tidak dapat diimplementasikan pada kolom pada suatu tabel yang memilki constraint, jika pada akhirnya akan menyebabkan pelanggaran constraint. Biasanya terjadi akibat modifikasi pada primary key

Trigger

107

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

8.4 Struktur Dasar Trigger


SINTAKS CREATE [or replace] TRIGGER nama_trigger ( BEFORE|AFTER ) ( INSERT|UPDATE [OF nama_kolom,..]|DELETE )ON nama_tabel [FOR EACH ROW] [WHEN (kondisi)] DECLARE Deklarasi tipe data BEGIN Trigger body END;

Contoh: Create or replace trigger bef_upd_row_keuangan before Trigger Timing update of donasi on keuangan Trigger Event for each row Trigger Type when (new.donasi => 0) Trigger Restriction begin dbms_output.put('Donasi terbaru:'||:new.donasi); end; / Triggering Statement : Update keuangan set donasi=10000000 where nim=30108001 Trigger body

108

User, Privilege dan Role

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

Bagian Trigger Trigger timing

Keterangan Menunjukkan kapan trigger akan dieksekusi relatif terhadap suatu event. Jenis manipulasi data pada tabel/view yang menyebabkan trigger terpacu.

Nilai mungkin BEFORE AFER INSTEAD OF

yang

Trigger event

Trigger restriction (optional) Trigger type Trigger body

Batasan yang mengizinkan pengeksekusian trigger. Berapa kali body trigger dieksekusi. Berisi algoritma aksi yang akan dilakukan.

INSERT UPDATE DELETE CREATE ALTER DROP STARTUP SHUTDOWN LOGOFF LOGON SERVERERROR SUSPEND When (boolean value) ROW-level STATEMENT-level Blok PL/SQL

Nama trigger sebaiknya dengan jelas mencerminkan table yang diaplikasikan, Perintah DML Trigger, status before/after, dan apakah row level atau statement level. Misalnya trigger BEFORE UPDATE dengan row level pada table KARYAWAN dapat diberi nama bef_upd_row_karyawan. Triggering statement adalah statement/perintah yang menyebabkan trigger tereksekusi.
Trigger 109

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

8.5 Jenis-jenis Trigger


1. Row-level dan Statement-level Trigger Ketika membuat sebuah trigger, kita dapat menentukan berapa kali aksi trigger di dalamnya dieksekusi: 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 dimanipulasi. Penerapan trigger ini ditunjukkan oleh adanya klausa FOR EACH ROW. Row-level trigger berguna jika kode dalam trigger body bergantung pada setiap baris yang terpengaruh oleh triggering statement. Statement-level trigger dieksekusi satu kali pada saat transaksi, tanpa memperhatikan jumlah row yang terlibat. Misalnya, jika terdapat suatu transaksi yang memasukkan 1000 baris ke dalam tabel, maka statement-level trigger hanya akan dieksekusi sekali saja. Statementlevel trigger berguna jika kode dalam trigger body tidak bergantung pada baris yang terpengaruh oleh triggering statement. Secara default trigger yang dibuat adalah statement-level trigger. 2. Before and After Trigger Dalam pembuatan sebuah trigger kita dapat menentukan trigger timing yaitu apakah trigger body akan dieksekusi sebelum atau sesudah triggering statement dieksekusi. Before trigger menjalankan trigger body sebelum event atau triggering statement. Oleh karena itu, trigger ini cocok digunakan untuk mendeteksi bagaimana event boleh dilanjutkan maupun tidak. After trigger menjalankan trigger action setelah event terjadi. 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:

110

User, Privilege dan Role

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

Untuk mendapatkan data baru pada sebuah tabel di dalam trigger body, dapat dilakukan dengan perintah sebagai berikut:

:new.nama_kolom
Untuk mendapatkan data lama pada sebuah tabel di dalam trigger body, perintah yang digunakan:

:old.nama_kolom
Referensi nilai kolom di trigger: insert (new.nama_kolom) update (new.nama_kolom dan old.nama_kolom) delete (old.kolom_name) Before dan After trigger tidak dapat diimplementasikan pada view. 3. Instead Of Trigger Instead of trigger hanya akan dieksekusi bagi view dan diaktivasi jika terjadi perubahan pada base table (tabel asli). Proses yang akan dilakukan oleh triggering statement akan digantikan oleh aksi pada trigger body. 4. System Event & User Event Trigger Penggunaan trigger dapat dikelompokkan menurut event yang terjadi: System events a. Database startup & shutdown b. Server error message events c. User events User logon and logoff a. DDL statements (CREATE, ALTER, and DROP) b. DML statements (INSERT, DELETE, and UPDATE)

Trigger

111

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

Contoh 1: Tabel T_HISTORY apabila ada user yang mengubah data pada tabel KEUANGAN. Siapa usernya beserta waktu pengubahan data dan keterangan. Pertama buat dahulu tabel T_HISTORY dengan sintak dibawah ini: SQL> CREATE TABLE T_HISTORY (NAMA_USER VARCHAR2(9), WAKTU VARCHAR2(25), KET VARCHAR2(50)); Table created. Langkah kedua adalah membuat trigger untuk keperluan di atas sintaksnya sebagai berikut: CREATE OR REPLACE TRIGGER HISTORY_KEUANGAN AFTER INSERT OR DELETE ON KEUANGAN FOR EACH ROW BEGIN INSERT INTO T_HISTORY(NAMA_USER,WAKTU,KET) VALUES (USER, TO_CHAR(SYSDATE,'DD-MON-YYYY HH24:MI:SS'), 'Terjadi perubahan' ); dbms_output.put('TERJADI PENGUBAHAN PADA TABEL KEUANGAN'); END; Kemudian lakukan pengujian pada trigger di atas dengan mengisi data pada tabel keuangan dengan sintaks berikut: SQL> INSERT INTO KEUANGAN VALUES ('30108001','10000000','lunas'); TERJADI PENGUBAHAN PADA TABEL KEUANGAN 1 row created.
112 User, Privilege dan Role

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

Untuk melihat tabel T_HISTORY, gunakan sintaks berikut: SQL> select * from T_ HISTORY; NAMA_USER WAKTU KET --------- -------------------- --------------------PELATIHAN 10-AUG-2003 21:34:45 Terjadi perubahan contoh 2 : CREATE OR REPLACE TRIGGER BEF_UPD_MAHASISWA BEFORE UPDATE OF NAMA ON MAHASISWA FOR EACH ROW DECLARE VNAMA_BARU MAHASISWA.NAMA%TYPE; VNAMA_LAMA MAHASISWA.NAMA%TYPE; BEGIN VNAMA_BARU:= :NEW.NAMA; VNAMA_LAMA:= :OLD.NAMA; DBMS_OUTPUT.PUT_LINE(TELAH DIUPDATE); DBMS_OUTPUT.PUT_LINE(NIM MAHASISWA : ||:OLD.NIM); DBMS_OUTPUT.PUT_LINE(NAMA MAHASISWA LAMA : || VNAMA_LAMA); DBMS_OUTPUT.PUT_LINE(NAMA MAHASISWA BARU : || VNAMA_BARU); END;

Trigger

113

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

Contoh 3 : misal terdapat tabel STATUS_MHS untuk menyimpan status apakah donasi mahasiswa telah dilunasi CREATE OR REPLACE TRIGGER AFT_INS_KEUANGAN AFTER INSERT ON KEUANGAN FOR EACH ROW WHEN (new.donasi > 0) DECLARE BEGIN IF INSERTING THEN UPDATE STATUS_MHS SET STATUS = lunas WHERE NIM = :new.nim; END IF; END;

8.6 Cascading Trigger


Suatu trigger bisa memicu dijalankannya trigger lain, sehingga terjadi operasi trigger berantai. Dalam cascading operation seperti ini, dapat terjadi kesalahan ORA-04091 atau table is mutating. Hal ini disebabkan karena ada trigger action yang mencoba melakukan operasi query terhadap tabel yang sedang dimodifikasi. Untuk menghindari kesalahan seperti ini, maka trigger harus dimodifikasi agar tidak melakukan pengaksesan tabel yang sedang digunakan. CREATE OR REPLACE TRIGGER aft_del_row_keuangan AFTER delete ON keuangan FOR EACH ROW DECLARE n number; BEGIN select count(distinct(nim)) into n from keuangan;
114 User, Privilege dan Role

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

dbms_output.put_line(jumlah mahasiswa yang memberi donasi sebanyak || n); END; ketika dijalankan perintah berikut SQL > delete keuangan Where nim = 30108001 Pasti akan muncul kesalahan bahwa tabel keuangan is mutating

8.7 Status Trigger


Untuk mengubah status sebuah trigger dijalankan sintaks berikut Sintaks:

ALTER TRIGGER nama_trigger DISABLE | ENABLE;

Keterangan: DISABLE ENABLE

: untuk menonaktifkan trigger yang sudah dibuat : untuk mengaktifkan kembali trigger yang sudah di DISABLE. gunakan sintaks

Contoh : Untuk men-disable trigger UPDATE_MAHASISWA, berikut:

ALTER TRIGGER UPDATE_MAHASISWA DISABLE;


Untuk mangaktifkan atau menonaktifkan semua trigger yang diasosiasikan pada sebuah tabel dapat menggunakan sintaks: ALTER TABLE nama_tabel [DISABLE|ENABLE] ALL TRIGGER ;

Trigger

115

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

Sedangkan untuk menghapus trigger digunakan perintah berikut : DROP TRIGGER nama_trigger;

8.8 JURNAL
1. 2. 3. 4. Jelaskan perbedaan function, procedure, dan package! Buatlah sebuah trigger dimana ketika id_jenis pada tabel jenis diubah maka id_jenis pada tabel buku ikut berubah! Buatlah trigger dimana trigger tersebut akan menjamin nilai stok pada tabel buku berkisar antara 0 sampai 100! Jelaskan maksud trigger dibawah ini: create trigger ledger_after_ins_row before insert on LEDGER_AUDIT for each row begin call INSERT_LEDGER_DUP(:new.Action_Date, :new.Action, :new.Item, :new.Quantity, :new.QuantityType, :new.Rate, :new.Amount, :new.Person); end;

116

User, Privilege dan Role

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

9 INDEX, VIEW dan SEQUENCE

Overview

Pada Modul ini, akan dipelajari DDL pada index, view, dan sequence.

Tujuan

1. Dapat membuat index. 2. Dapat membuat view 3. Dapat membuat sequence dengan menggunakan SQL *Plus

Simple Report

117

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

9.1 INDEX
Index adalah objek schema yang berisi catatan dari nilai-nilai yang muncul pada satu kolom atau kombinasi kolom di index dari sebuah tabel. Index dibuat untuk mempercepat pengaksesan data pada suatu tabel. Index ini dibuat berdasarkan pada field field dari sebuah tabel. Index bisa dibuat secara otomatis untuk constraint primary key atau unique key dan secara manual melalui CREATE INDEX statement.

9.1.1 Membuat Index (CREATE INDEX)


Query :
CREATE INDEX nama_index ON nama_tabel(nama_field1, nama_field2,.);

Contohnya :
SQL>CREATE INDEX mahasiswa_idx mahasiswa(nim, nama, alamat ); ON

9.1.2 Memodifikasi Index (CREATE INDEX)


Query :
ALTER INDEX nama_index [INITRANS integer] [MAXTRANS integer] [STORAGE storage_clause]

Contoh :
SQL > ALTER INDEX mahasiswa_idx INITRANS 10;

118

User, Privilege dan Role

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

9.1.3 Mengubah Nama Index


Queri :
ALTER INDEX nama_index_lama RENAME TO nama_index_baru;

contoh :
ALTER INDEX mahasiswa_idx RENAME TO mhs_idx;

9.1.4 Menghapus Index (CREATE INDEX)


Query : DROP INDEX nama_index; Contoh :
SQL > DROP INDEX mahasiswa_idx;

9.2 Segmen Index


Segmen indeks dibuat ketika indeks diciptakan. Untuk setiap indeks nonpartisi akan terdapat satu segmen indeks sedang pada indeks terpartisi, setiap partisi memiliki satu segmen indeks. Pada saat indeks dibuat melalui perintah create index, proses server melakukan operasi sort nilai data yang diindeks sebelum berubah menjadi segmen indeks. Segmen indeks tidak harus berada dalam satu tablespace yang sama dengan segmen datanya. Script di bawah membuat tablespace khusus untuk menampung indeks yang terpisah dengan segmen data.

Simple Report

119

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

--MEMBUAT SEGMEN INDEKS


SQL> CREATE TABLESPACE personal_index DATAFILE 2 E:\ORACLE\ORADATA\T3TAN\personal_index.ORA 3 SIZE 12M REUSE AUTOEXTEND ON 4 NEXT 128K MAXSIZE 100M 5 EXTENT MANAGEMENT LOCAL; SQL> CREATE INDEX ferry.notes_id 2 ON ferry.notes(A) 3 TABLESPACE personal_index PCTFREE 40 INITRANS 4 4 STORAGE (INITIAL 16384 NEXT 8192 PCTINCREASE 0); SQL> SET HEADING OFF SQL>COL hdg FOLD_BEFORE SQL>SELECT Ukuran bytes : hdg, 2 Jumlah Blok : hdg, 3 Jumlah Extents : 4 Initial Extent : initial_extents, 5 Min Extent : hdg, 6 Max Extent : hdg, 7 Free List : hdg, 8 Free List Group : freelist_group, 9 Header File : 10 Header Block : hdg, 11 Tipe Segmen : hdg, 12 13

bytes, blocks, hdg, extents, min_extent, max_extent, freelist,

hdg,

hdg,

hdg, header_file, header_block, tipe_segmen,

FROM dba_segments WHERE segment_name=NOTES_ID; 589824 72 9 : 16384 1 2117483645 : 1 : 1 19 9 INDEX


User, Privilege dan Role

Ukuran bytes : Jumlah Bit : Jumlah Extent : Initial Extent Min Extent : Max Extent : Freelist Freelist Group Header File : Header Block : Tipe Segmen :
120

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

SQL> SET HEADING ON SQL> SELECT extent_id, block_id, bytes, blocks 2 FROM dba_extents 3 WHERE segment_name= NOTES_ID EXTENT_ID 0 1 2 3 4 5 6 7 8 LOCK_ID 9 17 25 33 41 49 57 65 73 BYTES 65536 65536 65536 65536 65536 65536 65536 65536 65536 BLOCKS 8 8 8 8 8 8 8 8 8

Tablespace untuk indeks ditentukan melalui statement pembuatan indeks dan parameter storage dapat disertakan untuk menetapkan karakteristik extent dari suatu segmen indeks. Tampak bahwa indeks pada tabel notes dengan kunci indeks kolom A mempersiapkan 9 extent dengan total 72 blok data.

9.3 Menentukan Indeks


Developer membuat indeks agar unjuk kerja aplikasi lebih baik. Perintah create index menghasilkan indeks dengan entry berupa nilai data yang diperoleh dari suatu kolom tunggal, gabungan beberapa kolom, ekspresi, dan fungsi. Ketika bekerja dengan indeks disarankan untuk mengacu pada kolom-kolom yang diindeks agar meningkatkan performansi join tabel, buatlah indeks dengan urutan kolom-kolom tabel yang tepat atau yang sering digunakan pada klausa where agar indeks digunakan untuk pencarian row. Pada pembuatan primary dan unique key secara otomatis akan dihasilkan indeks, begitu juga ketika primary dan unique key itu dihapus maka indeksnya secara otomatis dihapus. Untuk menghindari proses pembuatan indeks secara otomatis itu buatlah terlebih dahulu indeks non-unik berdasarkan primary key dan unique key. Selain itu buatlah juga indeks pada foreign key. Kolom yang dipilih sebagai bagian dari indeks sebaiknya mengandung nilai data yang unik atau kolom yang sering digunakan dalam klausa where. Jika perbedaan nilai data dari suatu atau beberapa kolom sangat bervariasi,
Simple Report 121

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

gunakan indeks B-Tree. Sedangkan untuk nilai data yang kurang bervariasi gunakan bitmap.

9.3.1 Ekspresi Tunggal


Indeks ini menggunakan satu kolom sebagai kunci indeksnya. Misalnya untuk kemudahan akses data penduduk menurut nama penduduk dilakukan dengan perintah create index penduduk on kependudukan(upper(nama)).

9.3.2 Ekspresi Gabungan


Indeks ini dikenal juga sebagai concatenated atau composite index yaitu indeks yang menggunakan beberapa kolom suatu tabel untuk membentuk indeks entry. Jumlah kombinasinya dapat dibuat hingga 32 kolom namun dalam prakteknya penggunaan lebih dari lima kolom jarang digunakan. Anggaplah terdapat suatu tabel kependudukan yang terdiri dari kolom kabupaten, kecamatan, kelurahan, serta beberapa kolom untuk entitas penduduk. Apabila tabel itu diindeks, kunci indeksnya bisa berupa create index pddk_ix on penduduk (kab, kec, kel, nama) . Dengan demikian susunan indeks entrinya diurutkan menurut kabupaten, kecamatan, kelurahan, dan nama penduduk. Untuk memanfaatkan indeks, query harus dilakukan dengan memperhatikan susunan kondisi klausa where, misalnya select * from penduduk where kab=PNK and kec=SEL and kel=BANGKA.

9.4 Jenis-jenis Indeks


Untuk performansi query Oracle mendukung penerapan indeks B-Tree yang merupakan indeks default, indeks bitmap untuk kumpulan key yang cardinality-nya rendah, indeks pada cluster B-Tree dan hash, indeks global dan lokal untuk partisi tabel, indeks reverse key pada aplikasi real application cluster (RAC), indeks function-based pada key yang berupa ekspresi atau fungsi, serta indeks domain untuk aplikasi atau cartridge. 1. Indeks B-Tree Indeks ini menyimpan key dan rowid pada struktur B-Tree untuk menangani transaksi dengan intensitas tinggi dan cocok digunakan pada kolom-kolom tabel dengan cardinality tinggi atau mengandung nilai data yang sangat
122 User, Privilege dan Role

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

beragam. Ketika transaksi berlangsung, nilai data pada tabel dan pohon indeks diperbarui. Apabila terjadi query, rowid yang digunakan untuk menemukan letak row data dalam tabel dicari pada indeks. Jadi pada indeks ini rowid untuk setiap key dari masing-masing row tabel akan disimpan dalam indeks. Perintah create index boy.kar_idx on boy.karyawan (nik) akan menghasilkan indeks B-Tree dan cocok untuk menangani transaksi OLTP karena update terhadap kolom yang dindeks dapat berlangsung secara cepat melalui penerapan penguncian pada level row. 2. Indeks Bitmap Berbeda dengan indeks B-Tree yang secara default menyimpan rowid, indeks bitmap menyimpan suatu bitmap untuk setiap nilai kunci pada node leaf. Bitmap itu merupakan pengenal yang disusun oleh sejumlah bit dan dipetakan ke rowid. Jika bitnya diset, berarti baris dengan sejumlah rowid yang bersesuaian mengandung nilai key. Indeks bitmap sangat efektif untuk query yang mengandung banyak kondisi pada klausa where dengan and dan or karena operasi itu secara langsung membandingkan bitmap sebelum mengkonversi bitmap ke rowid. Indeks ini menggunakan space yang lebih kecil dan cocok untuk hardware dengan prosesor dan memori yang terbatas. Indeks bitmap cocok untuk menangani data berukuran besar dengan tingkat transaksi kecil atau pada lingkungan data warehouse serta kolom-kolom dengan cardinilty rendah. Namun mungkin saja DBA membuat indeks bitmap pada kolom dengan cardility yang tinggi untuk lingkungan data warehouse. Untuk data warehouse dengan star schema gunakan indeks bitmap join yang merupakan fungsionalitas baru di Oracle10g. Jika kolom pada dimension table digunakan untuk membatasi data yang dipilih dari fact tabel (dengan foreign key) dan n dimension tabel (dengan primary key), indeks bitmap join bisa menghindari operasi join antartabel tersebut. Cardinality rendah merupakan kolom dengan nilai data berulang atau kolom yang perbedaan nilai datanya sangat kecil dibandingkan jumlah row-nya. Cardinality dapat dilihat pada tabel karyawan berikut ini. NIK 100 101 102 103 104 Nama Goge Titin Beni Joel Susan Kelamin Laki-laki Perempuan Laki-laki Laki-laki Perempuan Status Menikah Janda Belum Menikah Duda Menikah Dept 02 01 03 05 03

Simple Report

123

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

Kolom kelamin, status, dan memiliki cardinality rendah karena itu tepat untuk menggunakan indeks bitmap misalnya create index boy.kar_depix bitmap on boy.karyawan(dept); sedangkan nik dan nama memiliki cardinality tinggi sehingga indeks B-Tree dapat diterapkan. 3. Indeks Reverse Jika dibandingkan dengan indeks B-Tree, indeks reverse key membalik (reverse) byte setiap kolom yang diindeks (kecuali rowid) dan mempertahankan urutan kolomnya agar perubahan dapat disebar pada beberapa block indeks. Misalnya jika nilai suatu kolom yang diindeks adalah 1234 maka indeks reverse menggunakan angka 4321 agar pemutakhiran pohon indeks tersebar pada beberapa leaf blok. Oleh karena itu indeks ini cocok digunakan jika kolom-kolom yang diindeks memiliki nilai data yang berurutan atau mirip. Indeks ini digunakan pada real application cluster (RAC) di mana perubahan indeks dilakukan pada kumpulan blok leaf yang kecil. Dengan me-reverse key yang diindeks maka insert akan tersebar pada berbagai leaf suatu pohon indeks.

MEMBUAT INDEKS REVERSE.


SQL> CREATE INDEX sales_wiltglstok ON 2 sales (wilayah, tgl, stok) COMPRESS REVERSE; SQL> ALTER INDEX sales_wiltglstok REBUILD; --Mengubah indeks reverse menjadi noreverse SQL> ALTER INDEX sales_wiltglstok REBUILD NOREVERSE;

Perintah pertama membuat reverse indeks, sedangkan perintah kedua melakukan rebuild indeks. Apabila indeks ini akan diubah ke mode default, gunakan klausa NOREVERSE untuk menormalkan pola penyimpanan key pada pohon indeks. Pencarian data dengan range-scanning tidak dapat diterapkan pada reverse indeks karena kunci indeks tidak lagi disimpan secara berdekatan sehingga pengambilan data hanya dapat dilakukan melalui key yang ditentukan atau fulltable scan.

124

User, Privilege dan Role

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

4. Indeks Fungsi Indeks ini menggunakan fungsi (funtion-based index) untuk mendefinisikan kunci indeksnya.

MEMBUAT INDEKS FUNGSI.


SQL> CREATE INDEX nama_ix ON penduduk(UPPER(nama)); SQL> CREATE INDEX idx1 ON stat_sales(funcsal); --Menghasilkan statistic index SQL> ANALYZE INDEX idx1 VALIDATE STRUCTURE;

Perintah pertama menghasilkan indeks entry dengan mengkapitalkan nama penduduk melalui fungsi built in upper. Pada contoh kedua digunakan fungsi PL/SQL. funcsal yang harus ditentukan deterministic dan parameter inisialisasi QUERY_REWRITE_ENABLED, QUERY_REWRITE_INTEGRITY bernilai TRUE dan TRUSTED. Tabel stat_sales itu dapat dianalisa setelah indeks dibuat dan query harus tidak memerlukan nilai null.

9.5 Menghindari Duplikasi Data


Indeks mengorganisasikan row sehingga kolom-kolom yang digunakan sebagai kunci indeks menyimpan nilai kolom yang ditentukan dalam ekspresi indeksnya. Pada indeks dengan ekspresi tunggal maupun composite di atas, penataan entitas penduduk memungkinkan adanya indeks entri yang sama. Agar indeks memelihara keunikan penduduk sehingga tidak ada duplikasinya, gunakan klausa UNIQUE pada ekspresi indeksnya. Misalnya create unique index pddk_uq on penduduk(ktp). Indeks ini memastikan tidak adanya duplikasi row sehingga bisa menjadi kandidat untuk primary key.

Simple Report

125

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

9.6 Keputusan Rebuild Indeks


Pemeliharaan indeks untuk membuat ulang (rebuild) indeks dilakukan melalui perintah alter indexrebuild. Jika terjadi korupasi indeks, mungkin saja rebuild indeks tidak berhasil karena masih ada korupsi indeks setelah proses rebuild. Untuk kasus ini, drop index kemudian create index yang dihapus tersebut. Jika operasi DML sering dikerjakan, indeks suatu tabel mungkin tidak tersebar secara merata pada pohon indeks. Oleh karena itu perlu pengecekan untuk menentukan bilamana indeks perlu direbuild.

MEMERIKSA BRANCH LEVEL INDEKS B-TREE.


--Ambil statistik indeks SQL> ANALYZE INDEX tes_idx_idx COMPUTE STATISTICS; Index Analyzed --Cek BLevel SQL> SELECT index_name, blevel, DECODE(blevel,0,OK BLEVEL, 1,OK BLEVEL, 2,OK BLEVEL, 3,OK BLEVEL, 4,OK BLEVEL,BLEVEL HIGH) keterangan FROM dba_indexes WHERE owner=BOY ORDER BY bleave; INDEX_NAME BLEVEL KETERANGAN BUDVERPORT_ORG_FK_I 0 OK BLEVEL SKS_C006134 0 OK BLEVEL BUDVERPORT_BUDVERIORT2_UK 1 OK BLEVEL BUDVERPORT_PL_TITLE_FK_I 1 OK BLEVEL BUDVERPORT_BV_FK_I 2 OK BLEVEL BUDVERPORT_DIRCTE_FK_I 3 OK BLEVEL S_WAREHOUSE_ID_FK 4 OK BLEVEL TES_IDX_IDX 5 BLEVEL HIGH A1_PP BLEVEL HIGH A1_UK BLEVEL HIGH S_ITEM_ORDID_ PRODID_UK BLEVEL HIGH

BLEVEL pada data dictionary DBA_INDEXES adalah B-Tree level atau branch level yang menunjukkan kedalaman atau level indeks dari node root. Level nol menunjukkan node root dan node leaf yang sama. Jika nilai blevel lebih dari empat maka direkomendasikan untuk me-rebuild indeks. Nilai blevel diperoleh setelah indeks dianalisa sehingga nilai blevel yang kosong atau
126 User, Privilege dan Role

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

keterangan BLEVEL HIGH menunjukkan indeks yang belum dianalisa. Untuk itu indeks tes_idx_idx dengan blevel 5 perlu di-rebuild dengan perintah alter index tes_idx_idx rebuild.

9.6.1 Rebuild Indeks Online


Oracle10g index nama_idx remendukung rebuild indeks dan pembuatan statistiknya secara online dengan perintah alter index nama_idx rebuild compute statistics online. Pada versi terdahulu proses itu melibatkan statement alter index nama_idx rebuild online dan alter index nama_idx rebuild compute statistics. Mulai Oracle10g, proses tadi dapat dilakukan pada indeks reverse key, function-based maupun indeks reguler dan IOT. Peningkatan itu memungkinkan user untuk tetap mengakses indeks sementara rebuild dan statistik indeks dibuat. Opsi online memperbolehkan operasi DML pada tabel atau partisi berlangsung sementara pembuatan indeks dan statistik dikerjakan. Setelah rebuild selesai, indeks yang lama di-drop. Jika opsi online tidak disertakan maka tabel akan dikunci hingga proses rebuild indeks berakhir. Jika digunakan opsi online nologging maka informasi redo tidak dihasilkan.

9.7 Keputusan Mengubah Indeks


Perbedaan nilai data kolom (cardinality) yang diindeks juga dapat menjadi acuan untuk keputusan me-rebuild indeks atau mengubah jenis indeks.

CARDINALITY INDEKS.
SQL> ANALYZE INDEX boy.tes_idx_idx VALIDATE STRUCTURE; Index Analyzed SQL> SELECT del_lf_rows *100/ 2 DECODE(lf_rows, 0,1,lf_rows) PCT_DELETED, 3 (lf_rows distinct keys) *100/ 4 DECODE(lf_rows,0,1, lf_rows) DISTINCTIVENESS 5 FROM index_stats 6 WHERE NAME=&index_name; Enter value for index_name: TES_IDX_IDX
Simple Report 127

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

Old New

6: 6:

WHERE NAME=&index_name WHERE NAME=TES_IDX_IDX

PCT_DELETED DISTINCTIVENESS ----------- --------------16.7724777 910.9142073

Kolom pct_deleted menunjukkan persentase leaf (index entry) yang telah dihapus dan masih belum diisi. Semakin banyak persentasenya , pohon indeks menjadi tidak balance. Sebagai acuan jika pct_deleted bernilai di atas 20 persen, indeks itu perlu di-rebuild. Namun angka di atas 10 persen juga dapat dijadikan dasar untuk me-rebuild indeks lebih sering. Kolom distictiveness menunjukkan seberapa sering suatu nilai kolom yang diindeks berulang. Misalnya jika suatu tabel memiliki 10000 row dan ada 9000 variasi nilai untuk kolom yang diindeks maka berdasarkan formula script di atas diperoleh hasil 10. Angka ini menunjukkan distribusi yang baik untuk indeks. Jika untuk 10000 row hanya terdapat variasi dua nilai data maka diperoleh hasil 99,98. Ini berarti hanya sedikit variasi nilai data terhadap seluruh yang ada pada kolom yang diindeks. Kolom ini bukan merupakan calon untuk proses rebuild indeks tetapi sebaiknya dibuatkan indeks bitmap.

9.8 Sumber informasi


Keberadaan indeks dapat diketahui dengan mengakses data dictionary DBA_IND_CLOUMNS berikut ini:
--MENGAMBIL

INFORMASIINDEKS.

SQL> SELECT index_name, index_type, status 2 FROM dba_indexes 3 WHERE owner=BOY; INDEX_NAME INDEX_TYPE STATUS -----------------------------------------------PEG_DEP_REVERSE NORMAL/REV VALID KAR_DEP_BITMAP BITMAP VALID KOTA_PENDUDUK_NDX CLUSTER VALID NAMA_IX FUNTION-BASED NORMAL VALID
128 User, Privilege dan Role

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

PK_PELATIHAN PROD_IDX SYS_C002976 SYS_I00000033455C00002$$ TES_IDX_IDX

IOT-TOP NORMAL NORMAL LOB NORMAL

VALID N/A VALID VALID VALID

SQL>SELECT index_name, table_name, column_name 2 FROM dba_ind_columns 3 WHERE index_owner=BOY 4 ORDER BY table_name; INDEX_NAME TABLE_NAME COLUMN_NAME --------------------------------------------------SYS_C002985 DAFKURSUS SYS_NC0000600007$ SYS_C002986 DAFKURSUS SYS_NC_OID$ SYS_IOT_TOP_33369 EMPSUS_TAB NESTED_TABLE_ID SYS_IOT_TOP_33369 EMPSUS_TAB NO PEG_DEP_REVERSE PEGAWAI DEPT_NO KAR_DEP_BITMAP KARYAWAN DEPT_NO SYS_C003094 PRODUKSI_RANGE NIK PROD_IDX PRODUKSI_RANGE TGL TED_IDX_IDX TES_IDX A1 SQL>SELECT o.object name 2 FROM sys.dba_objects o 3 WHERE owner = BOY AND o.object_id 4 IN (SELECT i.obj# FROM sys.ind$ I WHERE 5 BITAND(i.property,4)=4); OBJECT_NAME ----------------------------------------------------PEG_DEP_REVERSE

9.9 Partisi Indeks


Seperti halnya table, indeks dapat juga dipartisi. Table terpartisi dapat menggunakan indeks terpatisi maupun indeks non-partisi. Demikian pula sebaliknya suatu table non-partisi dapat menggunakan indeks terpartisi maupun indeks non-partisi.
Simple Report 129

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

9.9.1 Indeks Global


Indeks global dapat dipartisi secara range dan cocok digunakan untuk mengakses row secara OLTP. Pada partisi indeks global terdapat batas partisi misalnya maxvalue. Penambahan partisi pada indeks global tidak bisa dilakukan karena partisi tertinggi telah dibatasi dengan maxvalue. Untuk tujuan itu, partisi harus dibagi melalui statement alter indexsplit partition.

MEMBUAT INDEKS GLOBAL.


SQL> CREATE INDEX prod_idx ON produksi_range(tgl) 2 GLOBAL PARTITION BY RANGE(tgl) 3 (PARTITION prod1_idx VALUES LESS THAN( 4 TO_DATE(01-11-2003,DD-MM-YYYY)), 5 PARTITION prod2_idx VALUES LESS (MAXVALUE)); Index created

THAN

Setiap partisi indeks itu diberi nama dan disimpan pada tablespace indeks default. Agar pemutakhiran indeks global selalu dilakukan, sertakan klausa update global indexes pada setiap statement yang melibatkan operasi DDl pada partisi.

9.9.2 Indeks Lokal


Partisi indeks local umumnya digunakan pada lingkungan data warehouse atau decision support system (DSS) dimana setiap partisi table berhubungan dengan satu partisi indeks local. Untuk lingkungan OLTP dapat digunakan indeks local yang unik dengan ketentuan bahwa partition key suatu table harus merupakan kunci bagi indeks tersebut. Suatu partisi indeks local bersifat independen sehingga status unusable suatu indeks local tidak mempengaruhi status indeks local lainnya. Penambahan partisi pada indeks local tidak bisa dibuat secara eksplisit tetapi dihasilkan ketika suatu partisi baru ditambahkan. Demikian pula sebalikny, drop partisi dari indeks local hanya dapat dilakukan ketika partisi tablenya di-drop. Indeks local dibentuk menurut struktur table dasarnya dan bersifat equipartitioned sehingga indeks local dipartisi menurut kolom yang sama dengan table dasarnya dan menggunakan jumlah partisi atau subpartisi yang sama pula.

130

User, Privilege dan Role

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

9.10 Mengidentifikasi Indeks Unused


Indeks mempercepat pembacaan data dengan mengambil rowid dari phon indeks untuk selanjutnya mengambil data di table. Jika pada table terjadi perubahan data dari kolom yang diindeks maka pohon indeks harus dimutakhirkan. Suatu table dapat memiliki beberapa indeks dan mungkin saja dari sekian indeks itu terdapat indeks yang sebenarnya tidak digunakan. Oracle10g dapat mendeteksi bilamana suatu indeks sedang digunakan atau tidak diperlukan berdasarkan waktu yang digunakan. Indeks yang tidak digunakan harus di-drop karena menambah overhead. Untuk mengamati indeks gunakan perintah alter indeks nama_indeks monitoring usage. Setelah anda yakin bahwa dalam selang waktu tertentu operasi yang melibatkan indeks pasti sudah dilakukan, hentikan pemantauan indeks dengan alter indeks nama_indeks nomonitoring usage.

MEMANTAU INDEKS UNUSED. --Buat table SQL> CREATE TABLE kanwil (kode SQL> INSERT INTO kanwil VALUES SQL> INSERT INTO kanwil VALUES SQL> INSERT INTO kanwil VALUES SQL> INSERT INTO kanwil VALUES SQL> COMMIT;

NUMBER(5), (1,KANWIL (2,KANWIL (3,KANWIL (4,KANWIL

nama VARCHAR2(10)); I); II); III); IV);

--Buat indeks primary key SQL> ALTER TABLE kanwil ADD( 2 CONSTRAINT kanwil_pk PRIMARY KEY (kode)); Table altered. --Monitoring indeks belum bekerja SQL> SELECT index_name, monitoring, used, 2 start_monitoring, end_monitoring 3 FROM v$object_usage; No row selected --Aktifkan monitoring indeks SQL> ALTER INDEX kanwil_pk MONITORING USAGE; Index altered. --Monitoring indeks diaktifkan SQL> SELECT index_name, monitoring, used, 2 start_monitoring, end_monitoring 3 FROM v$object_usage; INDEX_NAME MONITORING USED START_MONITORING END_MONITORING ---------------------- ----------------------------------KANWIL_PK YES NO 01/31/2004 01:30:16 --Buat table PLAN_TABLE jika belum ada. SQL> @D:\ora9i\rdbms\admin\ut1xplan.sql --Tracing rencana eksekusi

Simple Report

131

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

SQL> SET AUTOTRACE ON EXPLAIN SQL> SELECT * FROM kanwil WHERE kode =1; KODE NAMA ---------- -----------1 KANWIL I Execution Plan -------------------------------------------------------------------------0 SELECT STATEMENT Optimizer=CHOOSE 1 0 TABLE ACCESS (BY INDEX ROWID) OF KANWIL 2 1 INDEX (UNIQUE SCAN) OF KANWIL_PK (UNIQUE) SQL> SET AUTOT OFF --Jalankan query SQL> SELECT * FROM kanwil WHERE kode =1; SQL> SELECT index_name, monitoring, used, 2 start_monitoring, end_monitoring 3 FROM v$object t_usage; INDEX_NAME MONITORING USED START_MONITORING END_MONITORING ---------------------- ---------------------------------KANWIL_PK YES YES 01/31/2004 01:45:47 --Akhiri monitoring indeks SQL> ALTER INDEX kanwil_pk NOMONITORING USAGE; Indes altered. SQL> SELECT index_name, monitoring, used, 2 start_monitoring, end_monitoring 3 FROM v$object_usage; INDEX_NAME MONITORING USED START_MONITORING END_MONITORING ----------- ---------- --------------------------------------KANWIL_PK NO YES 01/31/2004 01:45:47 01/31/2004 01:47:07

View dictionary V$OBJECT_USAGE berisi informasi indeks yang dimonitor untuk mengetahui indeks yang telah digunakan. Jika kolom used bernilai yes maka indeks pernah digunakan selama selang waktu tertentu berdasarkan kolom start_monitoring dan end_monitoring. Kolom monitoring bernilai yes jikamonitoring indeks sedang berlangsung dan berakhir setelah perintah monitor menghentikan monitor indeks dijalankan. Untuk memantau indeks dalam ruang lingkup database maka perintah alter indexmonitoring usage harus dilakukan bagi setiap nama indeks. Untuk it u perlu dibuat script yang menghasilkan statement tersebut dengan membaca data dictionary DBA_INDEXES baik script untuk memulai maupun menghentikan monitoring indeks.

132

User, Privilege dan Role

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

MEMERIKSA INDEKS UNUSED SCOPE DATABASE.


--Buat file script untuk start monitor indeks SQL> SPOOL D:\STARTMONITOR.SQL SQL> SELECT ALTER INDEX ||OWNER|| 2 .||INDEX_NAME||MONITORING USAGE; 3 FROM DBA INDEXES 4 WHERE OWNER NOT IN (SYS,SYSTEM); SQL> SPOOL D:\STOPMONITOR.SQL SQL> SELECT ALTER INDEX ||OWNER|| 2 .||INDEX_NAME||NOMONITORING USAGE; 3 FROM DBA INDEXES 4 WHERE OWNER NOT IN (SYS,SYSTEM); SQL> SPOOL OFF --Edit file startmonitor.sql seperlunya --dan jalankan monitor SQL> @D:\startmonitor --Edit file stopmonitor.sql seperlunya --dan hentikan monitoring indeks setelah periode tertentu SQL> @D:\stopmonitor --Periksa index yg tidak pernah digunakan selama periode SQL> SELECT d.owner, v.index_name 2 FROM dba_indexes d, v$object_usage v 3 WHERE v.used=NO AND d.index_name=v.index_name; Setelah pemantauan berakhir query dictionaru DBA_INDEXES dan V$OBEJCT_USAGE untuk mengetahui nama indeks yang tidak pernah digunakan melalui kolom unused dan view V$OBEJCT_USAGE.

9.11 VIEW
View adalah sebuah virtual tabel yang dibangun dari satu atau beberapa tabel yang sudah ada, baik berdasarkan kondisi tertentu ataupun tidak. Secara fisik view tidak menyimpan record seperti pada tabel, tetapi ia menyimpan data berupa pointer yang menunjukkan ke record yang bersangkutan di dalam tabel.

Simple Report

133

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

Sumber data view dapat berasal dari table atau view lain. Mirip dengan table, Anda dapat melakukan update, delete, dan insert pada view sehingga perubahan itu akan direfleksikan pada base tabelnya. Berbeda dengan table, view tidak menyimpan data, view hanya menyimpan definisi query pada data dictionary dan tidak memerlukan ruang penyimpanan data. Penerapan view dapat diaplikasikan pada situasi berikut : Membatasi akses sesuai otoritas user Memudahkan pemahaman tehadap kolom penampung data yang mungkin berbeda dengan definisi kolom pada table dasar Menyederhanakan pandangan user terhadap data Menangani data kompleks Memudahkan penggunaan quey yang berulang karena disimpan sebagai stored query

9.11.1

Membuat View (CREATE VIEW)

Query : CREATE [or replace] [force] [noforce] VIEW nama_view [(nama_field1, )] AS subquery [with check option] or replace noforce force with check option : mendefinisikan kembali view yang sudah ada : view hanya akan dibuat jika tabel induk telah dibuat. : view dapat dibuat walau tabel induk belum dibuat. : view akan menvalidasi data yang diinsert atau diupdate ke view

Contoh : SQL > CREATE or REPLACE VIEW mahasiswa_view (nim, nama, alamat) AS SELECT nim, nama, alamat FROM mahasiswa WHERE alamat != with check option;
134 User, Privilege dan Role

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

9.11.2
Query :

Memodifikasi View (ALTER VIEW)

Alter view digunakan untuk mengkompilasi ulang sebuah view. ALTER VIEW nama_view COMPILE; Contoh : SQL > ALTER VIEW mahasiswa_view COMPILE:

9.11.3
Query :

Menghapus View (DROP VIEW)

DROP VIEW nama_view; Contoh : SQL > DROP VIEW mahasiswa_view;

View Read-Only
View yang ditujukan hanya untuk dibaca saja, dibuat dengan menyertakan klausa with read only. Sebagai gambarannya, berikut ini didefinisikan objek table dan view yang diciptakan dalam satu kali transaksi melalui create schema.

MEMBUAT VIEW READ ONLY.


SQL> CREATE SCHEMA AUTHORIZATION boni 2 CREATE TABLE boy.dept ( 3 no NUMBER (4) NOT NULL PRIMARY KEY, 4 nama VARCHAR2 (20) NOT NULL 5 CREATE TABLE boy.karyawan ( 6 nik NUMBER(4) NOT NULL, 7 dept_no NUMBER(4) NOT NULL, 8 nama VARCHAR2(20), 9 PRIMARY KEY(nik), 10 FOREIGN KEY(dep_no) REFERENCES boy.dept(no) 11 ON DELETE CASCADE 12 CREATE VIEW dep_karyawan_rw 13 AS SELECT a.nik, a.nama AS "Nama Karyawan", 14 a.dept_no, b.nama "Department" 15 FROM boy karyawan a, boy.dept b
Simple Report 135

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

16 WHEREa.dept_no = b.no 17 CREATE VIEW dep_karyawan_rro 18 AS SELECT a.nik, a.nama AS "Nama Karyawan", 19 a.dept_no, b.nama "Department" 20 FROM boy karyawan a, boy.dept b 21 WHEREa.dept_no = b.no 22 WITH READ ONLY; Schema created. SQL> INSERT INTO SQL> INSERT INTO SQL> INSERT INTO SQL> INSERT INTO SQL> INSERT INTO SQL> INSERT INTO SQL> INSERT INTO SQL> COMMIT Commit complete. boy.dept VALUES (100,'SDM'); boy.dept VALUES (100,'Produksi'); boy.dept VALUES (100,'Pemasaran'); boy.karyawan VALUES (100,'SDM'); boy.karyawan VALUES (100,'SDM'); boy.karyawan VALUES (100,'SDM'); boy.karyawan VALUES (100,'SDM');

View dep_karyawan_ro merupakan view read-only yang menggunakan table karyawan dan dept. View ini hanya dapat dibaca saja dan menghindari manipulasi data dengan delete, insert, atau update melalui view.

MEMANIPULASI PADA VIEW READ ONLY.


SQL> SELECT nik, "Nama Karyawan", "Departmen" 2 FROM dep_karyawan_ro; NIK Nama KARYAWAN Deaprtmen ----------------------------------------------------1 Isman SDM 2 Nova SDM 3 Donda Produksi 4 Rino Pemasaran SQL> INSERT INTO dep_karyawan_ro 2 (nik, dept_no,"Nama Karyawan") 3 VALUES (5,2.0,'Didik'); ORA-017333: virtual column not allowed here SQL> SELECT column_name, updatable
136 User, Privilege dan Role

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

2 3

FROM user_updatable columns WHERE table_name = 'DEP_KARYAWAN_RO';

COLUMN_NAME -----------------------------------NIK NO Nama_karyawan NO DEPT_NO NO Department NO

View dep_karyawan_ro didefinisikan dengan empat kolom dimana referensi terhadap kolom karyawan.nama dialisakan menjadi Deaprtmen. Ini berarti referensi terhadap kolom itu bersifat case sensitive karena dinyatakan dalam tanda petik , pada statement kedua tampak bahwa insert tidak dapat dilakukan ORA17333 da iyu dibuktikan melalui dictionary USER_UPDATABLE_COLUMNS yang melaporkan bahwa kolom-kolom view itu tidak dapat diupdate.

View Updatable
Meskipun view tidak menyimpan data seperti table, perubahan terhadap base table dapat dilakukan melalui view seperti ditunjukkan pada script berikut :

MANIPULASI PADA VIEW UPDATABLE.


SQL> SELECT column_name, updatable 2 FROM user_updatable_columns 3 WHERE table_name = 'DEP_KARYAWAN_RW'; COLUMN NAME UPD ----------------------------------NIK YES Nama Karyawan YES Dept_NO YES Departmen NO SQL> INSERT INTO dep_karyawan_rW 2 (nik, dept_no,"Nama Karyawan") 3 VALUES (5,200,'Didik'); 1 ROW CREATED

Simple Report

137

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

SQL> SELECT * FROM dep_karyawan_rw; NIK NAma Karyawan Dep_no Departmen ----------------------------------------1 Isaman 100 SDM 2 nova 100 SDM 3 donda 200 Produksi 4 rino 300 Pemasaran 5 didik 200 Produksi

View dep_karyawan_rw memiliki tiga kolom yang dapat diupdate dan melalui statement insert di atas , penabahan data pada view tersebut akan direfleksikan pada table karyawan.

Materialized View
Materialized view (MV) merupakan objek schema yang berisi hasil query. Tabel-tabel yang digunakan pada query dapat berupa hasil, view atau MV lain yang disebut sebagai table master (replikasi) atau table detail (data warehouse) dan informasinya tersedia pada dictionary ALL_MVIEWS, DBA_MVIEWS, dan UESR_MVIEWS. Materialized view atau snapshotini digunakan pada database terdistribusi untuk membuat aplikasi dengan sinkronisasi data pada berbagai site maupun untuk data warehouse yang mempersiapkan dan menyimpan data agregat. MV meningkatkan kecepatan akses query melalui perkalkulasi join dan operasi agregat sebelum menjalankan dan menyimpan hasinya pada database. Ketika query terhaap MV dilakukan, query optimizer akan mengetahui bilamana MV yang ada dapat digunakan dan segera mengakses MV, bukan ke table detail (query rewrite) Membuat Materialized View Privilege pembuatan MV haus di-grant secara langsung jadi tidak melalui role. Untuk membuat MV pada Schema user diperlukan priviledge system create materialized view dan create table atau create any table serta previlege system select any table. Sedangkan pembuatan MV pada schema user lain memerlukan previledge system create any materialized view. Untuk dapat membuat MV yang berisi summary jumlah penduduk setiap kota dapat dibuat denagn cara berikut ini :
138 User, Privilege dan Role

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

MEMBUAT MATERIALIZED VIEW.


SQL> CREATE MATERIALIZED VIEW ivana.SNAP_KOTA 2 BUILD IMMEDIATE REFRESH FORCE 3 OF DEMAND AS 4 SELECT k.namakota, COUNT(p.nama) jml_penduduk 5 FROM boy.kota k, boy.penduduk p 6 WHERE k.nokota=p.nokota 7 GROUP BY k.namakota; Materialize view created SQL> SELECT * FROM ivana.Snap_kota; NAMAKOTA JML_PENDUDUK -------------------------------------------Pontianak 700000 mempawak 1200000 sintang 500000 ...

Perintah diatas menghasilkan data dalam MV (build immediete) ynag mengguanakn metode refresh force untuk memilih pemutakhiran data secara incremental atau komplit MV_sap_kot itu tidak bias digunakan untuk query rewrite. Agar kemampuan itu tersedia maka opsi with query rewrite enabled harus dipilih dengan syarat owner memiliki privileged system query rewrite. Materialized view juga dapat dibat melalui OEM Console Untuk memeriksa integritas struktur materialized view seperti halnya table, index, arau cluster gunakan perintah analyze. Miasalnya analyze table sanp_kota validate structure cascade. Jika objek tidak valid, lakukan refresh MV secar komplit namun jika masih tidak valid lakukan drop dan buat ulang materiliazednya. Perintah alter materialized view snap_kota compile melakukan vaildasi MV secara eksplist dan digunakan pada situasi dimana telah terjadi perintah drop atu alter tterhadap objek-objek yang digunakan oleh MV. Perintah alter ini juga digunakan untuk mengubah karakteristik MV seprti metode dan mengaktifkan query rewrite.

Simple Report

139

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

Materialized View Read/Write MV dapat ditujukan hanya untuk dibaca saja sehingga menghindari perubahan MV da data pada table master. Sebagai conroh daftar kota yang terdapat pada table master kota dapat dibuatkan MV-nya dengan nama sanp_kota sehingga user dapat mengakses data melalui MV itu.

MATERIALIZED VIEW UNTUK READ/WRITE.


SQL> CREATE MATERIALIZED VIEW Ivana.SNAP_KOTA 2 BULID IMMEDIATE REFRESH FORCE 3 ON DEMAND AS 4 SELECT *FROM boy.kota; Materialized view created. SQL> INSERT INTO Ivana.SNAP_KOTA 2 VALUES (157000,'Poso','Large'); ORA-01732: data manipulation operation not legal on this view SQL> DROP MATERIALIZED VIEW Ivana.SNAP_KOTA; MATERIALIZED view dropped. SQL> CREATE MATERIALIZED VIEW Ivana.SNAP_KOTA 2 BULID IMMEDIATE REFRESH FORCE 3 ON DEMAND FOR UPDATE 4 AS 5 SELECT * FROM boy.Kota; Materilaized view created. SQL> INSERT INTO Ivana.SNAP_KOTA 2 VALUES (157000,'pOSO','lage'); 1 ROW CREATED.

Untuk membuat MV yang dapat diupdate, tambahkanklausa for update pada definisi MV.

140

User, Privilege dan Role

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

Refresh Data Data dalam MV diperbaharui jika ada perubahan pada table master. Pemutakhirannya dapat dilakukan secara incremental (fast refresh) atau memutakhirkan semua data (complete) atau memilih cara refresh yang tersedia (force). Jika MV menggunakan metode fast refresh, materialized view log akan merekam perubahan terhadap table master. MV dapat di refresh secara periodic (automatically on), sesuai keperluan (on demand) atau jika MV itu berada pada database yang sama dengan table masternya, refresh terjadi setelah commit (on commit). Untuk dapat me refresh MV secara on commit diperlukan privilege system on commit refresh atau dengan privilege objek on commit refresh pada setiap table master yang tidak dimiliki user. Jika table detail atau master mempunyai primary key, gunakan opsi primary key, sebaiknya gunakan metode refresh yang menggunakan rowed. Materialized View Log Materialized view log adalah objek schema yang mencatat perubahan yang terjadi pada table sehingga memungkinkan table master diperbaharui secara incremental (fast refresh). Berikut ini dibuat MV log untuk data warehouse dengan fast refresh yang menggunakan rowed.

MEMBUAT MATERIALIZED VIEW LOG.


SQL> CREATE MATERIALIZED VIEW LOG ON boy.kota 2 WITH SEQUENCE, ROWID (nokota,namakota,kecamatan) 3 INCLUDING NEW VALUES; Materialized view log created. SQL> CREATE MATERILIZED VIEW LOG ON boy.penduduk 2 WITH SEQUENCE, ROWID (noktp, nama, nokota) 3 INCLUDING NEW VALUES; Materialized view log created.

Untuk mendukung fast refresh pada MV tampak bahwa definisi MV log menyertakan klausa ROWID yang disertai including new values untuk merekam niali dat yang lama dan baru pada log.

Simple Report

141

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

Data Warehouse Materialized view digunakan untuk organisasi data pada warehouse, misalnya dalam pembuatan ringkasan penduduk per kota melalui script berikut ini :

MATERIALIZED VIEW UNTUK DATA WAREHOUSE.


SQL> CREATE MATERIALIZED VIEW boy.jiwa_kota 2 BUILD IMMEDIATE 3 REFRESH FAST 4 ENABLE QUERY REWRITE 5 AS 6 SELECT k.namakota, k.kecamatan, COUNT(p.nama) Jiwa 7 FROM boy.kota k, boy.penduduk p 8 WHERE k.nokota = p.nokota] 9 GROUP BY k.namakota, k.kecamatan; Materialized view created.

AS

Statement diatas membuat MV jwa_kota dengan menghitung jumlah penduduk dalam satu kota dan kecamatan dengan operasi join. MV segera dipopulasikan karena menggunakan metode bulid immediate dan tersedia untuk digunakan melalui query rewrite. Metode fast refresh bias dilakukan karena MV log telah dibuat untuk table kota dan penduduk.

142

User, Privilege dan Role

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

9.12 SEQUENCE
Sequence digunakan untuk membangkitkan serangkaian nilai serial yang unik.

9.12.1 Membuat Sequence (CREATE SEQUENCE) Query :


CREATE SEQUENCE nama_sequence [INCREMENT BY integer] [START WITH integer] [MAXVALUE integer | NOMAXVALUE] [MINVALUE integer | NOMINVALUE] [CYCLE | NOCYCLE] [CHACE | NOCHACE] INCREMENT BY berfungsi untuk mendefinisikan jumlah incrementasi setiap kali terjadi penyisipan record. START WITH berfungsi untuk mendefisikan bilangan awal yang dibangkitkan. NOMAXVALUE tidak ada batas maximum bilangan sequence yang digenerate. MAXVALUE mendefinisikan maximum bilangan sequence yang digenerate. CYCLE mendefinisikan bahwa jika telah bilangan sequence telah maximum, maka nilai akan diulang dari awal lagi NOCYCLE tidak ada pengulangan bilangan bila telah sampai nilai maximum CACHE bilangan sequence akan ditampung di buffer NOCACHE bilangan sequence tidak akan ditampung di buffer. Contoh : SQL > CREATE SEQUENCE seq_bulan INCREMENT BY 1 START WITH 1 MAXVALUE 12;
Simple Report 143

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

9.12.2 Memodifikasi Sequence (ALTER SEQUENCE)


Query : ALTER SEQUENCE nama_sequence [INCREMENT BY integer] [START WITH integer] [MAXVALUE integer | NOMAXVALUE] [MINVALUE integer | NOMINVALUE] [CYCLE | NOCYCLE] [CHACE | NOCHACE] Contoh : SQL > ALTER SEQUENCE seq_bulan INCREMENT BY 2;

9.12.3 Menghapus Sequence (DROP SEQUENCE)


Query : DROP SEQUENCE nama_sequence; Contoh : DROP SEQUENCE seq_bulan;

144

User, Privilege dan Role

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

9.13 JURNAL
1. 2. 3. Sebutkan dan jelaskan keuntungan jika kita menggunakan index! Apakah semakin banyak index yang kita pakai maka semakin baik pula pengaruhnya terhadap performansi DBMS? Berdasarkan studi kasus yang ada di modul 1 lakukan analisis terhadap tabel-tabel yang ada untuk menentukan index yang akan dibuat kemudian buatlah index pada tabel-tabel tersebut dan berikan alasan kenapa index tersebut harus dibuat! Apakah syarat-syarat yang harus dipenuhi sehingga sebuah View dapat dinyatakan sebagai view updatable? Buatlah contoh view updatable berdasarkan studi kasus yang ada di modul 1! Buatlah view yang isinya merupakan hasil outer join dari tabel buku dan jenis dimana tabel buku menjadi acuannya! Jelaskan fungsi/kegunaan dari sequence jika dikaitkan dengan tabel! Berdasarkan studi kasus yang ada di modul 1 lakukan analisis terhadap tabel-tabel yang ada untuk menentukan sequence yang akan dibuat kemudian buatlah sequence pada tabel-tabel tersebut dan berikan alasan kenapa sequence tersebut harus dibuat!

4. 5. 6. 7. 8.

Simple Report

145

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

10 SIMPLE REPORT

Overview

Pokok-pokok bahasan di dalam bab ini menjelaskan cara mengatur format tampilan data dengan mengatur environment melalui perintah SET dan menggunakan perintah-perintah SQL*Plus lainnya. Pengaturan format tampilan data ini sering dipakai di dalam file script yang ditujukkan untuk menghasilkan laporan sederhana (simple report).

Tujuan

1. 2.

Dapat menagatur format tampilan data pada SQL*PLUS . Dapat membuat laporan sederhana menggunakan SQL*PLUS.

146

User, Privilege dan Role

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

10.1 Mengatur Dimensi Halaman


Dimensi halaman dari keluaran SQL*Plus dapat diatur melalui system variable PAGESIZE dan LINESIZE. System variable PAGESIZE menentukan jumlah baris maksimum yang ditampilkan dalam satu halaman. Sedangkan system variable LINESIZE menentukan jumlah karakter maksimum yang ditampilkan dalam satu baris. Dengan demikian kedua system variable ini dapat mengatur tinggi dan lebar dari halaman keluaran SQL*Plus. Berikut ini ditunjukkan dua perintah SET untuk menentukan nilai system variable PAGESIZE dan LINESIZE pada current environment SQL*Plus. SQL> set pagesize 12 SQL> set linesize 60 Dengan environment seperti di atas, coba lakukan sebuah query seperti berikut ini. Query tersebut menampilkan 15 baris string karakter yang masing-masing panjangnya 60 bytes. Data dictionary DICTIONARY digunakan sebagai sumber data hanya karena jumlah baris data yang ada pada view tersebut pasti lebih dari 15 baris.
SQL> 2 3 4 SELECT **********$$$$$$$$$$**********$$$$$$$$$$ || **********$$$$$$$$$$ pages FROM DICTIONARY WHERE ROWNUM<=15;

PAGES -----------------------------------------------------------**********$$$$$$$$$$**********$$$$$$$$$$**********$$$$$$$$$$ **********$$$$$$$$$$**********$$$$$$$$$$**********$$$$$$$$$$ **********$$$$$$$$$$**********$$$$$$$$$$**********$$$$$$$$$$ **********$$$$$$$$$$**********$$$$$$$$$$**********$$$$$$$$$$ **********$$$$$$$$$$**********$$$$$$$$$$**********$$$$$$$$$$ **********$$$$$$$$$$**********$$$$$$$$$$**********$$$$$$$$$$ **********$$$$$$$$$$**********$$$$$$$$$$**********$$$$$$$$$$ **********$$$$$$$$$$**********$$$$$$$$$$**********$$$$$$$$$$ **********$$$$$$$$$$**********$$$$$$$$$$**********$$$$$$$$$$ PAGES -----------------------------------------------------------**********$$$$$$$$$$**********$$$$$$$$$$**********$$$$$$$$$$ **********$$$$$$$$$$**********$$$$$$$$$$**********$$$$$$$$$$ **********$$$$$$$$$$**********$$$$$$$$$$**********$$$$$$$$$$ **********$$$$$$$$$$**********$$$$$$$$$$**********$$$$$$$$$$ **********$$$$$$$$$$**********$$$$$$$$$$**********$$$$$$$$$$ **********$$$$$$$$$$**********$$$$$$$$$$**********$$$$$$$$$$ 15 row selected

Simple Report

147

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

Perhatikan hasil query di atas. Suatu halaman di mulai dengan satu baris kosong. Setelah itu diikuti oleh judul baris kolom (heading) dan baris garisbawah judul kolom. Kemudian, dibawahnya ditampilkan baris-baris data. Apabila panjang baris judul kolom (atau baris data) lebih besar dari LINESIZE, baris tersebut ditampilkan dalam dua baris atau lebih. Apabila baris-baris yang ditampilkan tidak cukup ditampung dalam satu halaman, akan dibuat halaman baru yang terdiri atas satu baris kosong, judul kolom, garis-bawah judul kolom, dan baris-baris data. Demikian seterusnya sampai semua data ditampilkan. Penutup dari halaman terkahir adalah sebuah baris kosong, dan atribut-atribut lainnya seperti FEEDBACK dan TIMING. Apabila PAGESIZE diberi nilai 0 (nol), yang ditampilkan hanya baris-baris data saja tanpa awalan baris kosong, judul kolom, garis-bawah judul kolom dan atribut-atribut lainnya. Baris kosong yang berada sebelum baris judul kolom sebenarnya dapat ditentukan jumlahnya dengan mengatur system variable NEWPAGE. Pada keluaran hasil query di atas, nilai NEWPAGE yang digunakan adalah satu (default). Perlu diinformasikan juga bahwa Anda dapat melihat nomor baris yang sedang ditampilkan dari sebuah halaman menggunakan perintah SHOW LNO. Nomor halaman dapat dilihat dengan perintah SHOW PNO. Apabila tidak disebutkan secara khusus, PAGESIZE dan LINESIZE yang digunakan pada pokok-pokok bahasan berikutnya didalam bab ini adalah 50 dan 65.

10.1.1

Menggunakan BREAK

Perintah BREAK dapat digunakkan untuk hal-hal seperti berikut ini. Menampilkan hanya satu nilai untuk beberapa nilai yang sama pada kolom yang ditentukan. Menambahkan baris kosong setiap kali nilai dari kolom yang ditentukan berubah. Mencetak nilai hasil perhitungan untuk kelompok baris dengan nilai kolom yang sama pada kolom yang ditentukan (lihat pokok batasan berikutnya). Bentuk umum perintahnya adalah sebagai berikut.
BRE[AK] [{ ON <column | expr | ROW | REPORT> [SKIP n | [SKIP] PAGE] [NODUP[LICATES] | DUP[LICATES]] }]

148

User, Privilege dan Role

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

Nama column tidak boleh mengandung schema dan/atau table. Untuk kolomkolom yang menggunakan format tab_name,col_name di dalam SQL statement-nya, sebaiknya berikan kolom alias pada SQL statement tersebut sehingga nama kolom alias tersebut dapat digunakan pada perintah BREAK. Jika expr digunakan, break tersebut berlaku jika expr terdapat pada SQL statement dan tanpa menggunakan kolom alias. Pilihan ON ROW digunakan untuk break setiap kali baris berikutnya berbeda dengan baris sebelumnya. ON REPORT biasanya digunakan bersamaan dengan kalkulasi untuk keseluruhan data (lihat perintah COMPUTE pada pokok bahasan berikutnya). SKIP n dapat digunakan untuk memberikan baris kosong sebanyak n baris setiap masuk ke break berikutnya. Apabila SKIP PAGE digunakan keluaran diceyak di halaman berikutnya setiap kali break terjadi. NODUP[LICATES] digunakan apabila nilai-nilai yang duplikat tida ingin dicetak. Pilihan ini adalah default. DUP[LICATES] digunakan apabila nilai-nilai yang duplikat ingin dicetak. Berikut ini diberikan sebuah contoh penggunaan perintah BREAK untuk kolom bayar. Sebuah baris kosong dicetak setiap kali break terjadi.
SQL> break on bayar skip 1 SQL> SELECT nim, prodi, nama, bayar 2 FROM mahasiswa ORDER BY nim; NIM NAMA PRODI BAYAR -----------------------------------------------------------------------------------------------30107001 ANGGI NOVEMBRA MI 2000000 30107003 30107004 30207005 30207006 30207007 WIDO KESUMA MURDIJAT ARIF PRABOWO TK ANUGRAH DWI ARDIANTO ANDRE ADRIAN ANDI HAKIM ARIF TK TK MI MI 2000000 15000000 8000000 2000000 4000000
149

Simple Report

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

30307008 30307009

SWANDY EFRAIM MANALU SITI NURFAUZIYAH

KA KA

10000000 3500000

Bagaimana jika ingin menggunakan banyak criteria break? Anda dapat menggunakan klausa ON sebanyak criteria yang diinginkan. Contoh-contoh break dapat ditemukan pada pokok-pokok bahasan berikutnya. Apabila perintah BREAK dijalankan tanpa klausa ON, perintah tersebut ditujukan untuk memunculkan perintah BREAK yang terakhir. Sebagai contoh ditunjukkan di bawah ini.
SQL> break Break on bayar skip 1 nodup

Perlu diingat bahwa setiap kali perintah BREAK dijalankan, perintah tersebut berlaku sampai perintah BREAK berikutnya dijalankan atau sampai CLEAR BREAKS dijalankan. Perintah CLEAR BREAKS berguna untuk menghapus definisi break yang ada seperti yang ditunjukkan seperti ini.
SQL> clear breaks Breaks cleared

10.1.2 Melakukan Kalkulasi dengan COMPUTE


Perintah COMPUTE dapat digunakan untuk melakukan perhitungan terhadap sebuah kolom yang ekspresi dari sekelompok baris data. Bentuk umum perintahnya adalah sebagai berikut.
COMPUTE [ {function [LAB[EL] text]} OF <expr | column> ON <expr | column | REPORT | ROW> ]

150

User, Privilege dan Role

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

Satu perintah COMPUTE dapat menggunakan lebih dari satu fungsi. dengan urutan pengerjaan COMPUTE. Label text dapat diberikan untuk membuat text menjadi tanda atau cap pada baris hasil COMPUTE. Jika tidak diberikan, default text adalah nama fungsi. Klausa OF berfungsi untuk menentukan expr atau kolom apa yang dikalkulasi. KLAUSA ON berfungsi untuk menentukan criteria break untuk satu perhitungan COMPUTE. Sebagai catatan, hasil dari perintah COMPUTE hanya dicetak jika perintah BREAK disertakan. Nama column atau expr pada klausa ON perintah COMPUTE harus ada pada klausa ON perintah BREAK tersebut. Fungsi-fungsi untuk Perintah COMPUTE Nama Fungsi Perhitungan AVG Nilai rata-rata. Baris yang diperhitungkan hanya baris dengan nilai yang tidak NULL COU[NT] Menghitung jumlah baris yang nilai column atau expr-nya tidak NULL MIN[MUM] Nilai minimum MAX[MUM] NUM[BER] SUM SID VAR[IANCE] Nilai maksimum Menghitung jumlah baris, termasuk yang bernilai NULL Jumlah nilai Standar deviasi dari nilai column atau expr yang tidak NULL Variance dari nilai column atau expr yang tidak NULL Tipe Data NUMBER

Semua NUMBER, VARCHAR2 NUMBER, VARCHAR2 Semua NUMBER NUMBER NUMBER CHAR, CHAR,

Simple Report

151

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

Berikut ini diberikan sebuah contoh perhitungan rata-rata, nilai minimum, dan nilai maksimum dari bayar yang dikelompokkan prodi. Pengurutan data (ORDER BY) juga berpengaruh pada keluaran. Perhatikan juga, BREAK dikenakan pada kolom departemen dengan skip satu baris dan pada kolom pos_id tanpa skip.
SQL> break on prodi skip 2; SQL> compute avg max min of bayar on prodi; SQL> select nim, nama, prodi, bayar from mahasiswa order by prodi; NIM NAMA PRODI KA ***** avg minimum maximum MI BAYAR 3500000 10000000 ---------6750000 3500000 10000000 2000000 2000000 15000000 ---------6333333,33 2000000 15000000 4000000 8000000 2000000 ---------4666666,67 2000000 8000000

30307009 SITI NURFAUZIYAH 30307008 SWANDY EFRAIM MANALU

30107003 WIDO KESUMA 30107001 ANGGI NOVEMBRA 30107004 MURDIJAT ARIF PRABOWO

30207007 ANDI HAKIM ARIF 30207005 ANUGRAH DWI ARDIANTO 30207006 ANDRE ADRIAN

***** avg minimum maximum TK

***** avg minimum maximum 8 rows selected.

152

User, Privilege dan Role

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

Sebagai catatan tambahan, semua atribut yang telah ditentukan dengan perintah COMPUTE dapat dihapus menggunakan perintah CLEAR COMPUTES.

10.1.3 Perintah COLUMN Untuk Memformat Kolom


Perintah ini digunakan untuk memformat judul kolom maupun nilai kolom. Bentuk umum perintahnya adalah sebagai berikut.
COL[UMN] [<column | expr > {[option]}]

Apanila perintah COLUMN digunakan tanpa column atau expr maka SQL*Plus akan mengeluarkan atribut COLUMN yang sedang berlaku pada session SQl*Plus tersebut (bukan session user database). Apabila perintah COLUMN digunakan dengan menyertakan column atau expr namun tanpa option, SQL*Plus akan mengeluarkan atribut COLUMN untuk kolom atau ekspresi yang disebutkan. Nilai option dapat berupa klausa-klausa yang diperhatikan pada Tabel. Tabel Option pada Perintah COLUMN Klausa ALI[AS] alias Desripsi Memberi nama alias yang dapat digunakan untuk menggantikan nama column pada perintah BREA, COMPUTE, ataupun COLUMN Mengembalikan atribut colomn ke nilai default sesuai dengan tipe data, panjang data, dan sebagainya Menambahkan karakter baris baru (carriage
153

CLE[AR]

FOLD_A[FTER]

Simple Report

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

FOLD_B[EFORE]

FOR[MAT] format

HEA[DING]

return) setelah judul column dan setelah nilai column dari setiap baris. Tidak berlaku untuk kolom terakhir pada klausa SELECT Menambahkan karakter baris baru (carriage return) sebelum judul column dan setelah nilai column dari setiap baris. Tidak berlaku untuk kolom pertama pada klausa SELECT Menentukan format tampilan nilai column. Format untuk kolom karakter berupa An dimana n adalah lebar kolom. Format untuk kolom DATE mengikuti NLS_DATE_FORMAT namun lebar kolomnya apat ditentukan dengan An. Format untuk kolom NUMBER sama dengan format yang digunakan pada fungsi TO_CHAR(NUMBER) yang ditampilkan pada Tabel 3.7 pokok bahasan 3.5.2. *) Menentukan text sebagai judul kolom untuk menggantikan judul kolom yang diberikan di dalam SELECT statement. String karakter text dapat
User, Privilege dan Role

154

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

JUS[TIFY] <L[EFT]|C[ENTER] R[IGHT]>

LIKE[expr|alias]

NEWL[INE]

NEW_V[ALUE] variable

mengandung karakter HEADSEP untuk menampilkan judul kolom dalam dua baris atau lebih. Menentukan apaah judul kolom dan nilai kolom ditampilkan rata kiri, di tengah-tengah. Atau rata kanan. Jika tidak disebutkan maka kolom NUMBER ditampilkan rata kanan dan kolom lainnya rata kiri Menyalin atribut tampilan dari kolom lain. Atribut yang disalin hanya atribut yang tidak ditemtukan secara eksplisit. Sama efeknya dengan FOLD_BEFORE, yakni menampilkan baris baru sebelum nilai column ditampilkan Digunakan untuk membuat variable yang nilainya adalah nilai kolom. Variable tersebut biasanya digunakan pada perintah TITLE untuk membuat judul-atas pada laporan master detail. Agar pengaruhnya terlihat, kolom pada perintah ini harus digunakan juga apada perintah BREAKSKIP
155

Simple Report

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

NOPRI[NT]|PRI[NT]

NUL[L] text OLD_V[ALUE] variable

ON|OFF

WRA[PPED]|WOR[D_WRAPPED|TRU[NCATE]

PAGE Mengatur apakah judul dan nilai column dicetak di layar (ON) atau tidak (OFF). Default adalah OFF Menentukan text sebagai nilai yang dicetak pada kolom yang ditentukan Digunakan untuk membuat variable yang nilainya adalah nilai kolom. Variable tersebut biasanya digunakan pada perintah BTITLE untuk membuat judul-bawah pada laporan master detail. Kolom pada perintah ini harus digunakan juga pada perintah BREAKSKIP PAGE Mengaktifkan (ON) atau menonaktifkan (OFF) atribut-atribut kolom yang sudah didefinisikan Perintah ini khusus untuk kolom DATE atau karakter yang lebarnya ditentukan namun nilai kolom tersebut melebihi lebar kolom yang disediakan. Pilihan WRAPPED akan melanjutkan bagian yang tidak mencukupi ke baris yang baru pada kolom yang sama. Pilihan WORD_WRAPPED
User, Privilege dan Role

156

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

akan melanjutkan katakata yang tidak mencukupi ke baris yang baru pada kolom yang sama . Pilih TRUNCATE akan memotong bagian yang tidak mencukupi. *) Format yang tercantum pada table 3.7 hampir semuanya berlaku kecuali: FM, TM, U, dan X. Selain itu ada tambahan format DATE yang bertujuan untuk menampilkan nilai NUMBER sebagai Julian_date dalam format DD/MM/YY. Berikut ini diberikan sebuah contoh performatan kolom-kolom dari data-data mahasiswa. Petrintah-perintah tersebut ditulisakan di dalam script rpt_mahasiswa.sql.
--rpt_mahasiswa.sql /* Mengatur beberapa nilai system variable*/ SET PAGESIZE 600 SET LINESIZE 950 SET HEADSEP "|" SET RECSEP OFF /*Menghapus BREAKS, COMPUTES, dan COLUMNS*/ CLEAR BREAKS; CLEAR COMPUTES; CLEAR COLUMNS; /*Mengatur format kolom*/ COLUMN nim FORMAT A10 WORD_WRAPPED COLUMN nama FORMAT A20 WORD_WRAPPED COLUMN prodi FORMAT A10 WORD_WRAPPED HEADING "PRODI|JUR" COLUMN bayar FORMAT 99G999G999D99 /*Query untuk menampilkan data-data mahasiswa*/ select nim, nama, prodi, bayar from mahasiswa ORDER BY 1,2;

Simple Report

157

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

Keluaran dari script diatas ditujukan berikut ini.


SQL> @ C\:rpt_mahasiswa.sql NIM NAMA 30107001 30107003 30107004 30207005 30207006 30207007 30307008 30307009 ANGGI NOVEMBRA WIDO KESUMA MURDIJAT ARIF PRABOWO ANUGRAH DWI ARDIANTO ANDRE ADRIAN ANDI HAKIM ARIF SWANDY EFRAIM MANALU SITI NURFAUZIYAH PRODI JUR MI MI MI TK TK TK KA KA BAYAR 2.000.000,00 2.000.000,00 15.000.000,00 8.000.000,00 2.000.000,00 4.000.000,00 10.000.000,00 3.500.000,00

8 rows selected.

Perhatikan script dan keluaran di atas. Perhatikan pula bagian-bagian yang diberi latar abu-abu. Lebar kolom prodi ditentukan sebesar 10 karakter. Judulnya menjadi PRODI JUR dan dituliskan dalam dua baris (HEADING PRODI | JUR). Lebar kolom nama ditentukan sebesar 20 karakter dan diberikan pilihan WORD_WRAPPED. Dengan demikian maka string posisi yang lebih dari 20 karakter akan dituliskan dalam dua baris. Lihatlah nama MURDIJAT ARIF PRABOWO yang nama terakhirnya diwrap. Kolom bayar diformat dengan pemisah grup (ribuan) dan diberi tanda decimal (tanda titik). Jumlah angka pecahan decimal adalah dua angka. Sebagai catatan tambahan, semua atribut tampilan yang ditentukan oleh perintah COLUMN dapat dihapus dengan menggunakan perintah CLEAR COLUMNS.

10.1.4 Memberi Judul pada Halaman Judul halaman dapat diberikan dengan menggunakan perintah TTITLE dan BTIITLE. TTITLE untuk judul atas, sedangkan BTITLE untuk judul bawah. Bentuk umum kedua perintah ini diperlihatkan di bawah ini.
TTITLE{[printspec [text | variable ]]} [ON|OFF] BTITLE{[printspec [text | variable ]]} [ON|OFF]

158

User, Privilege dan Role

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

Nilai printcpec bertujuan untuk menentukan spesifikasi cetak dari text atau variable. Pilihan-pilihan untuk printspec diberikan pada Tabel. Tabel Spesifikasi Cetak pada Perintah TTITLE dan BTITLE Spesifikasi Cetak Kegunaan COL n Menentukan posisi ceak dimulai dari kolom ke n. S[KIP] [n] Memulai baris baru n berikutnya dari baris sebelumnya. Jika n tidak disertakan, n=1. Jika n=0, text atau variable dicetak pada baris berikutnya TAB n Menambahkan tab maju sebanyak n.Jika n negative, yang dicetak adalah tab mundur LE[FT] | CE[NTER] | R[IGHT] Menentukan apakah judul dicetak rapat kiri, di tengah , atau rapat kanan BOLD Mencetak dengan huruf tebal. Pada SQL*Plus disimbolkan dengan mencetak text atau variable sebanyak tiga kali. Beberapa system operasi dapat menerjemahkan menjadi cetak tebal apabila dicetak ke printer FORMAT format Menentukan format. Format yang valid adalah yang berlaku untuk perintah COLUMN. Nilai variable dapat diisi dengan user variable, termasuk variable yang dibuat dengan perintah COLUMN, dan juga dapat diisi dengan nilai-nilai system SQL*Plus. Nilai-nilai system SQL*Plus dapat berupa salah satu dari daftar berikut ini. SQL.LNO, untuk menampilkan nomor dari current line. SQL.PNO, untuk menampilkan nomor dari current page. SQL.RELEASE, untuk menampilkan nomor release Oracle. SQL.ERRORCODE, untuk menampilkan kode kesalahan. SQL.USER, untuk menampilkan nama current user. Kecuali SQL.ERRORCODE, nilai-nilai pada daftar di atas dapat juga ditampilkan menggunakan perintah SHOW. Namun, perintah SHOW tidak dapat yang sudah pernah diberikan. Pilihan ON atau OFF dapat diberikan
Simple Report 159

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

untuk mengaktifkan ayau menonaktifkan TIITLE atau BTIITLE tanpa harus menghapus definisi yang sudah diberikan. Jika perintah TIITLE atau BTIITLE digunakan tanpa klausa apapun, perintah tersebut ditujukan untuk menampilkan definisi dari TIITLE atau BTIITLE yang sedang berlaku.

Menambahkan Report Header dan Footer


Perintah untuk menambahkan report header dan report footer hampir sama dengan perintah TTITLE dab BTITLE. Bentuk umum perintahnya adalah sebagai berikut.
REPH[EADER] [PAGE] {[printspec [text | variable ]]} [ON|OFF] REPF[OOTER] [PAGE] {[printspec [text | variable ]]} [ON|OFF]

Jika pilihan PAGE disertakan, halaman baru akan dibuat setelah report header ditampilkan atau sebelum report footer ditampilkan. Pilihan-pilihan lainnya sama fungsinya dengan fungsi pilihan pada perintah TTITLE atau BTITLE. Tidak seperti judul halaman, report header dan report footer hanya satu kali dicetak untuk satu SELECT statement. Jika SELECT Statement menghasilkan banyak baris data sehingga membutuhkan tempat lebih dari satu halaman, judul halaman (TITILE dan BTITLE) akan dicetak sebanyak halaman yang ada. Sedangkan report header ditampilkan sebelum SELECT statement diproses dan report footer ditampilkan setelah SELECT statement diproses. Jadi, yang dianggap satu report adalah satu SELECT statement. Report header dan report footer digunakan bersama-sama dengan judul-atas dan judul-bawah halaman.

10.1.5

Menambahkan Tanggal

Untuk menambahkan konstanta tanggal, tentunya dapat digunakan perintah TTITLE. Namun, untuk menambahkan tanggal sesuai dengan tanggal script dijalankan, dibutuhkan kerjasama antara perintah COLUMN, SQL, statement, dan TTITLE/BTITLE (atau REPHEADER/REPFOOTER). Perintah
160 User, Privilege dan Role

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

COLUMN digunakan untuk menampung nilai user variable. SQL statement digunakan untuk menampung nilai SYSDATE ke dalam user variable. Perintah TTITLE digunakan untuk mencetaknya. Berikut ini diberikan sebuah contoh sederhana. Perintah COLUMN digunakan untuk membuat variable tg_skrg (NEW_VALUE) yag nilainya diambil dari kolom today. Kolom today dipilih pada SELECT statement dan nilainya adalah SYSDATE. Perintah TTITLE ditujukan untuk mencetak nilai dari variable tgl_skrg.

10.2 Menyimpan dan Mencetak Laporan


Seperti yang telah disinggung pada awal bab ini, semua yang dipaparkan di dalam subbab ini berguna untuk membuat sebuah laporan berdasarkan data yang ada di dalam database. Biasanya, perintah-perintah dari sebuah laporan, termasuk pengaturan environment yang berhubungan dengan tampilan, disimpan di dalam file (script) agar dapat digunakan secara berulang. Hasil atau keluaran dari eksekusi file laporan tersebut biasanya juga disimpan di dalam file (soft copy) kemudian dapat dicetak di atas ertas (hard copy). Perintah SPOOL, yang dijelaskan pada Bab 2, dapat digunakan untuk mencetak eluaran ke atas kertas. Untuk mengingatkan kembali, perintah untuk memulai dan mengakhiri SPOOL ditampilkan berikut ini.
SPOOL file_name[.ext] SPOOL [OFF|OUT]

Pilihan OFF maupun OUT sama-sama bertujuan untuk mengakhiri spooling (semua keluaran dituliskan ke dalam file spool). Khusus untuk OUT, setelah penulisan ke file dilakukan, file tersebut dikirim ke default printer untuk dicetak sebagai hard copy. Hanya saja pada system operasi Windows, perintah SPOOL OUT tidak mendukung fungsi pencetakan tersebut. Pilihan OUT mempunyai efek yang sama dengan OFF. Berikut ini diberikan sebuah script laporan dengan melibatkan perintah SPOOL. Keluaran dari script tersebut disimpan di dalam file yang namanya dapat ditentukan oleh user. Keluaran tidak ditampilkan pada layer SQL*Plus (SET TERMOUT OFF).
Simple Report 161

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

--rpt_bayar_mahasiswa.sql -- Mengatur beberapa nilai system variable SET PAGESIZE 35 SET LINESIZE 60 SET HEADSEP ON SET RECSEP OFF SET FEEDBACK OFF -- Menghapus BREAKS, COMPUTES, dan COLUMNS CLEAR BREAKS CLEAR COMPUTES CLEAR COLUMNS -- Melakukan perhitungan jumlah pembayaran mahasiswa. BREAK ON prodi skip 2 COMPUTE avg max min of bayar on prodi --Mengatur format kolom COLUMN today NOPRINT NEW_VALUE v_today COLUMN nim FORMAT A10 WORD_WRAPPED COLUMN nama FORMAT A20 WORD_WRAPPED COLUMN prodi FORMAT A10 WORD_WRAPPED HEADING "PRODI|JUR" COLUMN bayar FORMAT 99G999G999D99 --Mengakifkan RepHeader dan RepFooter REPHEADER "--START OF REPORT--" REPFOOTER "--END OF REPORT--" --Memberi Judul TTITLE CENTER "DAFTAR MAHASISWA" SKIP CENTER"===============================================" SKIP 2 LEFT "User : " SQL.USER SKIP RIGHT "Halaman :" FORMAT 99 SQL.PNO SKIP LEFT "Tanggal :" FORMAT A20 v_today SKIP LEFT "========================================================== ===" BTITLE LEFT "---------------------------------------------------------------------------------------------"SKIP 2 --Mengaktifkan SPOOL. Nama file dapat diinput oleh user SET DEFINE ON ACCEPT file_name PROMPT "File penampung hasil report: " SPOOL &file_name

162

User, Privilege dan Role

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

--Menonaktifkan SET TERMOUT OFF

pencetakan keluaran ke SQL* PLUS

-- Query untuk menampilkan data-data mahasiswa select TO_CHAR(SYSDATE,'DD-MON-YYYY')today, nim, nama, prodi, bayar from mahasiswa ORDER BY 1,2; --Menghentikan Spool SPOOL OFF --Mengembalikan beberapa nilai system variable ke default SET FEEDBACK ON SET RECSEP WRAPPED SET TERMOUT ON

Apabila script diatas dijalankan, yang ditampilkan hanya teks untuk meminta user memasukkan nama file (dan direktori) tempat penampungan hasil laporan seperti yang ditunjukkan berikut ini. SQL> @ C:\rpt_bayar_mahasiswa.sql File penampung hasil report : C:\BelajarSQL\rpt_hasil.txt Anda dapat melihat isi file laporan yang baru saja dibuat menggunakan perintah GET atau membukanya dengan sembarang text editor. Apabila Anda meliaht isi file tersebut dengan menggunakan perintah GET, baris-baris kosong tidak akan dimunculkan. Isi file laporan tersebut adalah seperti berikut ini.

DAFTAR MAHASISWA =============================================== User : DEDY Halaman : 1 Tanggal :09-AGT-2008 -----------------------------------------------------------START OF REPORT-PRODI
Simple Report 163

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

NIM ---------30107001 30107003 30107004

NAMA JUR BAYAR -------------------- ---------- -------------ANGGI NOVEMBRA MI 2.000.000,00 WIDO KESUMA 2.000.000,00 MURDIJAT ARIF 15.000.000,00 PRABOWO ********** -------------avg 6.333.333,33 minimum 2.000.000,00 maximum 15.000.000,00 ANUGRAH DWI ARDIANTO TK 8.000.000,00 ANDRE ADRIAN 2.000.000,00 ANDI HAKIM ARIF 4.000.000,00 ********** -------------avg 4.666.666,67 minimum 2.000.000,00 maximum 8.000.000,00 SWANDY EFRAIM MANALU KA SITI NURFAUZIYAH 10.000.000,00 3.500.000,00

30207005 30207006 30207007

30307008 30307009 -

DAFTAR MAHASISWA =============================================== User : DEDY Halaman : 2 Tanggal :09-AGT-2008 ---------------------------------------------------------PRODI NIM NAMA JUR BAYAR ---------- -------------------- ---------- -------------********** -------------avg 6.750.000,00 minimum 3.500.000,00 maximum 10.000.000,00 --END OF REPORT--

164

User, Privilege dan Role

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

10.3 Menciptakan output HTML dengan SQL * Plus


Sejak versi 8.1.6 oracle memungkinkan kita untuk menciptakan HTML dengan SQL * Plus. Sangatlah mudah untuk mengubah script dari mode karakter ke html, karena seluruh tag SQL * Plus dapat dikonversi ke tag HTML tanpa mengubah kode.

--rpt_bayar_mahasiswa_html.sql --menjalankan terhadap output Set markup html on spool on --menentukan file dengan ekstension htm atau html Spool file_name.html --Query Select * from table_name; --mengakhiri file html Spool off --mengatur kembali ke output normal Set markup html off spool off output dalam html dan melakukan spool

Kemudian perintah diatas dieksekusi sbb: SQL> @ C:\rpt_bayar_mahasiswa_html.sql File penampung hasil report : C:\BelajarSQL\rpt_hasil.html

Simple Report

165

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

Berikut ini contohnya jika report yang telah dibuat sebelumnya dijadikan file HTML:
--Menjalankan output dalam html SET MARKUP HTML ON SPOOL ON -- Mengatur beberapa nilai system variable SET PAGESIZE 35 SET LINESIZE 60 SET HEADSEP ON SET RECSEP OFF SET FEEDBACK OFF -- Menghapus BREAKS, COMPUTES, dan COLUMNS CLEAR BREAKS CLEAR COMPUTES CLEAR COLUMNS -- Melakukan perhitungan jumlah penerimaan pegawai pertahun. BREAK ON prodi skip 2 COMPUTE avg max min of bayar on prodi --Mengatur format kolom COLUMN today NOPRINT NEW_VALUE v_today COLUMN nim FORMAT A10 WORD_WRAPPED COLUMN nama FORMAT A20 WORD_WRAPPED COLUMN prodi FORMAT A10 WORD_WRAPPED HEADING "PRODI|JUR" COLUMN bayar FORMAT 99G999G999D99 --Menonakifkan RepHeader dan RepFooter REPHEADER "--START OF REPORT--" REPFOOTER "--END OF REPORT--" --Memberi Judul TTITLE CENTER "DAFTAR MAHASISWA" SKIP CENTER"===============================================" SKIP 2 LEFT "User : " SQL.USER SKIP RIGHT "Halaman :" FORMAT 99 SQL.PNO SKIP LEFT "Tanggal :" FORMAT A20 v_today SKIP LEFT "========================================================= ====" BTITLE LEFT "--------------------------------------------------------------------------------------------"SKIP 2
166 User, Privilege dan Role

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

--Mengaktifkan SPOOL. Nama file dapat diinput oleh user SET DEFINE ON ACCEPT file_name PROMPT "File penampung hasil report: " SPOOL &file_name --Menonaktifkan pencetakan keluaran ke SQL* PLUS SET TERMOUT OFF -- Query untuk menampilkan data-data pegawai select TO_CHAR(SYSDATE,'DD-MON-YYYY')today, nim, nama, prodi, bayar from mahasiswa ORDER BY 1,2; --Menghentikan Spool SPOOL OFF --Mengembalikan beberapa nilai system variable ke default SET FEEDBACK ON SET RECSEP WRAPPED SET TERMOUT ON SET MARKUP HTML OFF SPOOL OFF;

Hasil dari eksekusi script diatas adalah sbb:


DAFTAR MAHASISWA =================================== DEDY Halaman : 1 Tanggal : 09-AGT-2008

User :

Simple Report

167

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

NIM

NAMA MI

PRODI JUR

BAYAR 2.000.000,00 2.000.000,00 15.000.000,00

30107001 ANGGI NOVEMBRA 30107003 WIDO KESUMA MURDIJAT ARIF 30107004 PRABOWO

********** ------------avg minimum maximum ANUGRAH DWI 30207005 ARDIANTO 30207006 ANDRE ADRIAN 30207007 ANDI HAKIM ARIF avg minimum maximum SWANDY EFRAIM 30307008 MANALU 30307009 SITI NURFAUZIYAH avg minimum maximum KA TK 6.333.333,33 2.000.000,00 15.000.000,00 8.000.000,00 2.000.000,00 4.000.000,00 ********** ------------4.666.666,67 2.000.000,00 8.000.000,00 10.000.000,00 3.500.000,00 ********** ------------6.750.000,00 3.500.000,00 10.000.000,00

168

User, Privilege dan Role

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

10.4 JURNAL
1. 2. Berdasarkan contoh-contoh yang ada buatlah report untuk transaksi-transaksi yang terjadi dalam proses jual beli buku yang ada di modul 1 (format report harus sejelas dan selengkap mungkin)! Dari report yang ada di nomor 1 buatlah output HTML!

Simple Report

169

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

11

USER, PRIVILEGE dan ROLE

Overview

DBA (Database Administrator) perlu mengendalikan hak-hak dan akses pemakai untuk keperluan penjagaan terhadap penyalahgunaan hak-hak. Pada bab ini akan dibahas pembuatan, pembuangan dan pengubahanpengubahan pemakai.

Tujuan

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

Mampu membuat user pada oracle Mampu memonitor user. Mampu melakukan manipulasi pada user. Mampu mengenal obyek dan system privilages. Mampu untuk memberikan privilages kepada user. Mampu mengerti tentang roles dan menggunakannya. Mampu membuat dan memodifikasi roles. Mampu melakukan controlling dan removing pada roles.

170

User, Privilege dan Role

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

11.1 USER MANAGAMENT


11.1.1 User sebagai Tipe
Secara umum operasi-operasi untuk pemakai adalah tiga operasi klasik yaitu CREATE, ALTER, dan DROP. Tiga operasi klasik ini berlaku bagi objek-objek hampir semua tipe dalam database (bahkan ke objek bertipe database itu sendiri).

11.1.2

User versus Schema

Literatur oracle sering sekali mamakai kata schema, dan kata ini dipakai secara kurang hati-hati. Oracle memiliki operasi CREATE SCHEMA, namun tidak ada operasi DROP SCHEMA dan ALTER SCHEMA. Schema didefinisikan sebagai kumpulan objek-objek yang dimiliki pemakai/user. Kumpulan objek yang dimiliki pemakai SYSTEM membentuk schema SYSTEM. Kumpulan objek yang dimiliki SCOTT membentuk schema SCOTT. Anda dapat melihat bahwa kadang ada literature atau piranti yang menyebutkan CREATE SCHEMA namun tidak membuat objek sama sekali. Dalam hal tersebut, lebih tepat jika piranti meyatakan CREATE USER. Pemakain schema lebih tepat diterapkan pada topic data warehouse, saat membicarakan star schema. Selain itu dengan adanya schema semakin memperbanyak tree dalam beberapa piranti (termasuk oracle enterprise manager).

11.1.3

User versus account

Ada suatu istilah lagi yang terkait dengan user yaitu account. Istilah ini kelihatannya tidak begitu tepat dalam konteks pemakai database. Saat kita menyatakan LOCK atau UNLOCK suatu account pada dasarnya kita melakukan LOCK USER atau UNLOCK USER.

11.1.4

CREATE USER

Hanya dengan hak DBA saja yang bisa melakukan CREATE USER. Pertama anda connect sebagai pemakai dengan hak DBA untuk melakukan langkah-langkah berikut ini. Kita mulai dengan sintaks sederhana operasi CREATE USER.
User, Privilege dan Role 171

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

CREATE USER user_name IDENTIFIED EXTERNALLY | {by password} [ DEFAULT TABLESPACE tablespace_name ] [ TEMPORARY TABLESPACE tablespace_name ] [ ACCOUNT {LOCK|UNLOCK}];

Contoh :
CREATE USER scott2 IDENTIFIED BY tiger DEFAULT TABLESPACE mahasiswa TEMPORARY TABLESPACE temp_ mahasiswa;

Pilihan diatas adalah pembuatan pemakai yang diautentifikasi oleh password. Misalkan kita ingin membuat user scott3 yang diidentifikasi secara external oleh OS. Sintaks yang lengkap dapat dilihat dibuku manual ORACLE.
CREATE USER scott3 IDENTIFIED EXTERNALLY DEFAULT TABLESPACE praktikum TEMPORARY TABLESPACE temp_praktikum;

Sangat sulit mengecek effektifitas dan konsekuensi autentikasi lewat cara ini.

11.1.5

ALTER USER

Mengubah pemakai dilakukan dengan operasi ALTER USER. Perubahan yang perlu biasanya mencakup perubahan password, default tablespace, temporary tablespace, profile, quota, dan status penguncian. Contoh berikut menyangkut pengubahan pemakai, memaksa pemakai untuk mengubah passwordnya.
ALTER USER scott2 IDENTIFIED BY peterpan PASSWORD EXPIRE;
172 User, Privilege dan Role

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

Pemanggilan operasi berikut merubah quota pemakai scott2 sehingga tidak bisa membuat objek di tablespace praktikum. Perhatikan bahwa tidak ada penyebutan tipe TABLESPACE .
ALTER USER scott2 QUOTA 0 MON MAHASISWA;

11.1.6

DROP USER

Membuang pemakai dilakukan dengan operasi DROP USER. Sintaksnya :


DROP USER user_name [CASCADE];

Aturannya sebagai berikut : Jika pemakai tidak memiliki objek maka penyebutan CASCADE tidak perlu dilakukan. Sekalipun CASCADE dispesifikasikan, pembuangan pemakai bisa gagal yang disebabkan oleh : i. Mencoba membuang pemakai/user SYS dan SYSTEM. Hal ini disebakan karena kedua user ini tidak bisa dibuang. ii. Mencoba membuang user yang masih connect ke service. Perhatikan bahwa tidak ada operasi untuk hanya membuang obyek-obyek seorang pemakai tanpa membuang pemakai tersebut. DBA harus menulis program khusus untuk hal itu.

11.1.7

MONITORING USER

Berikut metadata views untuk memantau pemakai ; iii. DBA_users : berisi informasi seluruh user yang dimiliki oleh DBA iv. DBA_TS_Quotas : berisi informasi tentang tablespace quota bagi setiap pemakai. v. V$session : untuk melihat user yang sedang connect ke system Coba lakukan perintah selectin berikut :
SELECT * FROM DBA_users;

User, Privilege dan Role

173

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

Perintah diatas digunakan untuk menampilkan semua informasi users yang dimiliki DBA
SELECT * FROM DBA_TS_Quotas;

Perintah diatas digunakan untuk menampilkan semua informasi tablespace masing-masing user
SELECT * FROM V$session;

quota

Perintah diatas digunakan untuk menampilkan semua user yang connect ke system

11.2 PRIVILEGES
Salah satu model keamanan dalam penggunaan DBMS kita adalah adanya privilege(hak). Model keamanan ini biasa diapakai di OS(operating system) maupun server lainnya.

11.2.1

Operasi-operasi

Operasi-operasi untuk privilege terbatas pada GRANT dan REVOKE. Operasi GRANT memberikan hak akses kepada satu atau lebih pemakai, sebaliknya operasi REVOKE membuang hak akses dari satu atau lebih pemakai. Apa saja hak-hak yang diperoleh seorang pemakai/user apabila DBA memberi grant role connect dan resource, kita bisa memberikan jawabannya dengan melihat metadata view berikut. 1. connectlah sebagai DBA 2. jalankan perintah
DESCRIBE DBA_sys_privs;

SQL> set line 10; SQL> desc dba_sys_privs; Name -----------------------GRANTEE PRIVILEGE ADMIN_OPTION
174

Null? -----------NOT NULL NOT NULL

Type

VARCHAR2(30) VARCHAR2(40) VARCHAR2(3)


User, Privilege dan Role

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

SQL> SELECT * FROM DBA_SYS_PRIVS


WHERE grantee in (CONNECT,RESOURCE) ORDER BY grantee; GRANTEE PRIVILEGE ------------------------------ ---------------------------------------CONNECT ALTER SESSION CONNECT CREATE CLUSTER CONNECT CREATE DATABASE LINK CONNECT CREATE SEQUENCE CONNECT CREATE SESSION CONNECT CREATE SYNONYM CONNECT CREATE TABLE CONNECT CREATE VIEW RESOURCE CREATE CLUSTER RESOURCE CREATE INDEXTYPE RESOURCE CREATE OPERATOR RESOURCE CREATE PROCEDURE RESOURCE CREATE SEQUENCE RESOURCE CREATE TABLE RESOURCE CREATE TRIGGER RESOURCE CREATE TYPE --ADM NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO

Scott berhak merubah session, membuat cluster, database link, type, sequence, session, synonym, view, cluster, indextype, operator, procedure, sequence, table, dan trigger. Privilage terbagi menjadi dua jenis yaitu system-level dan object-level. Kita akan pelajari keduanya. Sebelum itu mari kita buat seorang user lagi.
CREATE USER scotti IDENTIFIED BY tiger DEFAULT TABLESPACE mahasiswa TEMPORARY TABLESPACE temp_ mahasiswa; GRANT conncet, resource to scotti;

User, Privilege dan Role

175

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

11.2.1.1

System-level privileges

System level privilege tidak terkait dengan object tertentu secara spesifik. Semua (15) privilege yang kita lihat diatas adalah system level, tak terkait dengan suatu object tertntu secara spesifik. Ada lebih dari 80 system level privilege dalam oracle RDBMS. DBA berhak untuk men-drop user dan backup tables.

11.2.1.2

Object-level privileges

Privilege ini terkait dengan object tertentu secara spesifik. Misal user bernama scott9 memiliki dua object (bertipe sama maupun bukan). Jika scott9 hanya memberi object level privilege kepada scotti, maka scotti tak otomatis memiliki object level privilege terhadap object yang satu lagi. Mari kita lihat contoh dibawah
SQL> connect scott9 Enter password: ***** Connected. SQL> create table satu( a number, b varchar(9)); Table created. SQL> insert into satu values(1,'x'); 1 row created. SQL> create table dua( c number, d varchar(9)); Table created. SQL> insert into dua values(1,'x'); 1 row created. SQL> GRANT SELECT ON satu TO scotti; Grant succeeded.
176 User, Privilege dan Role

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

SQL> connect scotti@basdat/tiger; Connected. SQL> select * from scott9.satu; A B --------- --------1 x 2 y SQL> select * from scott9.dua; select * from scott9.dua * ERROR at line 1: ORA-00942: table or view does not exist

Scotti dapat mengakses table satu milik scott9 tetapi tidak bisa mengakses table dua milik scott9, karena scotti tidak diberi akses oleh scott9 untuk mengakses table dua.

11.2.2

REVOKE PRIVILEGES

Sekarang kita akan mencoba mnghapus hak akses scotti terhadap table satu. Ikuti langkah berikut : 1. masuk sebagai user scott9 2. jalankan perintah berikut SQL> revoke select on satu from scotti; Revoke succeeded. 3. 4. masuk sebagai user scotti jalankan selection terhadap table satu milik scott9

SQL> select * from scott9.satu; select * from scott9.satu * ERROR at line 1: ORA-00942: table or view does not exist Terlihat bahwa revoke telah menghilangkan hak akses terhadap suatu object. Revoke hanya dapat dilakukan oleh pemberi hak akses.
User, Privilege dan Role 177

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

11.2.3

Keamanan Privilege dan Roles

Sekarang kita akan melihat model keamanan yang melibatkan privilege dan role. Untuk memudahkan pemahaman mari kita lihat gambar berikut

PRIVILEGE Granted to

ROLE Granted to

USER

Keterangan : satu atau lebih privilege bisa di grant ke role satu atau lebih role bisa digrant ke role satu atau lebih role bisa di grant ke user satu atau lebih privilege bisa di grant ke user.

11.3 ROLES
Role adalah sekumpulan named set of privilege. Operasi-operasi yang terdapat pada role adalah CREATE, ALTER, dan DROP, satu operasi SET untuk pengaktifan ditambah dengan dua operasi GRANT dan REVOKE (seperti untuk privilege). Role dibuat untuk mempermudah pengelolaan privilege.

178

User, Privilege dan Role

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

11.3.1
Role CONNECT RESOURCE DBA

System Defined Role


Kegunaan Lihat di bab sebelumnya Lihat di bab sebelumnya Semua privilege dengan ADMIN OPTION Export full database Import full database

DBMS Oracle menyediakan system defined role yang siap dipakai

EXP_FULL_DATABASE IMP_FULL_DATABASE

11.3.2

Creating Roles

Membuat role dialakukan dengan operasi CREATE ROLE. Ada syarat agar seorang pemakai dapat menggunakan hak ini(membuat role), yaitu harus memiliki hak akses untuk membuat role(CREATE ROLE). Secara default hak ini tidak diberikan ke pemakai jadi DBA harus memberikan hak ini secara explicit. 1. masukklan sebagai user anda 2. jalankan perintah berikut
SQL> CREATE ROLE mahasiswa; Role created.

11.3.3

Operasi GRANT

Operasi GRANT dipakai untuk meng-assign privilege atau role kepada role. Pertama kita akan memberikan sebuah privilege kepada role mhs_role berupa kemampuan untuk selection kepada table mahasiswa.
SQL> grant select on mahasiswa to mhs_role; Grant succeeded.

User, Privilege dan Role

179

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

Kita akan memberikan role yang telah kita buat kepada pemakai kita yaitu scotti. Jalankan perintah SQL berikut
SQL> GRANT mhs_role to scotti; Grant succeeded.

11.3.4

Memakai Roles

Untuk menggunakan role mhs_role tadi oleh scotti maka scotti harus melakaukan SET terhadap role tersebut
SQL> set role mhs_role; Role set. SQL> select * from scott9.mhs; NIM NAMA ----------- -------------------30108001 paijo 30108002 paimen

11.3.5

Removing Roles

Operasi yang digunakan adalah REVOKE 1. masukklah sebagai scott9 2. jalankan SQL berikut SQL> REVOKE mahasiswa from scotti; Revoke succeeded. 3. masuklah sebagai scotti jalankan perintah berikut

SQL> connect scotti@basdat/tiger Connected.

180

User, Privilege dan Role

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

SQL> select * from scott9.mhs; select * from scott9.mhs * ERROR at line 1: ORA-00942: table or view does not exist

11.3.6

Mengubah Roles

Operasi ALTER ROLE diapakai untuk mengubah tingkat kerahasiaan. Sintaks : ALTER : ROLE name {NOT IDENTIFIED | IDENTIFIED {BY Contoh ALTER ROLE mhs_role NOT IDENTIFIED; password | EXTERNALLY }; ALTER ROLE mhs_role IDENTIFIED BY SCOTT9; ALTER ROLE mhs_role IDENTIFIED EXTERNALLY;

11.3.7

Membuang Roles

Sama seperti membuang table, index, type dan yang lainnya, yaitu menggunakan operasi DROP. SQL> connect scott9@basdat/tiger Connected. SQL> drop role mahasiswa; Role dropped. Perhatikan efeknya, hak hak yang diperoleh dalam role tersebut akan hilang SQL> connect scotti@basdat/tiger Connected. SQL> select * from scott9.mhs; select * from scott9.mhs *
User, Privilege dan Role 181

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

ERROR at line 1: ORA-00942: table or view does not exist Untuk melihat role yang dimiliki anda bis amenjalankan perintah SQL berikut
SQL > select * from role_sys_privs PRIVILEGE ------------------------------------- -------ALTER SESSION CREATE CLUSTER CREATE DATABASE LINK CREATE SEQUENCE CREATE SESSION CREATE SYNONYM CREATE TABLE CREATE VIEW CREATE CLUSTER CREATE INDEXTYPE CREATE OPERATOR CREATE PROCEDURE CREATE SEQUENCE CREATE TABLE CREATE TRIGGER CREATE TYPE AD NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO

ROLE -----------------CONNECT CONNECT CONNECT CONNECT CONNECT CONNECT CONNECT CONNECT RESOURCE RESOURCE RESOURCE RESOURCE RESOURCE RESOURCE RESOURCE RESOURCE 16 rows selected.

Untuk melihat role yang sedang digunakan SQL > select * from session_roles; ROLE -----------------------------CONNECT RESOURCE

182

User, Privilege dan Role

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

11.4 JURNAL
Dari studi kasus di modul yang pertama buatlah skema user privileges dan role sebagai berikut: 1. Terdapat user biasa (pengunjung) yang dapat melihat dan mencari katalog buku melalui aplikasi yang disediakan (hanya dapat melakukan operasi select). Terdapat user kasir yang otoritasnya hanya dapat melihat data buku dan mengolah/memanipulasi data-data transaksi. 2. Terdapat user administrasi logistik yang memiliki otoritas penuh terhadap semua tabel kecuali tabel-tabel transaksi. 3. Terdapat user manager yang hanya dapat melakukan view ke semua tabel. 4. Terdapat user administrator yang memiliki akses penuh ke semua tabel dan schema dan dapat memberikan akses yang dimilikinya ke user yang lain.

User, Privilege dan Role

183

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

12

Backup and Recovery

Overview

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

Tujuan

1. 2. 3.

Mahasiswa memahami konsep dan terminologi Backup / Recovery. Mahasiswa dapat mengimplementasikan Backup / Recovery. Mahasiswa dapat meyelesaikan berbagai persoalan yang terkait dengan Backup and Recovery.

184

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

Issue dari Backup dan Recovery bagi administrator database yaitu: mengantisipasi terjadinya suatu failure pada database meningkatkan mean time between failure mengurangi mean time to recover dan mengurangi terjadinya loss data Backup berarti suatu kegiatan untuk menyimpan database dalam bentuk datafile, control file dan archieve log ke dalam media penyimpanan lain seperti disk atau tape. Sedangkan Recovery merupakan suatu proses untuk mengupdate database dengan file Backup yang telah disimpan terakhir kalinya. Ada dua cara untuk melakukan Backup dan Recovery, yaitu : 1. 2. Physical Backup Contohnya : RMAN Backup dan Restore Logical Backup Contohnya : Export dan Import, Flashback

Dalam melakukan backup dan Recovery pada oracle 10g, disediakan tampilan web ( Enterprise Manager ) sehingga memudahkan admin database untuk melakukan administrasi. Berikut beberapa hal yang perlu dilakukan apabila akan melakukan backup dan Recovery pada Enterprise Manager : 1. 2. 3. 4. 5. 6. 7. 8. Konfigurasi setting backup dan kebijakan ( policy ) Menentukan DBID dan DB_UNIQUE_NAME Melakukan backup seluruh database Melakukan backup database dengan Strategi Oracle-suggested Melakukan restoring dan recovery database dengan menggunakan strategi oracle-suggested Flashback table Flashback Drop Mengatur backup

Backup and Recovery

185

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

12.1 Konfigurasi Setting Backup dan Kebijakan ( policy )


Kita dapat mengkonfigurasi sejumlah setting dan kebijakan ( policy ) tentang bagaimana cara untuk melakukan backup, data yang akan di backup, bagaimana cara penyimpanan file yang di backup, bagaimana untuk melakukan restore, dan berapa lama backup akan disimpan di Recovery area. Kita juga bisa mengkonfigurasi feature untuk memperbaiki Perform ansi dari backup. 1. Klik Maintenance di halaman home Oracle Database

2. 3.

Pilih Backup Setting di bagian Backup/Recovery Settings. Arahkan ke host credential di halaman Backup Setting. Kemudian masukkan username dan password system operasi kita. Kemudian arahkan ke bagian disk setting.

186

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

4.

Terima nilai 1 di kolom parallelism di bagian disk setting pada halaman device. Kolom lokasi disk Backup diset kosong jadi untuk backup akan digunakan flash Recovery area. Pilih backup set untuk tipe disk backup. Kemudian klik test disk Backup.

5. 6. 7. 8.

Akan ada tampilan pesan bahwa test disk setting untuk backup telah sukses. Sekarang kita akan mengkonfigurasi settingan kebijakan untuk backup. Klik policy untuk mengakses halaman policy. Pilih Automatically Backup untuk control file dan server parameter file (spfile) dengan pengubahan struktur database dan backup database. Pilih optimize seluruh database dengan melewatkan file yang sudah di backup.

Backup and Recovery

187

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

9.

Pilih enable block change tracking for faster incremental backup .

10. Masukkan nama untuk block change tracking file. Kemudian arahkan ke bagian retention policy. 11. Pilih Retain Backup that are necessary for a Recovery to any time within the asecified number of days (point-in-time Recovery) dan terima jumlah harinya yaitu 31 hari.

12. Klik ok. kemudian kita akan kembali ke halaman Maintenance.


188

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

12.2 Menentukan DBID dan DB_UNIQUE_NAME


Jika kita kehilangan controlfile atau spfile database kita, Enterprise Manager tetap dapat mengembalikan database kita yang telah di backup, selama kita mengetahui DB_UNIQUE_NAME dan DBID dari database kita. Berikut langkah-langkah untuk mengetahui DB_UNIQUE_NAME : 1. 2. Klik All initialization Parameters di bagian Instance di halaman Administration Masukkan db_unique_name di kolom Filter pada halaman property Current dan kemudian klik button Go

Backup and Recovery

189

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

3.

Halaman berikutnya akan tampil hasil eksekusi diatas yang menunjukkan db_unique_name di kolom nama dan db_unique_name value yaitu orcl di kolom value

Berikut langkah-langkah untuk menentukan DBID : 1. 2. Klik controlfiles di bagian storage pada halaman administration. Halaman control files muncul. Pilih property advanced.

190

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

3.

Kolom database ID berisi nomor DBID.

Note : DBID harap diingat karena dibutuhkan untuk operasi Recovery.

Backup and Recovery

191

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

12.3 Melakukan Backup seluruh Database


Kita dapat melakukan backup seluruh isi database kita dengan melakukan backup keseluruhan ( backup seluruh datafile ). Hasil dari backup seluruh database kita akan disimpan sebagai salinan gambar atau sebagai tumpukan backup, tetapi di contoh yang lain isi dari seluruh database akan direpresentasikan sama dengan control file, archieved redo log dan server parameter file. Database akan dapat di Recovery dengan file-file ini. Berikut langkah-langkah untuk backup seluruh database : 1. 2. 3. Pada halaman Home pilih menu Maintenance. Arahkan ke menu Backup/Recovery, dan pilih Schedule Backup. Halaman Schedule Backup muncul. Arahkan cursor ke bagian Customized Backup. Pilih Whole Database dan masukkan nama dan password di host credential. Kemudian klik schedule customized backup.

192

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

4.

Halaman Schedule Customized Backup : Options muncul. Pilih Full Backup di bagian Backup Type. Kemudian pilih Online Backup di bagian Backup Mode. Pilih Back up all archieved logs on disk di bagian Advanced. Klik Next.

5.

Halaman Schedule Customized Backup : Settings muncul. Pilih Disk atau Tape, terserah kita akan membackup data dimana ( pada contoh ini kita menggunakan disk sebagai tempat beackup ). Klik Next.

Backup and Recovery

193

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

6.

Halaman Schedule Customized Backup : Schedule muncul. Kita dapat mengubah atau membiarkan Job Name dan Job Description. Pilih Immediately untuk mengeksekusi tugas tersebut secepat mungkin atau memasukkan waktu untuk mengeksekusi waktu pada waktu tertentu. Kemudian Klik Next.

194

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

7.

Halaman Schedule Backup : Review muncul. Klik Submit Job.

8.

Kemudian akan tampil pesan bahwa permintaan untuk Submit telah sukses. Klik OK

Note : kita hanya bisa melakukan backup secara online jika database kita berada pada mode archive

Backup and Recovery

195

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

12.4 Melakukan Backup database dengan Strategi Oracle-suggested


Strategi Backup Oracle-suggested ialah backup akan menyalin gambaran database (image copy) dengan menggunakan backup incremental RMAN. Oracle Enterprise Manager akan menjadwalkan backup dengan RMAN. Berikut langkah-langkah untuk mensetting Schedule Backup : 1. 2. Pilih Schedule Backup di bagian Backup/Recovery Halaman Schedule Backup muncul. Pilih Oracle-suggested backup. Kemudian masukkan username dan password di bagian host credentials. Klik Next.

196

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

3.

Pilih disk sebagai tujuan dari tempat backup yang akan kita coba. Kemudian klik Next.

4.

Halaman Schedule Backup : Setup muncul. Baca kembali informasinya klik Next

Backup and Recovery

197

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

5.

Halaman Schedule Backup : Schedule muncul. Baca kembali informasinya dan sesuaikan tanggal dan waktu sesuai keperluan kita. Kemudian Klik Next

198

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

6.

Halaman Schedule Backup : Review muncul. Baca kembali informasinya dan klik Submit Job.

Halaman Status akan muncul dengan sebuah pesan yang menunjukkan bahwa job telah didaftarkan dengan sukses. Kita dapat klik View Job untuk mengakses halaman status job atau klik OK untuk melengkapi operasi tersebut. Note : backup dengan strategi Oracle-suggested dilakukan secara incremental.

7.

Backup and Recovery

199

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

12.5 Melakukan Recovery Database Secara Keseluruhan


Berikut langkah-langkah untuk melakukan Recovery Database secara keseluruhan : 1. 2. 3. Pilih Maintenance pada menu halaman Home Enterprise Manager. Pilih Perform Recovery di bagian Backup/Recovery. Halaman Perform Recovery muncul. Pilih Recover to the current time or a previous point-in-time sebagai tipe operasi. Masukkan username dan password di bagian Host Credentials. Kemudian klik Perform Whole Database

200

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

4.

Halaman Recovery Wizard kemudian muncul dan memberitahu jika instance akan di matikan (shutdown ) dan dihidupkan kembali (restarted). Klik Refresh untuk lanjut menggunakan Recovery Wizard.

5.

Kita kembali ke halaman Maintenance. klik Perform Recovery. masukkan host credentials. klik Perform Whole Database Recovery untuk merecovery database.

Backup and Recovery

201

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

6.

Halaman Perform Recovery : Point-in-time muncul. Pilih Recover to the current time. Klik Next.

7.

Halaman Perform Recovery : Rename muncul. Pilih No. Restore the files to the default location jika itu pilihan kita atau pilih Yes. Restore the file to a new, commen location dan kemudian masukkan lokasinya. Klik Next.

202

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

8.

Halaman Perform Recovery : Review kemudian muncul. Baca kembali informasi dan klik Submit.

9.

Kemudian akan muncul pesan Operation succeeded. Klik Ok. Note : proses ini hanya dapat dilakukan jika spfile dan controlfile tidak hilang atau rusak.

Backup and Recovery

203

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

12.6 Flasback Tabel


Untuk dapat melakukan operasi flashback pada tabel, maka harus dilakukan langkah-langkah berikut : Enable Row Movement Simulasikan User Error Melakukan flashback pada tabel

12.6.1

Enable Row Movement

Enable Row Movement dilakukan pada tabel-tabel tertentu, misalnya kita memiliki tabel HR.REGIONS. 1. 2. Klik Administration di halaman Oracle Database Home. Halaman property Administration kemudian muncul. Pilih Tables di bagian Schema.

3.

Halaman Tables kemudian muncul. Masukkan HR di bagian Schema dan Regions di kolom Object Name. klik Go.

204

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

4.

Tabel REGIONS kemudian terpilih di bagian Results. Klik Edit.

5.

Halaman Edit Table kemudian muncul. Klik tab Options.

Backup and Recovery

205

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

6.

Pilih Yes dari menu drop-down Enable Row Movement. Klik Apply.

206

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

7.

Kemudian kita akan menerima sebuah pesan yang menyatakan bahwa tabel telah dengan sukses di modifikasi. Kemudian pilih Tables.

12.6.2

Simulasikan User Error

Sekarang kita akan mensimulasikan error yang disebabkan karena perubahan data di tabel regions. 1. Lihat data di tabel regions dengan membuka sql plus dan mengeksekusi perintah berikut

Sqlplus HR/HR col region_name format a30 select * from regions;


2. Simulasikan user error dengan mengeksekusi perintah sql untuk mengganti nilai dari kolom region_name di semua baris : Update regions set region_name = Oracle; Commit; Lihat perubahannya dengan menuliskan perintah Select * from regions;

3.

12.6.3

Melakukan flashback pada tabel

Berikut langkah-langkah untuk melakukan flashback pada tabel : 1. Pastikan bahwa REGIONS masih terpilih di daftar tabel. Pilih Flashback Table dari menu drop-down. Klik Go.

Backup and Recovery

207

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

2.

Halaman Perform Recovery : Point-in-time kemudian muncul. Pilih Flashback to a timestamp dan masukkan tanggal dan waktu beberapa menit yang lalu. Klik Next.

208

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

3.

Halaman Perform Recovery : Flashback Tables muncul. Baca kembali informasi di halaman tersebut kemudian klik Next.

Backup and Recovery

209

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

4.

Halaman Perform Recovery : Review muncul. Baca kembali informasnya dan kemudian klik Submit.

5. 6.

Kita akan menerima konfirmasi bahwa tabel telah di flashback. Klik Ok. Sekarang pindah ke sesi sql*plus dan eksekusi perintah untuk melihat operasi flashback tabel yang telah kita lakukan : Select * from regions;

210

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

12.6.4

Flashback Drop

Pada bagian ini kita akan menggunakan fitur flashback drop untuk mengembalikan sebuah tabel yang telah di drop. Sebagai latihan, akita akan membuat sebuah tabel, menghapus tabel, kemudian mengembalikannya dengna menggunakan flashback drop. Berikut langkah-langkah untuk membuat tabel baru dan kemudian kita hapus tabel tersebut : 1. Masukkan HR di kolom Schema dan REGIONS di kolom Object Name atau sebagian dari nama di kolom Object Name dan klik Go.

Backup and Recovery

211

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

2.

Pilih Create Like dari menu drop down actions. Klik Go.

3.

Halaman untuk membuat tabel kemudian muncul. Masukkan REG_HIST di kolom nama. Jangan klik Not Null pada kolom REGION_ID. Klik Constraints.

212

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

4.

Halaman Constraints kemudian muncul. Hapus constraint pada tabel dengan memilihnya satu-satu kemudian klik delete.

5.

Klik OK untuk membuat tabel REG_HIST.

Backup and Recovery

213

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

6.

Kita akan menerima pesan yang menyatakan bahwa tabel telah dibuat. Kemudian masukkan REG_HIST ke dalam kolom Object Name dan klik Go.

7.

Halaman Tables kemudian ditampilkan dengan tabel REG_HIST di bagian Results. Klik Delete untuk menghapus tabel REG_HIST.

214

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

8.

Klik Yes untuk mengkonfirmasi penghapusan tabel.

9.

Kemudian dikeluarkan pesan yang menandakan bahwa proses penghapusan tabel telah dieksekusi. Klik Go untuk mencari tabel. 10. Tidak ada yang akan ditampilkan di bagian Result Displayed in the results section. Untuk mengembalikan tabel yang telah terhapus, kita dapat melakukan flashback drop. Berikut langkah-langkahnya :
Backup and Recovery 215

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

1. Pilih Recycle Bin 2. Inputkan HR di kolom nama Schema dan klik Go.

3.

Pilih tabel REG_HIST kemudian klik Flashback Drop.

216

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

4.

Halaman Perform Recovery : Rename kemudian muncul. Klik Next.

5.

Halaman Perform Recovery : Rview kemudian muncul. Baca kembali informasi tersebut kemudian klik Submit.

Backup and Recovery

217

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

6. 7. 8.

Kemudian akan muncul pesan konfirmasi. Klik Ok Tabel tersebut tidak lagi berada di Recycle Bin. Klik Tables. Sekarang tabel REG_HIST telah ada di daftar tabel.

12.7 Mengatur Backup


Mengatur backup terdiri dari 2 tugas yaitu mengatur backup file yang ada di disk atau tape, dan mengatur catatan dari backup yang ada di RMAN Repository. Pada bagian ini, kita akan melakukan maintenance pada backup dan meng-update RMAN repository. Pada bagian ini kita akan melakukan hal-hal berikut :
218

Menggunakan halaman untuk mem backup database yang ada pada waktu ini Backup crosschecking Menghapus backup yang sudah expired Menghapus backup yang Obsolete Menkitakan backup menjadi tidak ada (unavailable) Membuat catalog untuk backup

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

12.7.1 Menggunakan halaman untuk membackup database yang ada pada waktu sekarang
1. Klik Manage Current Backups pada bagian Maintenance > Backup/Recovery.

Backup and Recovery

219

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

2.

Halaman Manage Current Backups muncul. Halaman Backup Sets akan menunjukkan backup yang ada di RMAN repository. Klik link di kolom Contents untuk melihat detail informasi mengenai isi dari backup.

3.

Halaman Contents kemudian muncul. Klik Manage Currents Backups untuk kembali.

220

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

4.

Klik Image Copies untuk melihat halaman Image Copies.

5.

Halaman Image Copies kemudian memperlihatkan jika image copies yang telah disimpan di RMAN repository.

12.7.2

Backup Crosschecking

Saat kita melakukan crosschecking sebuah backup, RMAN akan memverifikasi bahwa informasi yang disimpan di repository sesuai dengan yang ada di backup secara fisik. Jika tidak sesuai, repository akan di update sesuai dengan status yang ada sekarang. Kita dapat melakukan crosscheck seluruh database kita dengan langkah-langkah berikut : 1. 2. Klik Manage Backups di bagian Backup/Recovery Halaman Manage Current Backups kemudian muncul. Klik Crosscheck All dibagian kanan atas untuk melakukan crosscheck semua file yang ada di RMAN repository.

Backup and Recovery

221

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

3.

Halaman Crosscheck All : Specify Job Parameters muncul. Kita dapat menerima nama job standard untuk nama job, deskripsi job, waktu mulai, dan ulangi spesifikasinya atau masukkan nilai yang kita inginkan. Klik Submit Job untuk memasukkan job untuk crosscheck.

4.

Sebuah pesan bahwa permintaan job telah sukses kemudian ditampilkan. Kemudian klik View Job untuk melihat status dari job tersebut.

222

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

5.

Di bagian Summary, kita dapat melihat statu dari job.

Backup and Recovery

223

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

12.7.3
1. 2.

Menghapus backup yang expired

Klik Manage Current Backups pada bagian Backup/Recovery di halaman Maintenance. Halaman Manage Current Backups muncul. Klik Delete All Expired di atas halaman untuk menghapus RMAN repository semua backup yang terdeteksi sebagai backup yang usang.

3.

Halaman Delete All Expired: Specify Job Parameters kemudian muncul. Kita bisa membiarkan standar untuk nama Job, deskripsi job, waktu mulai, dan spesifikasi yang berulang atau memasukkan nilai tertentu. Pilih Perform the operation Crosscheck All before Delete All Expired. Jika kita tidak melakukan operasi crosscheck. Kli k Submit Job untuk memasukkan job tersebut.

224

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

4.

Kemudian pesan yang mengatakan jika Job Submission sukses ditampilkan. Kita dapat memilih View Job untuk melihat status dari Job.

5.

Pada bagian Summary, kita dapat melihat status dari job.

Backup and Recovery

225

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

12.7.4 Menghapus Backup yang usang ( Obsolete )


Backup yang using ( obsolete ) berarti file Backup sudah tidak layak untuk digunakan dalam melakukan Recovery. Untuk dapat menghapus Backup yang obsolete berikut langkah-langkah nya : 1. 2. Klik Manage Current Backups di bagian Backup/Recovery pada halaman Maintenance. Halaman Manage Current Backups muncul. Klik Delete All Obsolete di bagian kanan atas halaman untuk membuang backup yang tidak terpakai dari RMAN repository yang tidak terpakai.

3.

Halaman Delete All Obsolete: Specify Job parameters kemudian muncul. Kita dapat menerima standar untuk nama Job, deskripsi Job, waktu mulai dan spesifikasi yang diulang-ulang atau masukkan nilainya sendiri. Klik Submit Job untuk mendaftar job tersebut.

226

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

4.

Kemudian akan muncul pesan konfirmasi bahwa pendaftaran job telah sukses didaftarkan dan kemudian ditampilkan pada halaman Manage Current Backups. Kita dapat memilih View job untuk melihat status dari job.

5.

Di bagian Summary kita dapat melihat status job.

Backup and Recovery

227

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

6.

Kembali ke halaman Image Copies atau Backup Sets untuk memastikan bahwa Backup yang usang telah dihapus.

12.7.5 Menandakan Backup menjadi tidak ada ( unavailable )


Untuk dapat menandakan backup menjadi tidak ada ( unavailable ) maka dapat dilakukan langkah-langkah berikut : 1. 2. Klik Manage Current Backups di bagian Backup/Recovery pada halaman Maintenance. Halaman Manage Current Backups muncul. Pilih Backup yang akan kita tandai sebagai UNAVAILABLE dan klik Change to Unavailable.

3. 4.
228

Sebuah halaman akan ditampilkan. Klik Yes untuk melanjutkan operasi. Halaman permintaan sedang dalam keadaan progress ditampilkan.

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

12.7.6

Membuat Katalog untuk Backup

Kita dapat mengklasifikasikan backup dengan perintah system operasi sehingga RMAN dapat menggunakan mereka dalam sebuah operasi Recovery. Sebagai contoh, disini kita akan melakukan backup datafile yang termasuk ke dalam contoh table space dengan menggunakan perintah system operasi. Kemudian kita bisa mengklarifikasikan file backup di RMAN repository dengan menggunakan Enterprise Manager. Berikut langkah-langkahnya : 1. Buka SQL*Plus dan login sebagi user dengan hak akses sebagai SYSDBA. Disini kita diberikan pilihan untuk melakukan backup online pada sebuah tablespace. Missal dilakukan backup pada tablespace example.

2.

Kembali ke promt system operasi dan buatlah sebuah salinan system dan membuat salinan dari datafile yang termasuk ke dalam directory baru yaitu backup. Kita dapat menggunakan directory lain terserah keinginan.

Backup and Recovery

229

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

3.

Ambil contoh table space yang akan melakukan online backup dengan mengunakan perintah di bawah ini :

4.

5.

Sekarang kita lakukan catalog backup di RMAN repository dengan menggunakan Database Control Enterprise Manager. Klik Manage Current Backups di bagian Backup/Recovery pada halaman Maintenance. Pilih Catalog Additional Files pada bagian kanan atas halaman

230

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

6.

Pilih Catalog files in the specified disk location into the Recovery Manager repository dan masukkan lokasi dan nama dari backup file. Klik Ok.

7. 8.

Halaman progress untuk permintaan ditampilkan. Sebuah pesan konfirmasi menyatakan jika file telah dikatalog-kan.

12.8 JURNAL
1. Buatlah sebuah database dengan nama sesuai nim anda, kemudian bikin tabel dan diisi sesuai studi kasus pada bab sebelumnya . lakukan strategi fullbackup terhadap database anda. Dari database yang telah anda bikin, lakukan operasi flashback tabel. Recover seluruh database anda mengunakan strategi full recovery. Cari cara bagaimana melakukan backup dan recovery menggunakan perintah RMAN (console based)?

2. 3. 4.

Backup and Recovery

231

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

13

Monitoring and Resolving Lock Conflicts

Overview

Memungkinkannya transaksi dapat dilakukan secara konkuren menimbulkan suatu permasalahan tentang pengaturan resource. Dalam pengaturan resource dibutuhkan suatu lock agar si pengakses data tidak mengalami interupt dari transaksi lain.

Tujuan

1. 2. 3.

Mahasiswa memahami konsep Locking pada Oracle. Mahasiswa memahami cara mendeteksi lock conflicts. Mahasiswa mampu mengatasi deadlock.

232

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

13.1 Locks
Istilah lock pada database berarti suatu kunci atau penguncian. Lock digunakan pada saat terjadi pengaksesan database oleh user secara bersamaan. Hal ini ditujukan untuk menjaga data agar tidak corrupt / hilang atau data yang tidak valid pada saat banyak user mengakses database secara bersamaan / konkuren. Sebelum database mengijinkan suatu sesi user untuk memodifikasi data, pertama-tama sesi me-lock data yang akan dimodifikasi. Lock memberikan exclusive control terhadap suatu data pada sebuah sesi sehingga tidak akan ada transaksi lain yang dapat memodifikasi data yang ter-lock sampai lock terhadap data tersebut telah di lepas. Transaksi dapat melakukan lock pada sebuah row data dari suatu tabel, multiple row data dari suatu tabel, atau satu tabel itu sendiri yang di lock. Oracle 10g memiliki mekanisme lock secara manual dan otomatis. Ada dua mekanisme untuk melakukan locking data pada database yaitu : 1. Pessimistic Locking Proses locking yang terjadi pada saat lock di request maka record atau table akan di lock secara immediate / langsung. 2. Optimistic Locking Proses locking yang terjadi pada saat suatu record / data pada database dilakukan suatu perubahan / update.

LockHandling

233

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

13.2 Locking Mechanism


Locking mekanisme di disain untuk menyediakan derajat konkurensi yang tinggi yang terjadi pada database. Suatu transaksi yang memodifikasi data memperoleh row-level locks daripada table-level locks. Proses query pada suatu data tidak membutuhkan mekanisme lock terhadap data yang di query, sebuah query tetap berhasil dieksekusi pada suatu data atu tabel walaupun ada user yang member lock pada stuatu data atau tabel. Pada saat multiple transaksi membutuhkan suatu lock pada resource yang sama, transaksi yang pertama meminta lock pada suatu resource tersebut. Transaksi yang lainnya berada pada fase menunggu di antrian sampai transaksi yang pertama telah selesai mengeksekusi resource. Mekanisme antrian ini bersifat otomatis dan tidak membutuhkan interaksi dari suatu administrator atau user yang lain. Semua lock di lepas pada saat transaksi berakhir. Transaksi dikatakan selesai / complete apabila perintah commit atau rollback dilaksanakan. Pada kasus transaksi yang failed, baground proses secara otomatis melakukan rollback kegagalan yang terjadi dengan merubah transaksi yang gagal tersebut menjadi ke posisi save point atau sebelum proses transaksi gagal.

13.3 Data Concurrency


Mekanisme lock secara default berada pada row-level locking mode. Transaksi yang berbeda dapat mengupdate row data yang berbeda yang berada pada sebuah tabel yang sama tanpa bertentangan antara yang satu

SQL > LOCK TABLE karyawan IN EXCLUSIVE


dengan yang lain. Sementara default model lock berapada pada row-level, Oracle Database 10g mensupport manual locking konfigurasi pada level yang lebih tinggi. Berikut contoh locking suatu tabel Dengan statement diatas, transaksi yang lain yang mencoba untuk mengupdate data pada tabel yang sudah di lock ( karyawan ) harus menunggu pada
234

MODE;

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

antrian sampai transaksi yang mempunyai lock pada tabel tersebut telah selesai ( commit ). Sesi 1 : locking table karyawan in exclusive mode

Sesi 2 : waiting to update table karyawan.

LockHandling

235

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

Sesi 1 : commit ( transaksi telah berakhir dan locking terhadap tabel karyawan di release )

Sesi 2 : traksaksi update success

236

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

EXCLUSIVE lock adalah lock yang paling tinggi derajatnya. Berikut ini beberapa lock mode yang ada pada Oracle : 1. ROW SHARE Mengijinkan konkuren akses / akses secara bersama-sama pada tabel yang di lock, tetapi user yang lain tidak dapat member lock exclusive pada tabel yang diberi share lock sampai share lock di lepas. user yang tidak melakukan lock pada tabel, masih dapat mengakses data. ROW EXCLUSIVE Sama dengan ROW SHARE, tetapi tidak diperbolehkan user lain untuk memberi SHARE mode sebelum lock sudah di lepas.Terjadi secara otomatis pada saat terjadi updating, inserting, atau deleting suatu data. SHARE Mengijinkan proses query yang konkuren / bersama-sama tetapi tidak diperbolehkan untuk mengubah mode lock tabel. SHARE lock dibutuhkan ( dan secara otomatis diminta ) untuk membuat index pada tabel. SHARE ROW EXCLUSIVE Digunakan untuk melakukan query pada keseluruhan data pada tabel dan memberi akses kepada sesi user lain untuk melakukan query pada tabel tetapi tidak diperbolehkan sesi user yang lain untuk memberi lock pada tabel serta tidak diperbolehkan untuk mengupdate data pada tabel. EXCLUSIVE Mengijinkan sesi user yang lain untuk melakukan query pada tabel yang di lock tetapi tidak diperbolehkan melakukan suatu aktivitas yang lain selain query pada tabel tersebut. Exclusive lock dibutuhkan pada saat proses drop suatu tabel.

2.

3.

4.

5.

Seperti beberapa permintaan untuk lock, eksekusi statement lock secara manual terdapat antrian sampai sesi statement yang lain telah memiliki lock, atau telah melepas lock. perintah LOCK dapat menerima special argument untuk mengontrol proses menunggu yaitu menggunakan NOWAIT.

LockHandling

237

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

SQL > LOCK TABLE nama_tabel IN mode_lock NOWAIT;


NOWAIT mengembalikan control kepada sesi yang meminta lock secara langsung jika tabel yang ingin di lock telah di lock oleh sesi user yang lain. Sesi 1 melakukan lock tabel karyawan pada mode row share

Sesi 2 ingin melakukan lock pada tabel karyawan tetapi di tolak

238

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

13.4 DML Locks


1. Setiap transaksi DML terdapat 2 lock : Row exclusive lock pada sebuah data atau banyak data yang sedang di update. Hal ini akan menjadi row exclusive lock berdasarkan pada jumlah data yang diupdate. Shared table level lock pada tabel yang sedang di update. Hal ini mencegah sesi user lain untuk melakukan lock keseluruhan tabel ( kemungkinannya untuk drop tabel atau truncate data tabel ) sementara perubahan sedang terjadi.

2.

13.5 Enqueue Mechanism ( mekanisme antrian )


Permintaan suatu lock secara otomatis akan di masukkan ke dalam antrian. Setelah suatu transaksi yang memegang lock telah selesai, maka sesi berikutnya yang telah mengantri terlebih dahulu akan mendapatkan lock. suatu sesi yang sedang memegang lock pada suatu data atau tabel dapat merequest untuk mengubah mode lock yang sedang terjadi tanpa harus melepas
LockHandling 239

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

sesi lock dan kembali ke antrian. Sebagai contohnya, misalkan terdapat sebuah sesi yang memegang mode shared lock pada suatu tabel. Sesi tersebut dapat merubah dari shared lock ke exclusive lock, selama tidak ada sesi lain yang sedang memiliki exclusive lock atau share lock pada tabel tersebut. Maka sesi yang memegang shared lock akan di beri grant / hak akses untuk mendapatkan exclusive lock tanpa harus menunggu di antrian terlebih dahulu.

13.6 Lock Conflicts


Konflik pada suatu transaksi database sering terjadi, tetapi pada umumnya dapat di selesaikan berdasarkan periode waktu dan mekanisme antrian. Ada suatu kasus yang sangat jarang terjadi lock konflik dibutuhkan konfigurasi dari administrator untuk menyelesaikan konflik. Berikut contoh konflik yang jarang terjadi :

240

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

Transaction 1 UPDATE hr.employees SET salary=salary+100 WHERE employee_id=100 ; 1 row updated. UPDATE hr.employees SET COMMISION_P CT=2 WHERE employee_id=101 ; Sesi menunggu karena terjadi lock konflik. Sesi masih menunggu di antrian!!

Time 9:00:00

Transaction 2 UPDATE hr.employees SET salary=salary+100 WHERE employee_id=101; 1 row updated. SELECT sum(salary) FROM hr.employees; SUM(SALARY) --------------------895463

9:00:05

16:30:00

1 row updated.

16:30:01

Terjadi transaksi yang banyak dalam waktu 7.5 jam, tetapi belum ada commit atau rollback Commit;

pada kasus diatas, transaksi 2 mendapatkan lock single row pada jam 9:00:00 dan tidak melakukan commit. Di sisi lain transaksi 1 menunggu untuk proses update pada tabel, tetapi transaksi 2 pada saat itu membutuhkan lock pada semua data. Sehingga transaksi 1 di block oleh transaksi 2 sampai transaksi 2 commit pada jam 16:30:01. Untuk hal ini user yang mengeksekusi transaksi 1 menghubungi administrator untuk mengatasi permasalahan ini.

LockHandling

241

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

13.7 Detecting Lock Conflicts


Pada oracle 10g untuk mendeteksi lock konflik kita dapat menggunakan Enterprise Manager. Berikut langkah-langkah mendeteksi lock. Misal sebelumnya sudah ada transaksi berikut : Sesi 1 lock tabel karyawan

Sesi 2 update tabel karyawan

242

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

Sesi 3 insert tabel karyawan

1. 2.

Pada Enterprise Manager buka halaman Performance Klik Blocking pada bagian kiri bawah halaman.

LockHandling

243

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

3.

Halaman Blocking Sessions muncul. Terdapat tiga sesi user yang sedang mengalami konflik.

244

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

13.8 Resolving Lock Conflicts


Untuk menyelesaikan lock konflik, suatu sesi yang memegang lock harus di lepaskan. Ada beberapa cara untuk menyelesaikan masalah lock konflik, cara yang paling baik ialah dengan cara member tahu si user yang sedang memanipulasi data untuk melakukan commit atau rollback terhadap transaksi yang sedang dijalankan. Jika terjadi suatu keadaan yang mendesak, penyelesaian lock konflik memungkinkan administrator untuk men-terminasi sesi user yang sedang memegang lock dengan cara meng-klik tombol Kill Session. Saat suatu sesi di terminate / di stop, semua transaksi yang sedang terjadi pada sesi akan di rollback. User yang sesinya di terminate harus login terlebih dahulu untuk melakukan transaksi yang telah di terminate. Berikut langkah-langkah untuk men-terminate sesi user : 4. 5. pada halaman Blocking Sessions, pilih sesi user yang akan di terminate. Kemudian klik Kill Session. Pesan konfirmasi muncul, pilih kill Immediete. Kemudian klik Yes.

6.

Pada sisi user yang di-terminate akan muncul pesan your session has been killed dan transaksi secara otomatis mengalami rollback.

LockHandling

245

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

13.9 Deadlocks
Deadlock merupakan contoh lock konflik yang sangat special. Deadlock terjadi pada saat terdapat dua atau lebih sesi yang sedang saling menunggu antar satu sama lain untuk mendapatkan hak atas lock. dikarenakan sesi antar satu dengan yang lain saling menunggu dan tidak dapat menyelesaikan transaksi masing-masing maka akan terdeteksi sebagai deadlock. Transaksi 1 UPDATE karyawan SET nama = paijo WHERE employee_id = 400; UPDATE karyawan SET nama = paul WHERE employee_id = 300; Time 9:00 Transaksi 2 UPDATE karyawan SET nama = paimin WHERE employee_id = 300; UPDATE karyawan SET nama = gilbert WHERE employee_id = 400;

9:15

Oracle secara otomatis mendeteksi dan menyelesaikan deadlock dengan cara me-rollback semua transaksi yang sedang mengalami deadlock

246

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

13.10 JURNAL
1. 2. 3. 4. Coba buat suatu kasus yang menunjukkan suatu kondisi deadlock Bagaimana tahap-tahap penyelesaian lock konflik Buatlah suatu kasus yang menunjukkan lock terjadi hanya pada suatu row Buatlah suatu kasus yang menunjukkan lock terjadi hanya pada suatu tabel

LockHandling

247

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

14 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

4. 5. 6.

Mengenal Tuning pada Oracle 10g Memahami Instance Tuning Memahami SQL Tuning

248

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

14.1 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.
249

Tuning

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

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 programprogram yang lebih penting pada siang hari. c. Memparalelkan Beban Kerja (Parallelize the Workload) Query-query yang mengakses sejumlah besar data (typical data warehouse queries) sering dapat diparalelkan. Hal ini sangat berguna untuk mengurangi waktu respon dalam data warehouse yang rendah konkurensinya. Akan tetapi, untuk lingkungan OLTP, yang cenderung tingggi konkurensinya, hal ini dapat merugikan user-user lain dengan meningkatkan penggunaan resource secara keseluruhan pada program.

14.2 EXPLAIN PLAN


Explain plan adalah suatu perintah yang digunakan untuk menampilkan perintah eksekusi suatu query. Query yang dioperasikan yang didukukng oleh explain plan adalah : SELECT INSERT UPDATE DELETE Dengan memanfaatkan explain plan kita bisa melihat langkah eksekusi yang diambil oleh oracle, sehingga kita bisa meningkatkan performansi query kita. Optimizer mengambil informasi tentang obyek dan tipe dari query yang dijalankan, kemudian memberikan keputusan bagaimana suatu query akan dieksekusi.

250

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

14.3 ANALYZE
Selalu jalankan command ANALYZE pada table anda untuk memberikan kepastian kalau optimizer akan memperoleh informasi tentang data tersebut. Anda dapat melakukan ANALYZE sebuah table, index, dan bahkan cluster. Ketika anda melakukan analyze suatu table maka oracle akan mengambil informasi berupa data dari obyek tersebut dan informasi untuk memferifikasi blok. Ini adalah perintah yang sangat berguna bukan Cuma untuk memproteksi data, tetapi juga untuk meningkatkan performansi. SINTAKS ANALYZE
ANALYZE (INDEX | TABLE | CLUSTER) [USER.] (INDEX [PARTITION (PARTITION NAME) ] | TABLE [PARTITION (PARTITION NAME)] | CLUSTER ) ( COMPUTE STATISTIC [ FOR CLAUSE] | ESTIMATE STATISTIC [FOR CLAUSE] [SAMPLE INTEGER (ROWS PERCENT)] | DELETE STATISTIC | VALIDATE REF UPDATE | VALIDATE STRUCTURE [CASCADE] | LIST CHAINED ROWS [INTO [USER.] TABLE] )

CONTOH ANALYZE Berikut contoh aplikasi analyze : Pertama buat table emp
SQL> create table emp( a number, b varchar(10)); Table created.

Kemudian masukkan sebuah data


SQL> insert into emp values(1,'hallo'); 1 row created.

Lakukan ANALYZE, eksekusi analyze dibawah adalah untuk melakukan validasi terhadap structure table emp.
SQL> analyze table emp validate structure cascade

Tuning

251

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

14.4 PLAN TABLE


Sebelum anda bisa menjalankan explain plan anda harus membuat table yang menampung output. Table harus dibuat untuk schema anda sendiri. Table tersebut adalah PLAN_TABLE. Sintaks pembuatan plan_table sudah tersedia di system anda. Buka file UTLXPLAN.SQL di %Oraclehome%/rdbms/admin/utlxplan.sql Berikut sintaksnya :
rem rem $Header: utlxplan.sql 08-may-2004.12:53:19 bdagevil Exp $ xplainpl.sql rem Rem Copyright (c) 1988, 2004, Oracle. All rights reserved. Rem NAME REM UTLXPLAN.SQL Rem FUNCTION Rem NOTES Rem MODIFIED Rem bdagevil 05/08/04 - add other_xml column Rem bdagevil 06/18/03 - rename hint alias to object_alias Rem ddas 06/03/03 - increase size of hint alias column Rem bdagevil 02/13/03 - add plan_id and depth column Rem ddas 01/17/03 - add query_block and hint_alias columns Rem ddas 11/04/02 - revert timestamp column to DATE (PL/SQL problem) Rem ddas 10/28/02 - change type of timestamp column to TIMESTAMP Rem ddas 10/03/02 - add estimated_time column Rem mzait 04/16/02 - add row vector to the plan table Rem mzait 10/26/01 - add keys and filter predicates to the plan table Rem ddas 05/05/00 - increase length of options column Rem ddas 04/17/00 - add CPU, I/O cost, temp_space columns Rem mzait 02/19/98 add distribution method column Rem ddas 05/17/96 - change search_columns to
252

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

number Rem achaudhr 07/23/95 PTI: Add columns partition_{start, stop, id} Rem glumpkin 08/25/94 - new optimizer fields Rem jcohen 11/05/93 - merge changes from branch 1.1.710.1 - 9/24 Rem jcohen 09/24/93 #163783 add optimizer column Rem glumpkin 10/25/92 - Renamed from XPLAINPL.SQL Rem jcohen 05/22/92 - #79645 - set node width to 128 (M_XDBI in gendef) Rem rlim 04/29/91 - change char to varchar2 Rem Peeler 10/19/88 - Creation Rem Rem This is the format for the table that is used by the EXPLAIN PLAN Rem statement. The explain statement requires the presence of this Rem table in order to store the descriptions of the row sources. create table PLAN_TABLE ( statement_id plan_id timestamp remarks operation options object_node object_owner object_name object_alias object_instance object_type optimizer search_columns id parent_id depth position cost cardinality bytes other_tag partition_start
Tuning

varchar2(30), number, date, varchar2(4000), varchar2(30), varchar2(255), varchar2(128), varchar2(30), varchar2(30), varchar2(65), numeric, varchar2(30), varchar2(255), number, numeric, numeric, numeric, numeric, numeric, numeric, numeric, varchar2(255), varchar2(255),
253

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

partition_stop partition_id other distribution cpu_cost io_cost temp_space access_predicates filter_predicates projection time qblock_name other_xml );

varchar2(255), numeric, long, varchar2(30), numeric, numeric, numeric, varchar2(4000), varchar2(4000), varchar2(4000), numeric, varchar2(30), clob

Jalankan UTLXPLAN.SQL anda pada sqlplus

14.5 OPERASI
Sekali plan_table telah terbentuk anda bisa melakukan explain plan terhadap query yang kita lakukan. Lihat langkah berikut : Buat plan.sql
SQL> set serveroutput on; SQL> @plan; SP2-0310: unable to open file "plan.sql" SQL> column query_plan format a80 SQL> select lpad(' ',2*level)|| operation|| ':'|| options|| ':'|| object_name query_plan from plan_table connect by prior id=parent_id start with id=0; QUERY_PLAN ---------------------------------------------SELECT STATEMENT:: TABLE ACCESS:FULL:EMP
254

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

SQL> save plan Created file plan

Jalankan query berikut :


SQL> explain plan for select * from emp; Explained. SQL> @plan; QUERY_PLAN ---------------------------------------------SELECT STATEMENT:: TABLE ACCESS:FULL:EMP TABLE ACCESS:FULL:EMP SELECT STATEMENT:: TABLE ACCESS:FULL:EMP TABLE ACCESS:FULL:EMP 6 rows selected.

Perintah plan.sql menghasilkan proses yang dilakukan oleh oracle untuk operasi query kita. Operasi table acces full emp mendeskripsikan kalo operasi yang dilakukan adalah proses membaca record secara keseluruhan. Untuk opsi lain lihat explain plan berikut :
SQL> select * from emp; A B --------- ---------1 hallo SQL> insert into emp values(2,'nama saya'); 1 row created. SQL> explain plan for 2 select * from emp where a=2; Explained. SQL> @plan; QUERY_PLAN --------------------------------------------------------SELECT STATEMENT:: TABLE ACCESS:FULL:EMP TABLE ACCESS:FULL:EMP TABLE ACCESS:FULL:EMP
Tuning 255

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

SELECT STATEMENT:: TABLE ACCESS:FULL:EMP TABLE ACCESS:FULL:EMP TABLE ACCESS:FULL:EMP SELECT STATEMENT:: TABLE ACCESS:FULL:EMP TABLE ACCESS:FULL:EMP TABLE ACCESS:FULL:EMP 12 rows selected. SQL> Alter table emp add constraint pk_emp primary key(a); Table altered. SQL> commit; Commit complete. SQL> select * from emp where a=2; A B --------- ---------2 nama saya

SQL> explain plan for select * from emp where a=2; Explained. SQL> @plan; QUERY_PLAN ------------------------------------------SELECT STATEMENT:: TABLE ACCESS:FULL:EMP INDEX:UNIQUE SCAN:PK_EMP TABLE ACCESS:FULL:EMP INDEX:UNIQUE SCAN:PK_EMP TABLE ACCESS:FULL:EMP INDEX:UNIQUE SCAN:PK_EMP TABLE ACCESS:BY INDEX ROWID:EMP INDEX:UNIQUE SCAN:PK_EMP SELECT STATEMENT:: TABLE ACCESS:FULL:EMP INDEX:UNIQUE SCAN:PK_EMP TABLE ACCESS:FULL:EMP INDEX:UNIQUE SCAN:PK_EMP TABLE ACCESS:FULL:EMP INDEX:UNIQUE SCAN:PK_EMP TABLE ACCESS:BY INDEX ROWID:EMP
256

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

INDEX:UNIQUE SCAN:PK_EMP SELECT STATEMENT:: TABLE ACCESS:FULL:EMP INDEX:UNIQUE SCAN:PK_EMP QUERY_PLAN ------------------------------------------TABLE ACCESS:FULL:EMP INDEX:UNIQUE SCAN:PK_EMP TABLE ACCESS:FULL:EMP INDEX:UNIQUE SCAN:PK_EMP TABLE ACCESS:BY INDEX ROWID:EMP INDEX:UNIQUE SCAN:PK_EMP SELECT STATEMENT:: TABLE ACCESS:FULL:EMP INDEX:UNIQUE SCAN:PK_EMP TABLE ACCESS:FULL:EMP INDEX:UNIQUE SCAN:PK_EMP TABLE ACCESS:FULL:EMP INDEX:UNIQUE SCAN:PK_EMP TABLE ACCESS:BY INDEX ROWID:EMP INDEX:UNIQUE SCAN:PK_EMP 36 rows selected.

Dari perintah diatas terlihat perbedaan antara penggunaan primary key dengan tidak. Anda jangan terkecoh dengan panjangnya hasil dari explain plan hasil selection setelah pemberian primary key. Tapi pemberian primary key tersebut merupakan sebuah peningkatan performansi pada hasil query kita (terutama jika data besar).

14.6 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
Tuning 257

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

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

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

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

Tuning

259

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

Misalnya: SELECT employee_num, full_name Name, employee_id FROM mtl_employees_current_view WHERE (employee_num = NVL (:b1,employee_num)) (organization_id=:1) ORDER BY employee_num;

AND

Juga: SELECT employee_num, full_name Name, employee_id FROM mtl_employees_current_view WHERE (employee_num = :b1) AND (organization_id=:1) ORDER BY employee_num;

Ketika Anda perlu menggunakan fungsi SQL pada filter atau predikat join, jangan menggunakannya pada kolom di mana Anda ingin memiliki sebuah indeks; lebih baik gunakan pada sisi berlawanan predikat, seperti pada statement berikut: TO_CHAR(numcol) = varcol

daripada: varcol = TO_CHAR(numcol)

260

Politeknik Telkom

Praktikum Sistem Manajemen Basis Data

14.7 JURNAL
Terdapat empat query yang menghasilkan row yang sama sebagai berikut:
select a.*,b.nama,c.kategori from buku a where exists (select 1 from supplier b where a.id_supplier=b.id_supplier) and exists (select 1 from jenis c where a.id_jenis=c.id_jenis) select a.*,b.nama,c.kategori from buku a where a.id_supplier in (select b.id_supplier from supplier b) and a.id_jenis in (select c.id_jenis from jenis c) select a.*,(select b.nama from supplier a.id_supplier=b.supplier), (select c.kategori from jenis c a.id_jenis=c.id_jenis) from buku a; b where where

select a.*,b.nama,c.kategori from buku a, supplier b, jenis c where a.id_supplier = b.id_supplier and a.id_jenis = c.id_jenis;

Dengan menggunakan explain plan dan melihat isi dari plan_table dengan query sebagai berikut:
select plan_id, operation, object_name, object_type, position, cost, cpu_cost from plan_table order by plan_id desc;

Lakukanlah analisis query manakah yang memiliki cost paling rendah dan paling tinggi (uraikan alasannya)!

Tuning

261

Anda mungkin juga menyukai