Powered By Blogger

Senin, 25 Juli 2011

Meningkatkan Performance dengan Native Compilation

Native Compilation adalah feature yang disediakan oleh Oracle agar objek-objek PL/SQL (procedure, function, package, trigger) pada saat
dieksekusi dilakukan oleh compiler non-Oracle (C Compiler). Tujuan dari Native Compilation adalah untuk meningkatkan performance. Secara default fitur ini tidak diaktifkan.
Untuk menggunakan fitur ini jika Anda menggunakan Oracle 10g, di server harus ada compiler C atau C++ dan dibuat folder untuk shared DLL-nya sedangkan di Oracle 11g tidak perlu lagi.
Parameter yang harus disetting (Oracle 10g)
  • plsql_native_library_dir
  • plsql_native_library_subdir_count
  • plsql_code_type
SQL> alter system set plsql_native_library_dir='d:\plsql_lib';
col name for a35
col value format a30
set linesize 200 

SELECT name, value FROM gv$parameter WHERE name LIKE '%plsql%';
NAME                                VALUE
----------------------------------- --------------------------
plsql_compiler_flags                INTERPRETED, NON_DEBUG
plsql_native_library_dir            d:\plsql_lib
plsql_native_library_subdir_count   0
plsql_code_type                     INTERPRETED
Pada demo ini akan digunakan dua function dimana yang satu dikerjakan dengan INTERPRETED dan satunya
engan NATIVE. Kedua function mengerjakan proses yang sama yaitu
menghitung faktorial.
Function factorial_intrepreted
 
CREATE OR REPLACE FUNCTION factorial_interpreted(p_n NUMBER)
RETURN NUMBER IS
BEGIN    
    IF (p_n = 1) THEN       
      RETURN 1;    
    ELSE       
      RETURN factorial_interpreted(p_n-1) * p_n;    
    END IF;
END factorial_interpreted;
/

Function factorial_native
 
CREATE OR REPLACE FUNCTION factorial_native(p_n NUMBER)
RETURN NUMBER IS
BEGIN
   IF (p_n = 1) THEN
     RETURN 1;
   ELSE
     RETURN factorial_native(p_n-1) * p_n;
   END IF;
END factorial_native;
/

Periksa cara eksekusinya apakah menggunakan intepreted atau native compiler
 
SELECT  o.object_name,
        o.object_type,
        s.param_value comp_mode
FROM user_stored_settings s,
      user_objects o
WHERE o.object_id = s.object_id
AND param_name = 'plsql_compiler_flags'
AND o.object_name LIKE 'FACTOR%';
OBJECT_NAME            OBJECT_TYPE  COMP_MODE
---------------------- ------------ -----------------------
FACTORIAL_INTERPRETED  FUNCTION     INTERPRETED,NON_DEBUG
FACTORIAL_NATIVE       FUNCTION     INTERPRETED,NON_DEBUG

Secara default semua dikerjakan secara INTEPRETED. Untuk mengubah agar function
factorial_native dikerjakan dengan native compiler, lakukan dengab perintah berikut :
ALTER FUNCTION factorial_native COMPILE PLSQL_CODE_TYPE=NATIVE
REUSE SETTINGS;
Kemudian periksa kembali dengan perintah sebelumnya.
Buat PL/SQL Block untuk melakukan pengujian terhadap kedua function tersebut.
 
set serveroutput on;
DECLARE
    l_start NUMBER;
    l_n     NUMBER;
BEGIN
  l_start := dbms_utility.get_time;
  FOR i IN 1 .. 10000
  LOOP
      l_n := factorial_interpreted(50);
  END LOOP;
  dbms_output.put_line('Interpreted: '
       || (dbms_utility.get_time-l_start)
       || ' hsecs...' || l_n);    

  l_start := dbms_utility.get_time;
  FOR i IN 1 .. 10000
  LOOP
      l_n := factorial_native(50);
  END LOOP;
  dbms_output.put_line('Native:      '
       || (dbms_utility.get_time-l_start)
       || ' hsecs...' || l_n); 

END;
/
Interpreted: 31 hsecs…3041409320
Native:      22 hsecs…3041409320

Lihat perbedaan waktu eksekusinya…

                                                                                     Sumber: Bambang Sutejo, klik-oracle.web.id

Minggu, 24 Juli 2011

Koneksi dari Oracle ke MS Acces dengan Heterogeneous Services

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.

                                                                                                                        Sumber: klik-oracle.web.id