Rabu, 13 September 2006

Membuat Fungsi di PL/SQL

sintak umum -->

Code:
CREATE OR REPLACE FUNCTION nama_fungsi
(parameter_1, ....)
RETURN tipe_data AS
variabel_1 tipe_data;
........
BEGIN
statemen_1;
........
RETURN nilai_yang_dikembalikan;
END;

contoh :

Code:
CREATE OR REPLACE FUNCTION SEGMENT (SALES NUMBER)
RETURN CHAR AS
SEGM CHAR(2);
BEGIN
IF (SALES >= 1000000) THEN
SEGM := ‘AA’;
ELSE IF ((SALES >= 700000) AND (SALES < 1000000)) THEN
SEGM := ‘AB’;
ELSE IF ((SALES >= 500000) AND (SALES < 700000)) THEN
SEGM := ‘AC’;
ELSE
SEGM := ‘AD’;
END IF;
RETURN SEGM;
END;
/

contoh itu adalah untuk pembuatan fungsi segmentasi dari customer berdasarkan pembelian.

fungsi ada :
- Fungsi tanpa parameter
- Fungsi dengan paramater
- Fungsi didalam fungsi (nested function)

Senin, 11 September 2006

Koneksi PHP ke Oracle 10g

Langsung aja, gw mo share pengalaman waktu melakukan konfigurasi buat koneksi PHP dengan Oracle dikantor gw…
Pertama gw ceritain arsitektur dari aplikasi yang akan gw bikin :

1. SQL Server berada pada database server dengan IP 172.17.50.XX
2. Web Server dengan Apache dan PHP dengan IP 172.17.50.XX
3. Oracle berada pada database server dengan IP 192.168.0.XXX dan 192.168.0.XX
4. Semuanya dihubungkan dengan gateway (sori IP nya ngga bisa disebutkan).

So...kesimpulannya semua database tidak berada pada satu mesin (tanya kenapa??? mana gw tahu bukan gw yang bikin sih...tapi kayanya berhubungan dengan security deh).

Terus...kita lanjut lagi ke curhatan gw, sampe mana yah? oh yah sampe MY GOD, THAT’s so Hard ;o Man!!!, Why??? jarang banget tutorial tentang PHP dengan Oracle ditambah PHP manual juga belum banyak membantu (soalnya gw nya buta banget).

Ok...gw tambahin deh spek dari Oracle Servernya sendiri menggunakan Oracle 9i dan 8i dan dikomputer web server terinstall Oracle Client 7.3.3, fungsi dari Oracle Client adalah sebagai penghubung ke Oracle server...nah disinilah letak TrouBLE utamanya, pertama gw coba ikutin dari PHP manualnya gimana cara mengaktifkan modul Oracle supaya didukung oleh PHP:

--// Buka “;"pada (php.ini)
;extension=php_oci8.dll
;extension=php_oracle.dll

penjelasannya sih gampang man...tapi ternyata ngga semudah itu!! Sampai puyeng pale gw tetep ngga berfungsi tuh modul, dengan peringatan tidak ditemukan oci.dll pada OS kita (padahal ada), iseng gw googling deh nyari file oci.dll n nemu juga akhirnya disertai dengan manualnya:

This dll-file was downloaded
from http://www.dll-files.com
Install notes:

º Use ExpressZIP to extract the file to
º your windows\system directory

n walah berhasil juga ... pas gw copy oci.dll di System32 dan System, PHP mengenali modul oci8 dan oracle Wink ... selesaikah masalah?? not yet man, cos setelah gw coba masukin script penghubung kaya gini nih "

$c1 = OCILogon("$username","$password","$dbname" );

if ($c1 == false){
echo OCIError($connection)."not connected";
exit;
}
else
{
echo "success connecting to my oracle databases";
}

?>

pesen yang gw dapetin selalu Warning: _oci_open_server: ORA-12154: TNS:could not resolve service name.

Gw googling lagi deh arti dari pesen error itu… ternyata harus ada file tnsnames.ora pada folder oracle yang mengandung konfigurasi yang mengarahkan pada letak dan nama service dari server Oraclenya:

--// catt: semua konfigurasi dah gw edit
JOUNIN =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(Host = hostname-or-ipaddress)(Port = 1521))
(CONNECT_DATA =
(SID = sidname)
)
)

hmmm...filenya dah ada dengan konfigurasi bener tuh!!! :\ , trus masalahnya dimana yah??? gw baca lagi deh manual PHP-nya, akhirnya walah...gw ngga liat satu buah statement like this “These functions allow you to access Oracle8 and Oracle7 databases. It uses the Oracle8 Call-Interface (OCI8). You will need the Oracle8 client libraries to use this extension.”

My..GOD that it’s, Oracle8 client libraries to use this extension sedangkan gw pake Oracle7.3.3 client yang memiliki perbedaan konfigurasi dengan Oracle8i dan 9i dimana tidak mengenali parameter SID dan sudah menggantinya dengan parameter SERVICE_NAME ;o , ya udah akhirnya gw ganti clientnya dengan Oracle9i client dan mengkonfigurasi ulang file tnsnames.ora nya jadi seperti ini:

JOUNIN =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = hostname-or-ipaddress)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = servicename)
)
)

Selesaikah....??? huuuuuuaaaaaaaaa Surprised nangis deh gw, blom bisa juga man!!! hampir asa gw putus nih, mana under presure pula nih :\ , utak-atik lagi deh gw ... ngubek2 php manual sampe masuk forum2 luar n masuk milis… n hasilnya adalah gw nemuin jawabannya, karena Oracle servernya berada pada lain jaringan maka kita harus mendekripsikan terlebih dahulu SERVICE_NAME nya pada script PHP kita, bingung yah??? ya udah gw kasih contoh langsung aja yah....kita edit aja file koneksi.php

$db = " (DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.XXX)(PORT = 1521))
(CONNECT_DATA = (SERVICE_NAME = servicename))
)";

$c1 = OCILogon("username","password",$db);

if ($c1 == false){
echo OCIError($connection)."not connected";
exit;
}
else
{
echo ";success connecting to my oracle databases";
}

?>

Taaaadaaaaaa.....berhasil man, now it will work.

Ok ... sekian dulu kisah perjuangan gw, buat para master sori kl kesannya gw bego banget..tapi emang gw bego sih kl soal ini rasberry , trus kesannya gw sebentar yah ngopreknya..padahal gw ngabisin waktu seminggu lebih cuma buat meng-koneksikan PHP dengan Oracle Server :\ . Trus pesen gw, teruslah bereksperimen...kl nemu masalah cari tahu sendiri dulu deh (googling, forum, milis etc)kl dah mentok banget baru minta bantuan langsung.

Terakhir… buat para programmer PHP, jangan terpaku dengan MySQL!!! cos enterprise banyak menggunakan Oracle dan SQL Server.

OK...Goodluck for Us, see you next time!!!Smile

Kamis, 07 September 2006

HS configuration on Oracle 10g

Dear all,

gw mo bagi2 cerita nih soal gimana membuat koneksi antara oracle denga SQL server 2000(soalnya di kantor gw make itu 2 jenis DB), saat kita hendak melakukan query dari Oracle ke SQL Server, misal tabel pertama ada di oracle dan tabel kedua ada di SQL Server dan kita ingin melakukan join terhdap kedua tabel tersebut..kl dari oracle ke oracle sih gampang kita tinggal melakukan konfigurasi pada file TNSNAMES.ORA ditiap klien, dan kita bikin DBLINK. Yang sulit kl beda platform misal ke SQl Server.

Kondisinya adalah gw coba bikin DBLINK dari Oracle 10g (RHELAS3) ke SQLServer 2000 (win2000) menggunakan heterogenous service (hsodbc), selain itu ada cara lain dengan menggunakan Transparent Gateway(tapi ngga usah dibahas sekarang...blom diterapin).

To the point, langkah2 yang di lakukan adalah:

1. membuat DSN terlebih dahulu ke SQlServer dengan nama SQLSERVER(terserah lo semua sih), dan buat koneksi (dengan login berdasarkan windows authentication atau SQL Authentication)
2. melakukan konfigurasi di server Oracle pada file :
a. /app/oracle/product/10.0.1/hs/admin/inithsodbc.ora

# This is a sample agent init file that contains the HS parameters that are
# needed for an ODBC Agent.

#
# HS init parameters
#
HS_FDS_CONNECT_INFO = SQLSERVER // nama DSN
HS_FDS_TRACE_LEVEL = 0
HS_FDS_SHAREABLE_NAME =

#
# ODBC specific environment variables
#
set ODBCINI=

#
# Environment variables required for the non-Oracle system
#
set =

b. /app/oracle/product/10.0.1/network/admin/listener.ora

SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = /app/oracle/product/10.0.1)
(PROGRAM = extproc)
)
(SID_DESC =
(GLOBAL_DBNAME = db2006) // nama global db oracle
(ORACLE_HOME = /app/oracle/product/10.0.1)
(SID_NAME = db2006) // nama service oracle
(PROGRAM=hsodbc)
)
)

LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC))
)
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost.localdomain)(PORT = 1521))
)
)
)

c. /app/oracle/product/10.0.1/network/admin/tnsnames.ora

DB2006 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost.localdomain)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = db2006)
)
(HS=OK)
)

3. lakukan restart service LSNRCTL

4. membuat DBLINK

CREATE DATABASE LINK CAD2004CONNECT
CONNECT TO “172.17.x.x\Gugun” // alamat IP SQLServer
IDENTIFIED BY Gugunpassword
USING ‘db2006’;

udah deh...gampang kan!!!

Minggu, 03 September 2006

Konsep Load Balancing Data Base

Pembangunan infrastruktur TI yang kuat dan memadai dinilai sangat penting sekarang ini. Mengingat setiap hari jumlah data yang harus direkam menjadi semakin banyak. Ratusan bahkan ribuan data data baru masuk setiap harinya. Belum lagi lalu lintas data yang menjadi semakin ramai juga memerlukan perhatian khusus.

Oleh sebab itu, banyak perusahaan TI yang berlomba-lomba memberikan solusi terbaik bagi perusahaan agar dapat memaksimalkan kerja departemen TI itu sendiri. Mulai dari pembuatan software, outsourcing, perencanaan infrastruktur, sampai produk yang dinamakan business solution.

Dengan banyaknya kebutuhan yang diperlukan oleh sebuah perusahaan, maka hampir setiap perusahaan besar membagi inftastruktur TI-nya menjadi beberapa bagianpenting, yang dikategorikan menurut aplikasinya. Misalnya, untu keperluan e-mail perusahaan, maka perusahaan akan membangun sebuah mail server khusus. Atau untuk perusahaan yang memiliki database cukup besar, maka perusahaan tersebut akan memiliki sebuat server khusus yang akan menangani ERP.

Tidak hanya sampai di situ saja, untuk dapat kuat dan memadai server dan jaringan yang ada juga harus ditunjang oleh berbagai komponen penting, seperti system keamanan yang terpercaya, maintenance yang dapat diandalkan, serta system control yang baik.

Load balancing. Adalah sebuah konsep yang gunanya untuk menyeimbangkan beban atau muatan pada infrastruktur TI sebuah perusahaan. Agar seluruh departemen dapat dimanfaatkan secara maksimal dan optimal.
Beberapa perusahaan TI yang telah meluncurkan solusi total dari konsep load balancing : HP dengan utility computing, IBM dengan Utility On Demand, Sun dengan Sun and I, Oracle dengan 10g.

10g dari Oracle
Dinamakan juga grid computing. Pada dasarnya, grid disini, dimaksudkan dengan clusters dari sebuah computer atau server yang saling berhubungan satu sama lain, untuk bekerja sama saling berbagi resources.
10g bekerja pada servers database dan aplikasi. Dengan adanya 10g, maka system dapat saling berbagi ruang maupun kemampuan sehingga system yang satu dengan yang lainnya dapat bekerja lebih optimal dan efisien. Untuk lebih jelasnya, perhatikan aplikasi 10g berikut:

Sebuah bank terdapat empat buah server dengan keperluan yang berbeda satu sama lain, seperti server SCM, ERP, CRM dan e-mail. Tentu saja ke-empat-empatnya harus dibangun dengan sistem yang lengkap, baik dari segi hardware maupun keamanannya. Padahal kerja ke-empat-empatnya tidak selalu sama dari hari ke hari. Contoh saja e-mail server, pada hari libur server akan tidak bekerja 100%, mengingat pada akhir pecan tidak terlalu banyak e-mail yang bersliweran. Namun pada akhir pekan banyak transaksi melalui ATM yang berlangsung. Sehingga server yang digunakan untuk transaksi tersebut dapat memanfaatkan resources yang tersedia melimpah pada e-mail server. Lain halnya jika anda tidak menggunakan 10g atau konsep load balancing.Server untuk transaksi tetap bekerja dengan supersibuk, sementara e-mail server menganggur sia-sia. Mengapa demikian? Pada 10-g, semua server akan dikumpulkan menjadi satu kesatuan secara virtual sehingga satu sama lain dapat saling memanfaatkan resources.

Sistem grid computing sendiri memiliki beberapa komponen penting selain 10-g nya, yaitu beberapa komponen seperti hardware dalam infrastruktur yang kuat dapat diandalkan. Seperti Internet, blader server, perangkat jaringan, SAN, storage Array (RAID), serta processor 32-bit – 64 bit.

Blade server
Blade server menjadi salah satu komponen penting dari 10g, karena server ini dapat bersifat plug and play yang memudahkan dalam peng-upgrade- an system. Satu rack blade server dapat menampung sebanyak 280 server sekaligus. Dalam setiap satu blade server biasanya terdapat satu atau dua processor dengan memory. Pada pengoperasiannya blade server tidak memelukan energi yang besar dan tidak mengeluarkan panas yang berlebihan, sehingga cukup efisien untuk digunakan.
Blade server juga biasa disebut high density server yang bekerja pada system cluster dan biasanya digunakan untuk satu task saja. Misalnya, file sharing saja atau streaming audio serta video dan sebagainya. Dan karena alasa cluster ini, maka blade server cocok untuk digunakan dalam konsep load blancing. Awalnya, IBM yang memperkenalkan server jenis ini, namun kini sudah banyak perusahaan TI yang telah memproduksinya seperti HP dan SUN Microsystems.

SAN
SAN (Storage Area Network) adalah jaringan yang khusus menangani dan menghubungi berbagai macam perangkat storage. SAN memiliki hubungan lansung ke server dan memungkinkan komuunikasi data antar – server.
Oleh karena itu, storage area network yang baik juga merupakan dukungan penting bagi 10g. Sebab biar bagaimanapun, untuk dapat mengoptimalkan akses data memang dibutuhkan jaringan yang kuat dari data itu sendiri.

RAID
RAID (Redundant Array of Independent Disks) adalah sebuah system yang memungkinkan menyimpan data yang sama pada saat yang bersamaan di tempat yang berbeda. Namun, anda tidak akan mengetahui HDD mana yang berperan sebagai HDD utama dan mana yang bukan.
Untuk perusahaan yang membutuhkan waktu uptime yang tinggi, misalnya 100%, maka teknologi RAID menjadi pilihan wajib. Sehingga bila terjadi kerusakan pada satu bagian data/storage system akan tetap mampu berjalan sebagaimana mestinya.

Kalo LOAD BALANCING untuk database, setahu saye nih menurut pengalaman ada 3 masalah. (ORACLE)

1. File over : menerapkan 2 database pada 2 server yanng memiliki konsep sama,
dalam artian fisik dan konsep database yang dibangun harus sama.Kemudian pada saat instalasi
oracle harus ada parameter tambahan yang harus di instal (saya lupa parameternya coba nanti saya cek lagi)
setelah itu kita buat scheduling untuk backup data. Memang kerja 2X, akan tetapi jika salah satu server mati maka akan ada backup dari
server kedua. (tolong di ralat)
2. Clustering : Pada dasarnya kita meringkas kerja, dalam artian begini pada saaat kita mengakses
beberapa tabel kita akan menggunakan banyak where. untuk meringkas hal tersebut maka kita buat clustering
sehingga .... ya lebih cepat he he he .....!!!
3. partitioning : Permasalahan yang timbul pada saat pengaksesan index yang sering. Oleh sebab itu object yang memiliki index
tersebut kita ibaratkan di ambil dan dibuatkan sebuah object tersendiri. sehingga kita cukup mengakses object baru tersebut
Hal ini bertujuan untuk meringkas dan mempercepat pekerjaan.
Saran dari penulis Kalo anda menggunakan ORACLE cobalah memanfaatkan perangkat lunak
“TOAD for ORACLE”. Coba aja pake LVS ( kalo OS nya Linux via NAT/network address translation)
Maaf kalo ada salah-salah kata or penjelasan yang kurang jelas. soalnya ga bisa menyusun kata-kata.