Archive for the ‘Oracle’ Category

SQL Bagian 1…

Wah cukup lama juga nih dah nggak ngisi blog, abis akhir2 ini lagi sibuk banget nih, haha9 …so sibuk deh lebih tepatnya 🙂

Oh ya kali ini saya akan mencoba bagi-bagi ilmu sedikit mengenai database, soal ini saya dapat ketika sedang mengikuti kuliah Basis Data beberapa hari lalu.

Soalnya adalah sebagai berikut :

Diketahui Skema database fakultas yang terdiri dari 3 tabel :

MAHASISWA (NO_MHS, NAMA_MAHASISWA, PROGRAM_STUDI, KOTA_ASAL)

MATAKULIAH (NO_MK, NAMA_MK, PROGRAM_STUDI)

NILAI (NO_MHS, NO_MK, NILAI)

Buatlah Table, beserta jawablah soal-soal yang ada:

Continue reading

Advertisements

Merubah lokasi datafile di Oracle…

Tadi gw abis jawab pertanyaan di millis oracle indonesia, pertanyaan nya gimana caranya ngerubah lokasi dari datafile di Oracle. Ya udah daripada yang tau cuma di millis aja, lebih baik gw posting jawaban gw ke blok, yah semoga bisa membantu temen2 yang kesulitan.

Untuk mengubah lokasi datafile, jadikan datafile tersebut offline terlebih dahulu, kemudian pindahkan datafile tersebut menggunakan command dari OS yang kita pakai (istilahnya kalo di windows Ctrl+ X , Ctrl + V),renama datafile tersebut , lalu lakukan recover terhadap datafile tersebut, dan terakhir datafile itu kita jadikan online lagi.

Contohnya seperti ini

1. Menjadikan datafile offline

ALTER DATABASE DATAFILE
‘C:\ORACLE\DATA02.DBF’ OFFLINE;

2. Copy datafile ke lokasi yang baru misal dari folder C:\ORACLE\ ke folder C:\ORACLE\ORADATA\ORA10\

==> Yah tinggal Ctrl+ X , Ctrl + V aja kalo di di windows 🙂

3. Ubah nama filenya di Control file

ALTER DATABASE RENAME FILE ‘C:\ORACLE\DATA02.DBF’ TO
‘C:\ORACLE\ORADATA\ORA10\DATA02.DBF’;

4. Recover datafile tersebut, hal ini bertujuan untuk mensinkronkan file headernya dengan database

RECOVER DATAFILE ‘C:\ORACLE\ORADATA\ORA10\DATA02.DBF’;

5. Jadikan datafile tersebut online kembali

ALTER DATABASE DATAFILE
‘C:\ORACLE\ORADATA\ORA10\DATA02.DBF’ ONLINE;

Dan tersenyumlah 🙂 Datafile siap digunakan kembali 🙂

Salam Hormat

Tiftazani Khara

Soal Ujian OCA (Oracle Certified Association) mengenai View..

You want to view the SQL statements used by all the users in the database to create views. Which dynamic view should you use to obtain this information ?

A. ALL_VIEWS
B. DBA_VIEWS
C. USER_VIEWS
D. DBA_OBJECTS
E. ALL_OBJECTS

Soal Transcender 1Z0-042 , Ref Cert-1Z0-042a.7.5.3

Contoh Soal OCA ini merupakan contoh soal yang memerlukan ketelitian dan daya analisis yang cukup baik. Disoal ini kita diminta untuk menentukan View yang manakah yang dapat menampilkan SEMUA View yang ada di database Oracle. Kesalahan yang dibuat oleh si pembuat soal (Transcender loh, bukan dari Oracle University, Transcender hanya sedikit memodifikasi soal resmi dari Oracle University) adalah si pembuat soal menyebut Option yang ada sebagai Dynamic View, ini merupakan kesalahan yang cukup fatal menurut saya (ca eleh gw 🙂 ), kalau seandainya kesalahan ini dibiarkan berlarut-larut. Mengapa? karena jenis View diatas adalah merupakan jenis Metadata View yang tergolong kedalam kategory Data Dictionary View, dan bukan Dynamic Performance View.

Saya tidak akan membahas masalah apa itu Metadata View, Data Dictionary View, dan Dynamic Performance View disini. Saya akan mencoba membahasnya pada postingan tersendiri (Insya Allah). Namun akan saya jelaskan sedikit mengenai pengertian diatas.

Database Oracle 10g memiliki 2 jenis metadata view , yaitu :
1. Data Dictionary view ( Memiliki nama yang dimulai dengan DBA_ , ALL_ , dan USER_ . Namanya bermakna plural(ada akhiran ‘S’-nya) dan data yang berada didalamnya umumnya huruf besar semua)
2. Dynamic Performance View (Memiliki nama yang dimulai dengan V$ , contohnya V$DATABASE , V$DATAFILE . Namanya bermakna singular (Tanpa akhiran ‘S’-nya) dan data yang berada didalamnya biasanya huruf kecil semua)\

Segitu aja ya penjelasannya, cukup kan, hehe gw kan lagi minggu tenang (sebenarnya gak tenang-tenang banget sih), 5 hari lagi UAS niiih.

Oke kita lanjut ke soal, Untuk menjawab soal diatas saya akan membahasnya melalui praktek secara langsung. Oh ya pilihan yang D dan E, dicoret aja ya, soalnya itu jawaban dah pasti salah, soalnya View ini gak nampilin SQL Statement yang digunakan oleh user untuk membuat View. Gak Percaya? Coba aja sendereeee (i-nya Band Jambrut, bener kan?, mereka kan kalo nyebut ‘i’ seperti ‘e’, dengerin aja lagu-lagunya).

Jadi jawaban yang mungkin adalah pilihan A , B, dan C.

Oke kita akan memulai praktek..

SQL> connect as sysdba;
Enter user-name: sys
Enter password:
Connected.
sql> –saya login sebagai sys, DBA Systemyang memiliki hak paling tinggi, yang memiliki semua privilege
SQL> select count(*) from all_views;

COUNT(*)
———-
3494
SQL> –Oh ya saya gak nampilin isi dari viewnya, cukup jumlahnya aja ya, soalnya kalo ditampilin kepenuhan
SQL> –Jadi saya nampilin jumlahnya aja ya, ingat View yang diminta adalah SEMUA YANG ADA di database.

SQL> select count(*) from dba_views;

COUNT(*)
———-
3494

SQL> select count(*) from user_views;

COUNT(*)
———-
2673

Oke kita lihat,dengan menggunakan USER_VIEWS jumlah yang ada kurang dari dari DBA_VIEWS dan ALL_VIEWS, Jadi bisa dipastikan bahwa pilihan yang C adalah SALAH, karena tidak menampilkan SEMUA View yang ada di dalam database.

Alasan kenapa USER_VIEWS tidak menampilkan semua View yang ada adalah :
USER_VIEWS = View ini bisa digunakan untuk melihat SQL Command yang digunakan untuk membuat View, namun yang bisa dilihat di View ini HANYA VIEW yang terdapat pada Schema/User yang bersangkutan, DAN TIDAK MENAMPILKAN SEMUA VIEW YANG DIMILIIKI OLEH SEMUA USER YANG ADA DI DATABASE.

Dari pengertian diatas , berarti jumlah view yang terdapat di Schema ‘SYS’ adalah sebanyak 2673 View.

Ngerti kan, kenapa? Gak ngerti ?Masa, Ngerti aja deh, yah, yah….Oke deh kakak… 🙂

Oke deh lanjut, sekarang saya akan masuk sebagai user yang lain yaitu user ‘TIFTA’, hohoho…NARSISSS MANIA.

SQL> connect tifta/tifta;
Connected.
SQL> select count(*) from all_views;

COUNT(*)
———-
3494

SQL> select count(*) from dba_views;
select count(*) from dba_views
*
ERROR at line 1:
ORA-00942: table or view does not exist

SQL> select count(*) from user_views;

COUNT(*)
———-
1

Oke deh, hati-hati loooh terhadap tipuan diatas, emang sih jumlah view yang ada di ALL_VIEWS jumlahnya sama dengan jumlah ALL_VIEWS dan DBA_VIEWS pada schema SYS (User dengan tingkatan tertinggi). Namun belum tentu yang benar adalah yang pilihan A . ALL_VIEWS, oh ya pada saat kita ingin melihat jumlah view dengan DBA_VIEWS kok gak bisa ya? Mengapa? Karena kita tidak memiliki hak akses untuk melihat isi dari view tersebut.

Pada USER_VIEWS , yah walaupun jawabannya dah dibuang saya kasih lihat lagi deh, disana jumlahnya 1, Artinya jumlah View yang terdapat di Schema tifta hanyalah berjumlah 1 View.

Oke kita masuk lagi sebagai pengguna lain, yaitu pengguna dengan nama ‘SCOTT’

SQL> connect scott/scott;
Connected.
SQL> select count(*) from all_views;

COUNT(*)
———-
1503

SQL> select count(*) from dba_views;
select count(*) from dba_views
*
ERROR at line 1:
ORA-00942: table or view does not exist

SQL> select count(*) from user_views;

COUNT(*)
———-
0

Hohooo,loh kok jumlahnya cuma 1503 ? lebih kecil sih. Hehe , tuh kan, makanyaaa jangan cepat2 ambio keputusan dulu. Udah liatkan? Jumlah View pada view ALL_VIEWS adalah berjumlah 1503, jadi bukan semuanya, berarti jawaban yang A salah dooong. Hehe tinggal yang B dong, berarti.

Oh ya, mau tau kenapa pada user ‘TIFTA’ jumlah view dengan menggunakan ALL_VIEWS berjumlah 3494 sedangkan pada user ‘SCOTT’ berjumlah ‘1503’ ?

Karena saya baik (duh mulai deh narsisnya) hehe, maka saya kasih tau deh jawabannya.Hal ini terjadi karena pada User ‘TIFTA’ telah diberikan privilege kepadanya dengan System Privilege berupa “SELECT ANY TABLE”, sehingga user ‘TIFTA’ bisa mengakses semua table yang ada. kok Table sih bukan view? haha saya gak mau jelasin ah, kasih komentar dulu dong, lalu tanya kenapa kok pake tabel bukan view, hehe jahat banget ya gw..Tapi kalo gak nanya juga gak papa sih, kali aja kamu udah tau jawabannya, hehe peace :-).

Oke saya akan memberikan hak akses kepada user ‘SCOTT’ melalui perintah ‘GRANT’ ,supaya punya hak akses yang sama dengan user ‘TIFTA’

SQL> –Memberikan Privileges ke User Scott untuk dapat melakukan SQL COMMAND : SELECT ANY TABLE
SQL> GRANT SELECT ANY TABLE TO “SCOTT”;
GRANT SELECT ANY TABLE TO “SCOTT”
*
ERROR at line 1:
ORA-01031: insufficient privileges

Loh kok gak bisa ya?hmm kenapa ya ? hayoo kenapa(duh kayak anak kecil aja 🙂 ). Soalnya di SQL*Plus saya masih login sebagai user ‘SCOTT’ yang belum cukup (ingat loh BELUM bukan TIDAK, soalnya kalo dikasih privileges tambahan ke SCOTT, yah dia dah bisa)mempunyai Privilege untuk melakukan Command diatas. Hal ini ditandai dengan kalimat “insufficient privileges”

Oke Sekarang saya akan login sebagai Administartor (SYSTEM), SYSTEM adalah Administrator yang tingkatnya dibawah SYS (yang merupakan Administrator tertinggi).

SQL> connect system/dua;
Connected.
SQL> GRANT SELECT ANY TABLE TO “SCOTT”;

Grant succeeded.

Oke pemberian hak akses ke user Scott selesai, Sekarang mari kita lihat apa hasilnya?

SQL> connect scott/scott;
Connected.
SQL> select count(*) from all_views;

COUNT(*)
———-
3494

SQL> select count(*) from dba_views;
select count(*) from dba_views
*
ERROR at line 1:
ORA-00942: table or view does not exist

SQL> select count(*) from user_views;

COUNT(*)
———-
0

Tuh kan, hasilnya jadi sama dengan ALL_VIEWS pada user ‘TIFTA’ maupun ‘SYS’. Tapi karena disoal gak pake persyaratan segala (dalam hal ini user SCOTT mesti dikasih privilege “SELECT ANY TABLE”) jadi jawaban yang A. ALL_VIEWS gak valid.

Karena jawaban A ,C ,D, dan E SALAH , maka pilihan yang tepat adalah yang B. DBA_VIEWS.

Mengapa ?walaupun beberapa user tidak bisa menggunakan view DBA_VIEWS, namun hasil yang yang diberikan oleh view DBA_VIEWS adalah konsisten, atau tetap sama, yaitu akan tetap menampilkan jumlah SELURUH VIEW YANG ADA. Kalo belum ngerti baca aja lagi soalnya.

Diantara user yang bisa mengakses View DBA_VIEWS adalah SYS, SYSTEM, SYSMAN, dan DBSNMP , keempat user inilah yang otomatis aktif (siap digunakan) ketika Database pertama kali dibuat.

Oh ya mungkin pada bingung waktu saya ngomong view DBA_VIEWS, view ALL_VIEWS, dan view USER_VIEWS, kok selalu adakata ‘VIEW’nya sih.Hehe wajar aja sih kalo bingung, namanya juga manusia, yag gak fren (halah sok akrab).

Oke, ketiga view diatas (bukan ketiga aja deh, semua pilihan yang ada dari A sampe E) adalah jenis View yang berada dalam Schema SYS, View (yang ada di option ini) semuanya ada dalam kategori Data Dyctionary View, hoho kan saya dah kasih tau penjelasannnya diatas, kok diulang? gak papa deh biar lebih afdhol :-).

Untuk lebih jelasnya akan saya kasih lihat gambarnya (di iSQL*Plus) secara langsung.

Oke deh segitu dulu deh, pokoknya Kalo ada niat, terus lakukan, kejar mimpi lo semua (asal mimpi yang baik ya), mumpung mimpi itu GRATISSSS…

Contoh Soal Ujian Sertifikasi Oracle (OCA)…

You have issued the following statement in your Oracle database:

SQL> ALTER TABLESPACE SYSAUX OFFLINE;

Which statement correctly describes the outcome of this statement?

A.You can write data to the SYSAUX tablespace but cannot read data from it.
B.This statement fails because you cannot take the SYSAUX tablespace offline.
C.You can read data from the SYSAUX tablespace after the SYSAUX tablespace has been taken offline.
D.You cannot read data from or write data to the SYSAUX tablespace after the SYSAUX tablespace has been taken offline.

Soal diatas adalah contoh soal buat ujian Sertifikasi OCA Oracle 10g Database dengan kode soal 1Z0-042.5.3.5.

Melihat contoh soal diatas awalanya gw dengan PeDe menjawab B,namun setelah gw review ternyata jawabannya salah. Soal ini menurut gw termasuk soal jebakan, karena Tablespace SYSAUX di Oracle ternyata BISA dijadikan OFFLINE, namun yang tidak bisa adalah menjadikan Tablespace ini READ-ONLY, maksud dari read-only disini adalah , bahwa Tablespace tersebut hanya bisa dibaca namun kita tidak bisa menulis data ke Tablespace yang bersangkutan.

Selain Tablespace SYSAUX yang tidak bisa dijadikan dalam mode READ-ONLY, ada lagi Tablespace lain yang tidak bisa dijadikan dalam mode READ-ONLY, nama Tablespace ini adalah Tablespace SYSTEM.

Selain tidak bisa dijadikan dalam mode READ-ONLY, kedua Tablespace ini (SYSAUX dan SYSTEM) juga tidak bisa diubah namanya (di rename).

Selain itu yang perlu kita cermati disini adalah KITA TIDAK BISA MENJADIKAN TABLESPACE DALAM KONDISI OFFLINE JIKA DATABASE SEDANG BERJALAN DALAM MODE NOARCHIVE LOG.

Oleh karena itu kita perlu menjadikan database tersebut dalam mode Archive Log, hal ini Insya Allah akan saya bahas selanjutnya (hehe soalnya 7 menit lagi ada kuliah tambahan nih, nanti telat lagi).

So, Bagi temen yang berniat untuk mengikuti Ujian Sertifikasi Oracle (OCA = Oracle Certified Association), pelajari baik-baik contoh soal-soalnya, karena banyak soal jebakan, dan Soal-soalnya banyak yang Studi Kasus, jadi temen-temen (termasuk saya tentunya) harus sering berlatih dan berexperiment terhadap databasenya, Asal jangan datababase Perusahaan aja yang di buat mainan.

Good Luck ya, Arigatou Gozaimasu 🙂