Beberapa waktu yang lalu saya sudah menulis tentang Oracle HS (Heterogeneous Services) di blog ini. Kala itu saya menggunakan Oracle HS di sistem operasi RedHat Enterprise Linux 4.5 dengan database Oracle 10g R2 XE (Express Edition) untuk mengakses database MySQL di sistem operasi Windows Server 2003. Di artikel ini saya akan membahas topik yang sama tapi kasusnya berbeda. Kali ini database Oracle 11g R2 Enterprise Edition terpasang di Oracle Linux 6.2, sedangkan database MySQL di Windows Server 2003. Dalam kasus ini kita tidak perlu melakukan konfigurasi di MySQL atau Windows Server 2003, semua konfigurasi Oracle HS akan dilakukan di sisi Oracle Linux 6.2.
Kita mulai dengan memasang driver ODBC untuk MySQL di server Oracle Linux 6.2.
Selanjutnya kita akan membuat konfigurasi ODBC di /etc/odbc.ini, gunakan editor seperti vim atau nano untuk menambahkan baris berikut ke berkas tersebut.
Kita juga harus membuat konfigurasi Oracle HS di $ORACLE_HOME/hs/admin/initSID.ora yang berisi data-data di bawah ini.
Terakhir, kita harus menambahkan konfigurasi untuk mengakses database MySQL melalui Oracle HS (Heterogeneous Services) di $ORACLE_HOME/network/admin/tnsnames.ora dan $ORACLE_HOME/network/admin/listener.ora. Kedua konfigurasi ini sangat sensitifm sedikit kesalahan ketik saja akan mengakibatkan Oracle HS tidak berjalan dengan baik. Berikut cuplikan untuk konfigurasi tnsnames.ora.
Kita mulai dengan memasang driver ODBC untuk MySQL di server Oracle Linux 6.2.
suPaket RPM tersebut sudah ada di DVD installer Oracle Linux 6.2 tapi kita bisa juga mengunduhnya dari situs MySQL. Namun dari pengalaman saya, installer ODBC dari situs MySQL membutuhkan paket dependency yang belum tersedia di Oracle Linux 6.2.
rpm -ivh mysql-connector-odbc-5.1.5r1144-7.el6.x86_64.rpm
Selanjutnya kita akan membuat konfigurasi ODBC di /etc/odbc.ini, gunakan editor seperti vim atau nano untuk menambahkan baris berikut ke berkas tersebut.
[MY_SQL]Ganti informasi SERVER, UID, PWD, DATABASE masing-masing secara berurutan dengan alamat IP server, username, password user bersangkutan, dan basis data MySQL yang akan diakses.
DRIVER = /usr/lib64/libmyodbc5.so
SERVER = 10.15.5.71
UID = username
PWD = password
DATABASE = database
PORT = 3306
[ODBC]
TRACE = 1
TRACEFILE = /tmp/odbc.log
Kita juga harus membuat konfigurasi Oracle HS di $ORACLE_HOME/hs/admin/initSID.ora yang berisi data-data di bawah ini.
HS_FDS_CONNECT_INFO = MY_SQLPerhatikan baris HS_FDS_CONNECT_INFO harus memiliki nilai yang sama dengan konfigurasi di /etc/odbc.ini. $ORACLE_HOME adalah direktori untuk produk database Oracle. Di Oracle Linux 6.2 kita bisa menampilkannya dengan perintah:
HS_FDS_TRACE_LEVEL = DEBUG
HS_FDS_SHAREABLE_NAME = /usr/lib64/libodbc.so
HS_LANGUAGE=AMERICAN_AMERICA.WE8ISO8859P15
set ODBCINI = /etc/odbc.ini
set ODBCINSTINI = /etc/odbcinst.ini
echo $ORACLE_HOMESID pada initSID.ora harus diganti dengan nama SID yang akan digunakan untuk mengakses MySQL. Di sistem Oracle Linux yang saya gunakan, path lengkap untuk konfigurasi inisial Oracle HS menjadi /oracle/product/11.2.0/dbhome_1/hs/admin/initMYSQLDB.ora.
Terakhir, kita harus menambahkan konfigurasi untuk mengakses database MySQL melalui Oracle HS (Heterogeneous Services) di $ORACLE_HOME/network/admin/tnsnames.ora dan $ORACLE_HOME/network/admin/listener.ora. Kedua konfigurasi ini sangat sensitifm sedikit kesalahan ketik saja akan mengakibatkan Oracle HS tidak berjalan dengan baik. Berikut cuplikan untuk konfigurasi tnsnames.ora.
MYSQLDB =Tambahkan baris-baris di atas ke baris terakhir tnsnames.ora. Jangan lupa mengganti db.company.com pada parameter HOST dengan nama domain atau alamat IP server Oracle Linux 6.2. Lalu di listener.ora konfigurasinya menjadi:
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = db.company.com)(PORT = 1521))
(CONNECT_DATA =
(SID = MYSQLDB)
)
(HS = OK)
)
SID_LIST_LISTENER =Konfigurasi yang berwarna merah menandakan baris yang saya tambahkan di konfigurasi lama. Samakan db.company.com pada parameter HOST seperti pada tnsnames.ora. Selanjutnya kita reload konfigurasi listener Oracle dengan menjalankan perintah berikut dari terminal:
(SID_LIST =
(SID_DESC =
(SID_NAME = MYSQLDB)
(ORACLE_HOME = /oracle/product/11.2.0/dbhome_1)
(PROGRAM = dg4odbc)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = db.company.com)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = db.company.com)(PORT = 1522))
)
)
ADR_BASE_LISTENER = /oracle
lsnrctl reloadPastikan instance untuk layanan MySQL sudah dijalankan dengan perintah lsnrctl status yang menghasilkan output untuk SID MYSQLDB, lebih kurang seperti:
Service "MYSQLDB" has 1 instance(s).Cek juga apakah output dari lsnrctl services sudah menampilkan instance MYSQLDB. Jika sudah, masuk ke Oracle menggunakan sqlplus, buat database link, dan coba jalankan query ke server MySQL.
Instance "MYSQLDB", status UNKNOWN, has 1 handler(s) for this service...
sqlplus / as sysdbamysql adalah nama database link yang kita buat pada perintah create public database link. Ganti username dan password seperti yang kita gunakan di /etc/odbc.ini. Ganti juga nm_tabel dengan nama tabel yang ada di database yang kita tetapkan di /etc/odbc.ini. Seharusnya perintah terakhir menampilkan semua record yang ada di tabel nm_tabel jika konfigurasi instalasi Oracle HS sudah tepat.
create public database link mysql connect to "username" identified by "password" using 'MYSQLDB'
select from nm_tabel@mysql