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…

3 responses to this post.

  1. wah, postingan ttg database nya kren” ,
    oh iya knalin, nama gw rizal ,
    nak smk 4 bandung jurusan rpl ,
    gw jg blajar oracle, dan tertarik bgt bwt blajar oracle .
    kalo ada yg ga ngerti gw boleh nanya yah , hhe ,
    makasih .

    Reply

  2. Posted by tiftazani on September 6, 2008 at 9:44 am

    Oke rizal, selamat belajar Oracle.
    Kalau aku bisa jawab, pasti aku usahakan buat jawab pertanyaan2mu kok.

    Reply

  3. simple nya, kalau diurutkan dari tingkat tertinggi sampai tingkat terendah akses view, sangat sudah jelas DBA view memiliki smua akses ke segala View entah itu dynamic view atopun data dictionary view istilahnya hanya diberikan untuk setiap orang yang memiliki previlagese sebagai DBA (inget previlage dba).
    selanjut nya all_user view (untuk table yang memang dimiliki oleh user dan table yang di grant akses kpd nya),
    baru deh user view (untuk table yang hanya dibuat oleh user tsb).

    Reply

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: