Flash_D Acewell

"Jangan pernah berhenti bermimpi dan berusahalah agar mimpi itu tercapai"

Ada beberapa mahasiswa saya yang bertanya, “Pak… bisa tidak di MySQL diterapkan konsep Foreign Key dan Referential Integrity seperti halnya di MS. Access?”. Memang dalam MS. Access kita bisa melakukan setting relasi antar tabel, yang menggambarkan hubungan PRIMARY KEY dan FOREIGN KEY antar tabel.
Sebagai contoh, misalkan dalam kasus pengambilan matakuliah mahasiswa. Dalam kasus ini misalkan terdapat tabel induk bernama ‘MHS’ yang di dalamnya terdapat field NIM, NAMAMHS. Tabel induk yang lain adalah ‘MK’ untuk menyimpan data matakuliah dengan field-fieldnya KODEMK, NAMAMK. Dalam hal ini field NIM dan KODEMK masing-masing adalah primary key pada tabel ‘MHS’ dan ‘MK’. Selanjutnya ada tabel lain bernama ‘AMBILMK’ dengan field NIM, KODEMK, NILAI yang digunakan untuk menyimpan data pengambilan matakuliah mahasiswa. Nah… dalam hal ini, field NIM dan KODEMK keduanya adalah bertindak sebagai FOREIGN KEY.
Selanjutnya dalam MS. Access terdapat pula fasilitas untuk mengimplementasikan referensial integrity. Misalkan, kita ubah data salah satu kode NIM mahasiswa dalam tabel induk ‘MHS’. Nah… secara otomatis proses update ini juga terjadi di tabel ‘AMBILMK’ yaitu pada data yang terkait NIM tersebut. Begitu pula pada proses penghapusan. Sebagai contoh misalkan kita hapus salah satu kode matakuliah di tabel MK, maka secara otomatis data yang terkait dengan kode matakuliah tersebut pada tabel ‘AMBILMK’ akan terhapus.
Nah.. bagaimana dengan MySQL? Kira-kira bisa tidak diterapkan kedua hal di atas seperti halnya MS. Access? Saya jawab TENTU SAJA BISA.
Yang menjadi pertanyaan adalah, “Bagaimana cara melakukannya?”.
Ya… untuk menerapkan konsep FOREIGN KEY dan REFERENTIAL INTEGRITY ini, kita harus mensetting MySQL nya bisa support untuk tabel bertipe INNODB. Biasanya ketika proses instalasi MySQL akan ditanyakan apakah databasenya support dengan INNODB? Untuk hal ini, Anda harus jawab YA. Namun.. bila proses instalasi Anda terlanjur tidak memilih support INNODB, maka cara mengaktifkan INNODB adalah buka file “my.ini” lalu cari baris perintah “skip-innodb”. Hapuslah perintah ini, lalu hentikan MySQL dan hidupkan kembali MySQL (restart MySQL).
OK… sekarang kita coba untuk studi kasus. Kita akan membuat database untuk keperluan pengambilan matakuliah mahasiswa seperti pada kasus di atas. Berikut ini, adalah perintah SQL untuk membuat tabel-tabelnya.
Perintah SQL untuk membuat tabel ‘MHS’
1.CREATE TABLE mhs
2.(
3.  nim  varchar(8),
4.  namaMhs varchar(20),
5.  PRIMARY KEY (nim)
6.) TYPE = INNODB;
Perintah SQL untuk membuat tabel ‘MK’
1.CREATE TABLE mk
2.(
3.  kodeMK  varchar(3),
4.  namaMK varchar(20),
5.  PRIMARY KEY (kodeMK)
6.) TYPE = INNODB;
Perhatikan kedua perintah SQL di atas. Karena kita akan membuat tabel bertipe INNODB, maka masing-masing perintah SQL diberikan perintah TYPE = INNODB;
Sekarang, kita lanjutkan untuk membuat tabel untuk ‘ambilMK’.
01.CREATE TABLE ambilMK
02.(
03.  nim  varchar(8),
04.  kodeMK varchar(3),
05.  nilai float(3,2),
06.  PRIMARY KEY (nim, kodeMK),
07.  FOREIGN KEY (nim) REFERENCES mhs (nim) ON DELETE CASCADE ON UPDATE CASCADE,
08.  FOREIGN KEY (kodeMK) REFERENCES mk (kodeMK) ON DELETE CASCADE ON UPDATE CASCADE
09.) TYPE = INNODB;
Tabel di atas terdapat dua primary key yaitu NIM dan KODEMK. Sedangkan field NIM ini juga merupakan foreign key yang direferensikan dari field NIM yang ada dalam tabel MHS. Oleh karena itu tambahkan perintah “FOREIGN KEY (nim) REFERENCES mhs (nim)”. Selanjutnya apa maksud dari “ON DELETE CASCADE”? Perintah ini maksudnya bila ada data NIM yang dihapus pada tabel MHS, maka secara otomatis data NIM yang ada dalam tabel AMBILMK ini juga akan terhapus. Sedangkan “ON UPDATE CASCADE” digunakan untuk proses update otomatis pada NIM dalam tabel AMBILMK, apabila NIM yang ada di tabel MHS ini diupdate.
Hal yang sama juga kita terapkan untuk tabel AMBILMK. Dalam hal ini, KODEMK adalah sebagai foreign key yang direfensikan dari KODEMK yang ada dalam tabel MK.
Sekarang coba Anda masukkan data-data berikut ini pada tabel MHS
1.NIM       NAMAMHS
2.M0197001  Rosihan Ari Yuana
3.M0197002  Dwi Amalia Fitriani
4.M0197003  Faza Fauzan
5.M0197004  Nada Hasanah
6.M0197005  Muh. Ahsani Taqwim
Masukkan pula data pada tabel MK
1.KODEMK    NAMAMK
2.M01       Database
3.M02       OOP
Nah… untuk mengecek referensial integrity, sekarang kita coba masukkan data pada tabel AMBILMK.
1.INSERT INTO ambilmk VALUES ('M0197001', 'M01', 3.0);
Ketika perintah SQL di atas dijalankan, data dapat dimasukkan ke tabel AMBILMK dengan sukses. Kita lihat bahwa NIM M0197001 terdapat dalam tabel MHS, begitu pula pada kode matakuliah M01 yang ada pada tabel MK.
Sehingga isi tabel AMBILMK menjadi
1.NIM       KODEMK    NILAI
2.M0197001  M01       3.0
Sekarang kita coba masukkan data berikut ini
1.INSERT INTO ambilmk VALUES ('M0197006', 'M01', 3.0);
Nah… perintah di atas akan menghasilkan error. Hal ini disebabkan NIM M0197006 tidak ada dalam tabel MHS.
Sekarang kita coba melakukan proses update. Kita akan mengupdate NIM M0197001 menjadi M0197010 yang ada dalam tabel MHS.
1.UPDATE mhs SET nim = 'M0197010' WHERE nim = 'M0197001';
Hasil query di atas pada tabel MHS menjadi
1.NIM       NAMAMHS
2.M0197010  Rosihan Ari Yuana
3.M0197002  Dwi Amalia Fitriani
4.M0197003  Faza Fauzan
5.M0197004  Nada Hasanah
6.M0197005  Muh. Ahsani Taqwim
Sekarang Anda coba lihat isi tabel AMBILMK. Pastilah isinya menjadi berikut ini
1.NIM       KODEMK    NILAI
2.M0197010  M01       3.0
Selanjutnya kita coba update untuk KODEMK yang ada dalam tabel MK. Misalnya akan diubah kode mk M01 menjadi M09.
1.UPDATE mk SET kodeMK = 'M09' WHERE kodeMK = 'M01';
Hasil query di atas pada tabel MK adalah
1.KODEMK    NAMAMK
2.M09       Database
3.M02       OOP
Nah… bila kita lihat data di tabel AMBILMK, pastilah isinya menjadi
1.NIM       KODEMK    NILAI
2.M0197010  M09       3.0
Bagaimana dengan proses penghapusan? Kita cek aja… sekarang kita coba hapus data mahasiswa berNIM M0197010 dalam tabel MHS.
1.DELETE FROM mhs WHERE nim = 'M0197010';
Hasil dari query SQL di atas pada tabel MHS adalah
1.NIM       NAMAMHS
2.M0197002  Dwi Amalia Fitriani
3.M0197003  Faza Fauzan
4.M0197004  Nada Hasanah
5.M0197005  Muh. Ahsani Taqwim
Sekarang bila kita lihat isi tabel AMBILMK, pastilah menjadi kosong karena data pengambilan matakuliah terkait dengan mahasiswa NIM M0197010 ini ikut terhapus.
OK… begitulah penjelasan ini saya tulis. Moga-moga bermanfaat bagi mahasiswaku semua… terus semangat belajar dan pantang menyerah. Indonesia sangat membutuhkanmu :-)
read more "Foreign Key, Relationship dan Referential Integrity di MySQL"

Pada bagian ini, kita membahas bagaimana cara mengakses tabel yang ada di database MS Access dari database Oracle. Untuk mendemokan hal ini, penulis menggunakan MS Access Office 2003 dan Oracle 10g R2 Database. Mari langsung saja kira mempraktekkannya.
Persiapan MS Access
1. Buat database dbtest di MS ACCESS dengan nama dbtest dan simpan file mdb-nya di C:\dbtest.mdb
2. Buat tabel PESERTA dan isi data berikut:
Tabel PESERTA beserta isinya
Buat koneksi ODBC
1. Control Panel –> Administrative Tools –> Data Source (ODBC)
2. Pada tab System DSN, klik Add dan pilih “Drive do Microsoft Access (*.mdb) “, klik Finish
  • Data Source Name : ODBCACC
  • Description : Untuk koneksi dengan Oracle
  • Klik  button Select dan pilih file *.mdb untuk database “c:\dbtest.mdb” yang sudah dibuat sebelumnya
Konfigurasi ODBC
Klik OK
Menyiapkan Oracle Server
Pastikan yang anda Install adalah Oracle Server, bukan Oracle Client. Karena Oracle client tidak ada Heterogeneous Services  (folder $ORACLE_HOME\hs).
Edit file LISTENER.ORA, tambahkan SID_NAME “hsodbc” sebagai berikut :
SID_LIST_LISTENER =
   (SID_LIST =
     (SID_DESC =
       (SID_NAME = PLSExtProc)
       (ORACLE_HOME = C:\oracle\product\10.2.0\db_1)
       (PROGRAM = extproc)
     )
       (SID_DESC =
       (SID_NAME = hsodbc)
       (ORACLE_HOME = C:\oracle\product\10.2.0\db_1)
       (PROGRAM = hsodbc)
     )
)
LISTENER =
   (DESCRIPTION_LIST =
      (DESCRIPTION =
       (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
       (ADDRESS = (PROTOCOL = TCP)(HOST = aspire5050)(PORT = 1521))
      )
   )
STOP dan START listener. Gunakan Services dari Windows atau tools LSNRCTL
C:\LSNRCTL [enter]
LSNRCTL> STOP
LSNRCTL> START
Konfigurasi Heterogeneous Services  (HS)
Edit file file ORACLE_HOME\hs\admin\inithsodbc.ora dan tambahkan nama ODBC System DNS yang dibuat sebelumnya dalam hal ini adalah ODBCACC
HS_FDS_CONNECT_INFO = odbcacc
HS_FDS_TRACE_LEVEL = off
Konfigur koneksi dari Oracle
Untuk koneksi ke MS Access kita juga perlu mengubah file TNSNAMES.ORA untuk mendefinisikan host string.
Tambahkan koneksi “msaccess.world” seperti berikut pada file tnsnames.ora:
msaccess.world =
(DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = aspire5050) (PORT = 1521))
    (CONNECT_DATA =(SID = hsodbc))
    (HS=OK)
)
Gunakan TNSPING untuk menguji koneksi yang baru dibuat. Pastikan koneksi berhasil
C:\tnsping access_db.world
Buat database link di database Oracle
SQL> connect system/oracle
Connected.

SQL> CREATE DATABASE LINK db_access USING 'msaccess.world';
Database link created.
Akses tabel di MS Access dari Oracle
Query ke tabel PESERTA yang ada di MS Access dengan cara berikut :
SQL> SELECT * from peserta@db_access;

ID         NAMA                                                    NILAI
---------- -------------------------------------------------- ----------
1000       MEUTIA                                                    800
1001       AMAURA                                                    750
1002       TONY                                                      850
Selesai, materi cara koneksi dari Oracle ke MS Access.
read more "Koneksi dari Oracle ke MS Acces dengan Heterogeneous Services"

Sebagai DBA, tugas kita adalah mengamankan atau menjaga data dari kerusakan sehingga database bisa memberikan data yang valid. Dalam operasional bisa saja user melakukan kesalahan dalam melakukan update data sehingga data yang disajikan menjadi salah. Jika perubahan belum dibuat permanen (commit) perubahan tersebut masih bisa dibatalkan (rollback). Tentunya akan menjadi masalah besar jika perubahan baru disadari setelah beberapa jam, hari atau bulan. User yang mengupdate juga sudah lupa kapan melakukan kesalahan update. Tentunya ini akan menambah pusing DBA karena untuk mencari kapan persisnya kesalahan update itu terjadi.
Untuk Oracle 10g, DBA gak perlu pusing lagi, karena Oracle 10g menyediakan fitur Flashback Query, Flashback Version Query dan Flashback Transaction Query untuk melakukan pelacakan perubahan data yang terjadi.
  • Flashback Query
Fitur ini digunakan untuk mengetahui data (nilai suatu kolom) pada suatu waktu tertentu.
  • Flashbak Version Query
Fitur ini untuk mengetahui perubahan data yang terjadi antara waktu t1 sampai waktu t2
  • Flashback Transaction Query
untuk mengetahui semua perubahan yang disebabkan oleh satu transaction ID
Berikut ini adalah demo bagaimana cara melacak perubahan data dengan Flashback Query dan Flashback Transaction Query.
Login ke database sebagai user SCOTT
CONNECT SCOTT/TIGER;
create table peserta
(ID    NUMBER(4),
 NAMA  CHAR(15),
 NILAI NUMBER(4)) TABLESPACE USERS;
INSERT INTO PESERTA VALUES(1,'BUDI',60);
INSERT INTO PESERTA VALUES(2,'DINA',75);
COMMIT;
– Tunggu sekitar 1 menit
UPDATE PESERTA SET NILAI=65 WHERE ID=1;
INSERT INTO PESERTA VALUES(3,'MAWAR',68);
COMMIT;
– Tunggu sekitar 1 menit
UPDATE PESERTA SET NILAI=70 WHERE ID=1;
INSERT INTO PESERTA VALUES(4,'MAWARDI',80);
COMMIT;
– Lihat data di tabel PESERTA
SQL> SELECT * FROM PESERTA;

        ID NAMA                 NILAI
---------- --------------- ----------
         1 BUDI                    70
         2 DINA                    75
         3 MAWAR                   68
         4 MAWARDI                 80
– Tunggu sekitar 1 menit
– User melakukan kesalahan UPDATE.
UPDATE PESERTA SET NILAI=90;
COMMIT;
– sehingga data pada tabel PESERTA menjadi :
SQL> SELECT * FROM PESERTA;
ID NAMA                 NILAI
---------- --------------- ----------
         1 BUDI                    90
         2 DINA                    90
         3 MAWAR                   90
         4 MAWARDI                 90
– FLASHBACK VERSION QUERY berdasarkan WAKTU
COL AWAL FORMAT A20
COL AWAL FORMAT A20
COL NAMA FORMAT A5
SET LINESIZE 120
SELECT ID,NAMA,NILAI,
       VERSIONS_STARTSCN SCA_AWAL,
       VERSIONS_ENDSCN SCN_AKHIR,
       TO_CHAR(VERSIONS_STARTTIME,'DD-MM-YY:HH24:MI:SS') AWAL,
       TO_CHAR(VERSIONS_ENDTIME,'DD-MM-YY:HH24:MI:SS') AKHIR
FROM PESERTA
VERSIONS BETWEEN SCN MINVALUE AND MAXVALUE
WHERE ID=1;
ID NAMA      NILAI AWAL                 AKHIR
----- ----- --------- ----------------- -----------------
    1 BUDI         90 06-03-09:09:25:19
    1 BUDI         70 06-03-09:09:23:37 06-03-09:09:25:19
    1 BUDI         65 06-03-09:09:20:55 06-03-09:09:23:37
    1 BUDI         60                   06-03-09:09:20:55
– FLASHBACK VERSION QUERY berdasarkan SCN
SELECT ID,NAMA,NILAI,
       VERSIONS_STARTSCN SCA_AWAL,
       VERSIONS_ENDSCN SCN_AKHIR
FROM PESERTA
VERSIONS BETWEEN SCN MINVALUE AND MAXVALUE
WHERE ID=1;
ID NAMA      NILAI   SCA_AWAL  SCN_AKHIR
----- ----- --------- ---------- ----------
    1 BUDI         90    1380320
    1 BUDI         70    1380102    1380320
    1 BUDI         65    1379304    1380102
    1 BUDI         60               1379304
– FLASHBACK QUERY
SELECT * FROM PESERTA
AS OF TIMESTAMP
TO_TIMESTAMP('06-MAR-2009:09:24:00','DD-MON-YYYY:HH24:MI:SS');
ID NAMA                 NILAI
------ --------------- ----------
     1 BUDI                    70
     2 DINA                    75
     3 MAWAR                   68
     4 MAWARDI                 80
SELECT * FROM PESERTA
AS OF SCN 1380102;
ID NAMA                 NILAI
------ --------------- ----------
     1 BUDI                    70
     2 DINA                    75
     3 MAWAR                   68
     4 MAWARDI                 80
SQL> SELECT * FROM PESERTA
  2  AS OF TIMESTAMP TO_TIMESTAMP('04-DEC-2008','DD-MON-YYYY');
ID NAMA            NILAI
---------- ---------- ----------
         1 BUDI               80
– FLASHBACK TABLE
SQL> ALTER TABLE PESERTA ENABLE ROW MOVEMENT;
Table altered.
– KEMBALIKAN TABEL KE KONDISI JAM ‘06-MAR-2009:09:24:00′
– ATAU SCN 1380102
FLASHBACK TABLE PESERTA TO TIMESTAMP
TO_TIMESTAMP('06-MAR-2009:09:24:00','DD-MON-YYYY:HH24:MI:SS');
Flashback complete.
– ATAU BERDASARKAN SCN
– FLASHBACK TABLE PESERTA TO SCN 1380102
SELECT * FROM PESERTA;
ID NAMA                 NILAI
------ --------------- ----------
     1 BUDI                    70
     2 DINA                    75
     3 MAWAR                   68
     4 MAWARDI                 80
Jika Anda ingin mengembalikan semua kondisi database ke waktu sebelumnya gunakan Flashback Database.
Selamat Mencoba
read more "Melacak Perubahan Data"

Flashback database merupakan fitur baru dalam Oracle 10g, dengan flashback database kita bisa mengembalikan database ke kondisi tertentu berdasarkan waktu atau SCN. Flashback database digunakan untuk melakukan recovery database karena user melakukan truncate large table, drop user atau terjadi kesalahan transaksi yang sangat kompleks sehingga terlalu sulit untuk telusuri.
Walaupun flashback database lebih mudah dan lebih simple dibandingkan dengan INCOMPLETE RECOVERY namun ada keterbatasan terhadap flashback database. Flashback database tidak bisa dilakukan dalam kondisi seperti:
  • Kerusakan media disk, kita tetap harus melakukan restore file database dari media backup dan melakukan recovery baik complete ataupun incomplete
  • Datafile sudah berubah ukuran menjadi lebih kecil atau biasa disebut shrinking datafiles (defrag datafile)
  • Control baru direstore atau recreate
  • Drop tablespace dan recovery dengan OPEN RESETLOGS
  • Tidak bisa melakukan flashback database ke SCN yang lebih kecil dari SCN yang ada di flashback log
KONFIGURASI FLASHBACK
Secara default database yang kita buat belum bisa untuk melakukan flashback database. Kita harus melakukan beberapa konfigurasi dulu
1. SETTING ARCHIVELOG MODE DATABASE
Flashback database mensyaratkan database harus ARCHIVELOG. Untuk mengetahui apakah database sudah archivelog atau belum, cek dengan perintah berikut:
SQL> ARCHIVE LOG LIST;
Database log mode              Archive Mode
Automatic archival             Enabled
Archive destination            USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence     1
Next log sequence to archive   3
Current log sequence           3
Info diatas menunjukkan database sudah ARCHIVELOG. Jika belum lakukan konfigurasi dengan cara seperti berikut :
SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP MOUNT ;
SQL> ALTER DATABASE ARCHIVELOG ;
SQL> ALTER DATABASE OPEN ;
2. SETTING UKURAN FLASH RECOVERY AREA
SQL> SHOW PARAMETER db_recovery_file_dest_size;
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------
db_recovery_file_dest_size           big integer 2G
Ukuran flash recovery area adalah 2 GB, jika ukuran dirasa kurang, flash recovery area bisa dibesarkan dengan perintah :
SQL> ALTER SYSTEM SET db_recovery_file_dest_size=3G;
System altered.
3. SETTING RETENTION FLASHBACK
Misalkan maksimum bisa flashbak sampai 2 hari ke belakang.
SQL> ALTER SYSTEM SET
2  DB_FLASHBACK_RETENTION_TARGET=2880
3  SCOPE=BOTH; System altered.

4. AKTIFKAN FITUR FLASHBACK DATABASE

SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount;
ORACLE instance started.
Total System Global Area  272629760 bytes
Fixed Size                  1248504 bytes
Variable Size              88081160 bytes
Database Buffers          180355072 bytes
Redo Buffers                2945024 bytes
Database mounted.     

SQL> alter database flashback on;
Database altered.
SQL> alter database open;
Database altered.
MONITORING FLASHBACK
Flashback database bisa dimonitor melalui dynamic view V$DATABASE, V$FLASHBACK_DATABASE_LOG dan V$FLASHBACK_DATABASE STATS.
View V$DATABASE menampilkan informasi apakah Flashback Database enable atau disable, jika enable bernilai YES dan disable bernilai NO.
SQL> select flashback_on from v$database;
FLASHBACK_ON
------------------
YES
View V$FLASHBACK_DATABASE_LOG view baru di Oracle 10g dan dibuat untuk mendukung fasilitas Flashback Database. Informasi dari view ini adalah total space yang diperlukan di recovery area untuk mendukung aktifitas flashback database. View ini juga menampilkan ukuran flashback data yaitu pada kolom FLASHBACK_SIZE. Kolom ESTIMATED_FLASHBACK_SIZE digunakan untuk menentukan perkiraan ukuran flashback data yang diperlukan untuk setting retention target yang sudah kita lakukan.
SQL> select
2  oldest_flashback_scn AS OLD_SCN,
3  TO_CHAR(oldest_flashback_time,'DD-MM-YYYY:HH24:MI:SS') AS OLD_TIME,
4  retention_target as RET_TARGET,
5  estimated_flashback_size,
6  FLASHBACK_SIZE
7  from v$flashback_database_log;
OLD_SCN         OLD_TIME RET_TARGET EST_FB_SIZE FLASHBACK_SIZE
------- ---------------- ---------- ----------- --------------
741507 02-10-2007:13:16       2880           0        8192000
Database Anda sudah siap untuk fitur FLASHBACK DATABASE.
Untuk demo melakukan flasback datbabase silahkan download disini.
read more "Flashback Database"

Database Oracle dibagi dalam dua bagian besar yaitu Instance dan Database. Instance merupakan struktur memori dan background process yang mengurusi kegiatan database, sedangkan database adalah kumpulan dari beberapa jenis file untuk menyimpan data baik data aplikasi maupun metadata. Data yang ada di database tidak akan bisa diakses jika instance suatu database tidak aktif (open). Artinya file-file database tidak akan berguna jika instancenya tidak aktif.
Di kalangan Oracle DBA tentunya sudah tidak asing lagi dengan kata ”startup” dan ” shutdown”   database.
Pada dasarnya proses startup dan shutdown jarang dilakukan karena sudah seharusnya server database support untuk operasional selama 24 jam nonstop. Walaupun begitu startup dan shutdown database diperlukan untuk maintenance database seperti closed recovery dan konfigurasi fitur database lainnya.
STARTUP
Proses startup database dibagi dalam tiga tahapan, yaitu :
  • NOMOUNT, pada tahap ini yang dibaca adalah parameter file dan System Global Area(SGA) dialokasikan di memori.
Perintah : STARTUP NOMOUNT
  • MOUNT, control file yang terdaftar di parameter file dibaca dan diperiksa sinkron atau tidak.
Perintah : STARTUP MOUNT
  • OPEN, pada tahap ini semua datafile yang statusnya ONLINE diperiksa keberadaannya dan  konsistensinya.
Perintah : STARTUP OPEN atau STARTUP
Untuk startup dan shutdown database adalah user dengan privilege SYSDBA atau SYSOPER.  Secara default user yang mempunyai privilege tersebut adalah user SYS.
Melakukan STARTUP database, asumsi database sedang tidak aktif (shutdown).
1. Tentukan database yang akan di startup, misal nama database dbtest
C:\>set ORACLE_SID=dbtest
2. Jalankan SQL*Plus dan login sebagai user SYS
C:\>sqlplus sys as sysdba
SQL*Plus: Release 10.2.0.1.0 - Production on Tue Feb 17 14:34:10 2009 Copyright (c) 1982, 2005, Oracle. All rights reserved.
Enter password: ********
Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production With the Partitioning, OLAP and Data Mining options
SQL>
3. Startup database sesuai dengan tahap yang diinginkan.
SQL> startup
Untuk pindah ke satu tahapan diatasnya gunakan perintah ALTER DATABASE.  misalkan saat ini status instance database NOMOUNT, maka untuk pindah ke tahap MOUNT gunakan perintah :
SQL> alter database mount;
Perintah ALTER DATABASE  hanya bisa untuk pindah ke tahap yang lebih tinggi misal dari NOMOUNT ke MOUNT dan dari MOUNT ke OPEN, tidak bisa sebaliknya.
SHUTDOWN
Shutdown database ada empat jenis dengan karakteristik yang berbeda pada setiap jenisnya, yaitu normal, transactional, immediate dan abort.
Shutdown Normal
  • semua koneksi baru digagalkan
  • user yg sedang konek akan ditunggu sampai disconnect
  • user yg sedang melakukan transaksi akan ditunggu sampai selesai
  • melakukan checkpoint
SQL> shutdown normal;
– atau
SQL> shutdown
Shutdown Transaksional
  • semua koneksi baru digagalkan
  • user yg sedang konek tidak melakukan kegiatan apapun akan disconnect
  • user yg sedang melakukan transaksi akan ditunggu sampai selesai
  • melakukan checkpoint
SQL> shutdown transactional;
Shutdown Immediate
  • semua koneksi baru digagalkan
  • user yg sedang konek tidak melakukan kegiatan apapun akan disconnect
  • user yg sedang melakukan transaksi dibatalkan
  • melakukan checkpoint
SQL> shutdown immediate;
Shutdown Abort
  • tidak melakukan pengecekan apapun
  • langsung shutdown
  • pengecekan dilakukan pada saat startup berikutnya.
SQL> shutdown abort;
RESTART DATABASE
Restart database diperlukan jika Anda melakukan perubahan parameter database statik seperti merubah ukuran maxsimum SGA (SGA_MAX_SIZE).
Untuk restart database gunakan perintah :
SQL> startup FORCE;
Selamat mencoba
read more "Startup dan Shutdown Database"

Create database bisa dilakukan bersamaan dengan proses instalasi software Oracle, tetapi bisa juga database dibuat setelah proses instalasi.
Ketika kita berbicara tentang database Oracle, bayangkan database Oracle seperti sebuah bangunan yang terdiri dari beberapa struktur penyangga. Database Oracle merupakan struktur yang sangat kompleks. Secara garis besar arsitektur database Oracle dibagi dalam tiga bagian, yaitu :
  • struktur memory
  • struktur process
  • struktur penyimpanan (storage)
Setiap ketiga struktur diatas masih dibagi lagi menjadi beberapa komponen dimana setiap komponen mempunyai fungsi dan peran tersendiri tetapi saling berkaitan satu komponen dengan komponen lainnya. Jika salah satu komponen utama ada yang tidak berfungsi dengan baik atau rusak maka database tidak akan bisa digunakan.
Disini sebenarnya saya hanya ingin mengatakan, membuat database di Oracle bukan hanya sekedar membuat file tempat menyimpan data. Membuat database Oracle berarti membangun suatu infrastruktur tempat penyimpanan data.
Bagaimana membangun database ?, Oracle sudah menyediakan tools untuk membuat database yaitu Oracle Database Configuration Assistant (ODBCA). Tetapi jika Anda ingin sedikit bersusah payah, silahkan membuat database secara manual dengan menggunakan perintah CREATE DATABASE.
Untuk membuat database dengan ODBCA, silahkan lihat disini
Terima kasih
read more "Membuat Database"


Sebagai database administrator, anda harus bisa melakukan instalasi software Oracle database dan beberapa tools yang diperlukan untuk mengakses ke database. Agar mampu menjalankan tugas ini anda dituntut untuk memahami dan menguasai perintah-perintah sistem operasi dimana software Oracle akan diinstall.
Untuk yang ingin belajar instalasi Oracle for Windows klik disini
Yang mau belajar instalasi di sistem operasi Unix (RHEL4 dan SLES9) klik disini
Selamat Mencoba
read more "Instalasi Oracle"

Pada artikel ini akan diberikan beberapa contoh perintah SQL yang diimplementasikan pada multi tabel. Adapun perintah SQL untuk manipulasi data pada satu tabel, saya yakin hal ini cukup mudah bagi Anda. Dalam contoh ini akan diambil studi kasus tentang pengambilan matakuliah mahasiswa.
Tabel-tabel yang dibuat pada studi kasus ini cukup sederhana saja untuk memudahkan pemahaman. Adapun tabel-tabel tersebut adalah:
1.mhs (
2.nim varchar(3),
3.namaMhs varchar(30),
4.primary key(nim)
5.)
1.mk (
2.kodeMK varchar(3),
3.namaMK varchar(30),
4.sks integer,
5.primary key(kodeMK)
6.)
1.ambilMK (
2.nim varchar(3),
3.kodeMK varchar(3),
4.nilai integer,
5.primary key(nim, kodeMK)
6.)
Dalam hal ini, field nim dan kodeMK pada tabel ambilMK merupakan foreign key. Apabila diperhatikan, tabel mhs dengan tabel ambilMK saling berelasi karena nim dalam tabel ambilMK berasal dari nim dalam tabel mhs (master tabel).
Demikian pula antara tabel mk dengan ambilMK. Kedua tabel ini juga berelasi karena kodeMK dalam tabel ambilMK berasal dari kodeMK dalam tabel mk.
Untuk record masing-masing tabel, misalkan diberikan berikut ini:
Tabel : mhs
1.nim    namaMhs
2.001    Joko
3.002    Amir
4.003    Budi
Tabel : mk
1.kodeMK    namaMK        sks
2.A01       Kalkulus      3
3.A02       Geometri      2
4.A03       Aljabar       3
Tabel : ambilMK
1.nim    kodeMK    nilai
2.001    A01         3
3.001    A02         4
4.001    A03         2
5.002    A02         3
6.002    A03         2
7.003    A01         4
8.003    A03         3
Selanjutnya misalkan akan dicari data-data sbb:
  1. Tampilkan nim dan nama mahasiswa yang mengambil Kalkulus (kodeMK = A01)
  2. Tampilkan nim, nama mahasiswa dan jumlah SKS matakuliah yang diambil untuk setiap mahasiswa
  3. Berapakah IPK mahasiswa bernama Budi (NIM: 003)
  4. Tampilkan nim, nama mahasiswa, dan IPK setiap mahasiswa
Untuk menjawab no. 1, kita harus cari dulu tabel mana yang terkait dengan query tersebut. Apabila kita akan mencari query tersebut berdasarkan nama matakuliah ‘Kalkulus’ maka tabel yang terkait adalah mhs (untuk menampilkan nim dan nama mahasiswa), mk (karena dalam tabel ini terdapat nama matakuliah), serta tabel ambilMK (karena tabel ini berisi data pengambilan matakuliah oleh mahasiswa).
Setelah menentukan tabel mana yang terkait dengan query, selanjutnya dapat dibuat statement SQL nya, yaitu
1.SELECT mhs.nim, mhs.namaMhs
2.FROM mhs, mk, ambilMK
3.WHERE mhs.nim = ambilMK.nim AND mk.kodeMK = ambilMK.kodeMK
4.AND mk.namaMK = 'Kalkulus';
Maksud mhs.nim, maksudnya adalah menampilkan data nim yang berasal dari tabel mhs. Dapat pula Anda menuliskan SQL nya seperti ini
1.SELECT ambilMK.nim, mhs.namaMhs
2.FROM mhs, mk, ambilMK
3.WHERE mhs.nim = ambilMK.nim AND mk.kodeMK = ambilMK.kodeMK
4.AND mk.namaMK = 'Kalkulus';
Hal ini dikarenakan untuk menampilkan nim dapat pula berasal dari tabel ambilMK.
Perhatikan bagian FROM dari kedua statement SQL di atas. Nama-nama tabel yang terkait dengan query dituliskan pada bagian FROM ini.
Selanjutnya apa maksud dari perintah mhs.nim = ambilMK.nim? Perintah ini digunakan untuk merelasikan tabel mhs dan ambilMK, dimana kedua tabel direlasikan melalui field nim di kedua tabel. Hal yang sama juga berlaku untuk perintah mk.kodeMK = ambilMK.kodeMK.
Sedangkan perintah mk.namaMK = ‘Kalkulus’ digunakan sebagai syarat pencarian data (menampilkan data mahasiswa yang mengambil matakuliah Kalkulus).
Apabila pencarian data mahasiswa yang mengambil Kalkulus ini berdasarkan kode matakuliah (A01), maka Anda tidak perlu menggunakan tabel mk, tapi cukup tabel mhs dan ambilMK saja. Hal ini dikarenakan kodeMK dapat diketahui dari tabel ambilMK. Sehingga perintah SQL nya
1.SELECT mhs.nim, mhs.namaMhs
2.FROM mhs, ambilMK
3.WHERE mhs.nim = ambilMK.nim AND ambilMK.kodeMK = 'A01';
Ketiga statement SQL di atas akan menghasilkan hasil yang sama yaitu
1.NIM    namaMhs
2.001    Joko
3.003    Budi
Selanjutnya akan dijawab pertanyaan no. 2. Seperti halnya langkah penyelesaian pertanyaan no. 1, langkah pertama harus kita tentukan dulu tabel apa saja yang terkait dengan query. Dalam hal ini kita akan menggunakan tabel mhs, mk dan ambilMK. Tabel mhs untuk menampilkan nim dan nama mahasiswa. Tabel mk digunakan karena di dalamnya terdapat data SKS. Sedangkan tabel ambilMK digunakan karena berisi data yang menunjukkan pengambilan matakuliah mahasiswa.
Perintah SQL untuk pertanyaan no. 2 adalah
1.SELECT mhs.nim, mhs.namaMhs, sum(mk.sks) as jumlahSKS
2.FROM mhs, mk, ambilMK
3.WHERE mhs.nim = ambilMK.nim AND mk.kodeMK = ambilMK.kodeMK
4.GROUP BY ambilMK.nim
atau
1.SELECT mhs.nim, mhs.namaMhs, sum(mk.sks) as jumlahSKS
2.FROM mhs, mk, ambilMK
3.WHERE mhs.nim = ambilMK.nim AND mk.kodeMK = ambilMK.kodeMK
4.GROUP BY mhs.nim
Untuk mencari jumlah SKS setiap mahasiswa, kita menggunakan perintah sum(mk.sks). Supaya perintah ini bisa jalan, maka harus ditambahkan perintah GROUP BY mhs.nim atau GROUP BY ambilMK.nim. Hal ini dikarenakan proses penjumlahan sks harus dilakukan pada setiap kelompok data. Maksudnya apa ya?
Perhatikan perintah SQL berikut ini
1.SELECT mhs.nim, mhs.namaMhs, mk.sks
2.FROM mhs, mk, ambilMK
3.WHERE mhs.nim = ambilMK.nim AND mk.kodeMK = ambilMK.kodeMK
Perintah di atas akan menampilkan nim, nama mahasiswa serta sks setiap mata kuliah yang diambil. Hasilnya adalah
1.NIM    namaMhs        SKS
2.001    Joko               3
3.001    Joko               2
4.001    Joko               3
5.002    Amir               2
6.002    Amir               3
7.003    Budi               3
8.003    Budi               3
Untuk pertanyaan no. 2 ini, seharusnya akan tampil hasil berikut
1.NIM    namaMhs        jumlahSKS
2.001    Joko              8
3.002    Amir              5
4.003    Budi              6
Sehingga supaya mendapatkan hasil seperti di atas, kita akan menjumlahkan setiap SKS yang diambil mahasiswa, berdasarkan kelompok mahasiswa, dalam hal ini dikelompokkan berdasarkan NIM. Mengapa tidak dikelompokkan berdasarkan nama mahasiswa? Wah bisa gawat kalau ini terjadi, karena ada kemungkinan  nama mahasiswa yang sama. Oleh karena itu harus ada perintah GROUP BY mhs.nim
Untuk pembahasan nomor yang lain akan dilanjutkan pada tutorial yang lain.

read more "Perintah SQL (SELECT) untuk Multi Tabel (Bag. 1)"