Sebagaimana lazimnya, sebuah perintah SQL diketik berdasarkan permintaan yang diinginkan. Misal kita ingin melihat seluruh isi tabel dept (deptno, dname, loc) yang dimiliki oleh scott. Perintah-perintah yang bisa dilakukan bervariasi, misalnya :
SQL> connect scott/tiger
à login sebagai scott
SQL> select * from dept;
SQL> select deptno, dname, loc from dept;
SQL> select * from scott.dept;
SQL> select * from SCOTT.dept;
SQL> select * from SCOTT.DEPT;
Semua perintah SQL di atas menghasilkan output sama, yaitu semua isi tabel dept. Seringkali kita menganggap bahwa jika hasil sesuai dengan yang diinginkan, maka apa pun perintah yang kita tulis sah-sah saja. Apakah memang seperti itu? Mari kita lihat bagaimana cara Oracle memandang perintah SQL yang kita kirim.
1. Bila semua user menggunakan perintah sama
a. User scott grant select on dept to public agar semua user bisa mengakses tabel dept
SQL> connect scott/tiger
SQL> grant select on dept to public;
b. Shutdown Oracle untuk memastikan memori (SGA) belum pernah digunakan
SQL> connect sys/inix2009 as sysdba
SQL> shutdown immediate;
SQL> startup
c. Buka SQL window I
SQL> connect scott/tiger
SQL> select * from scott.dept
d. Buka SQL window II
SQL> connect hr/hr
SQL> select * from scott.dept
e. Buka SQL window III
SQL> connect system/inix2009
SQL> select * from scott.dept
f. Buka SQL window IV
SQL> connect sys/inix2009 as sysdba
SQL> select * from scott.dept
g. Lihat bagaimana perintah-perintah tersebut dipandang oleh Oracle
SQL> connect sys/inix2009 as sysdba
SQL> desc v$sqltext;
Name Null? Type
————————— ——– ————
ADDRESS RAW(4)
HASH_VALUE NUMBER
SQL_ID VARCHAR2(13)
COMMAND_TYPE NUMBER
PIECE NUMBER
SQL_TEXT VARCHAR2(64)
SQL> select address, sql_text
from v$sqltext
where lower(sql_text) like ‘%dept%’;
ADDRESS SQL_TEXT
——– ——————————————
51341368 ere lower(sql_text) like ‘%dept%’
513733B8 select * from scott.dept
. . .
Terlihat bahwa Oracle memandang semua perintah sama sehingga hanya terlihat satu buah perintah di Shared Pool, yaitu “select * from scott.dept”. Hal ini menghemat ukuran Shared Pool sekaligus mempercepat proses karena perintah yang ditulis dianggap sama.
2. Bila setiap user menggunakan perintah berbeda yang penting hasil sama
a. Shutdown Oracle untuk memastikan memori (SGA) belum pernah digunakan
SQL> connect sys/inix2009 as sysdba
SQL> shutdown immediate;
SQL> startup
b. Buka SQL window I
SQL> connect scott/tiger
SQL> select * from dept
c. Buka SQL window II
SQL> connect scott/tiger
SQL> select deptno, dname, loc from dept
d. Buka SQL window III
SQL> connect hr/hr
SQL> select * from scott.dept
e. Buka SQL window IV
SQL> connect system/inix2009
SQL> select * from SCOTT.dept
f. Buka SQL window V
SQL> connect sys/inix2009 as sysdba
SQL> select * from SCOTT.DEPT
g. Lihat bagaimana perintah-perintah tersebut dipandang oleh Oracle
SQL> connect sys/inix2009 as sysdba
SQL> select address, sql_text
from v$sqltext
where lower(sql_text) like ‘%dept%’;
ADDRESS SQL_TEXT
——– ———————————————
5238ABEC select * from SCOTT.dept
52305E74 where lower(sql_text) like ‘%dept%’
5237F020 select * from SCOTT.DEPT
52389C30 select * from scott.dept
523A67DC select * from dept
523A21A0 select deptno, dname, loc from dept
Terlihat bahwa Oracle memandang perintah-perintah tersebut berbeda walaupun hasilnya sama, yaitu semua isi tabel dept. Hal ini memboroskan pemakaian Shared Pool sekaligus memperlambat proses karena perintah yang ditulis dianggap berbeda.
Kesimpulan :
Setiap orang harus menggunakan perintah sama untuk sebuah hasil yang diinginkan. DBA berkewajiban membuat standardisasi perintah SQL untuk digunakan oleh programmer dan siapa pun yang berkaitan.
0 komentar:
Posting Komentar