Dhafiq Sagara adalah orang bodoh yang tidak bisa apa-apa, tapi dia selalu berusaha untuk terus menjadi yang lebih baik. Rasa keingin-tahuannya sangat tinggi, selalu berusaha dan terus berusaha, trial dan error adalah prinsip belajarnya.

6 Feb 2011

Database Link Oracle dan MySQL

Jika sudah mempelajari database link antara oracle-oracle, kali ini kita mempelajari bagaimana konfigurasi database link antara Oracle-MySQL.

Pada dasarnya, konsep database link adalah remote database yang bisa dilakukan melalui localhost maupun host yang berbeda.

Untuk tutorial kali ini, kita akan mencoba melakukan konfigurasi database link Oracle-MySQL melalui host yang berbeda.



Contoh kasus: Oracle sebagai master/server yang meremote data yang ada di MySQL, dan MySQL sebagai client/slave sebagai penyedia data, sehingga kita bisa melakukan insert, update, delete pada MySQL melalui Oracle. Host MySQL memiliki IP address: 172.16.16.3 dan MySQL memiliki database dengan nama student.


KONFIGURASI PADA HOST CLIENT/SLAVE (MYSQL)
  1. Lakukan konfigurasi secara console melalui CommandPrompt (windows) dan terminal (linux).
  2. Login ke MySQL menggunakan username MySQL anda (secara default, username=root)
    mysql -u root
    

    Jika MySQL anda memiliki password, tambahkan opsi -p untuk memasukkan password user MySQL anda
    mysql -u root -p
    
  3. Jika anda telah berhasil masuk ke mysql anda, lakukan konfigurasi berikut:
    grant usage on *.* to root@localhost with grant option;
    
    Yaitu untuk memberi grant agar user root anda dapat diakses oleh host lain.
  4. Memanggil nama database yang akan digunakan untuk database link ini
    use student;
    Pada kasus ini, kita menggunakan database student.
  5. Kemudian mendaftarkan IP dan user yang dibolehkan untuk mengakses data
    grant all on student.* to 'studentuser'@'172.16.16.9' identified by 'studentpass';
    
    Untuk code di atas, yang diperbolehkan untuk mengakses database student ada IP 172.16.16.9 dengan username=studentuser dan password=studentpass
    Username dan password tersebut kita deklarasikan sendiri.
    Perintah di atas itu memberikan privileges untuk semua akses insert, update, delete sehingga host server (172.16.16.9) bisa mengakses seluruh tabel yang ada di database student (student.*).
  6. Jalankan perintah berikut untuk mengijinkan privileges tersebut di atas
    flush privileges;
    


KONFIGURASI ODBC DRIVER PADA HOST SERVER/MASTER (ORACLE)
Setelah host MySQL selesai dikonfigurasikan, sekarang saatnya melakukan konfigurasi pada host Oracle. Untuk konfigurasi koneksi ke MySQL, perlu menggunakan MySQL ODBC Driver. Secara default, windows tidak menyediakan ODBC Driver untuk MySQL, sehingga harus diinstal terlebih dahulu. Silahkan download MySQL ODBC Driver.
  1. Jalankan ODBC Driver (Start -> Control Panel -> Administrative Tool -> Pilih Data Sources ODBC).
  2. Setelah menampilkan jendela ODBC Data Souce Administrator, pilih tab System DSN
  3. Buatlah sebuah data source baru dengan meng-klik tombol Add, kemudian pilihlah MySQL ODBC 5.1 Driver. Kemudian klik tomboh Finish. 
  4. Isi field seperti berikut:
    • Data Source Name = mysqlstudent.
    • Description = MySQL ODBC 5.1 Driver
    • Server = 172.16.16.3 (IP ini merupakan IP dari host yang menggunakan MySQL)
    • User = studentuser (username yang telah didaftarkan oleh host MySQL tersebut)
    • Password = studentpass (password yang telah didaftarkan oleh host MySQL tersebut)
    • Database = pilih database student  
    • Kemudian tes koneksi dengan menekan tombol Test. Jika sukses, silahkan lanjutkan ke langkah selanjutnya.




KONFIGURASI NET SERVICE UNTUK KONEKSI ANTARA ORACLE DAN MYSQL
  1. Buatlah script menggunakan notepad untuk koneksi datasource yang telah dibuat di atas menggunakan script berikut:
    # HS init parameters
    # ODBC data source name
    
     HS_FDS_CONNECT_INFO = mysqlstudent
     HS_FDS_TRACE_LEVEL = 0
    #---------------------------------------------
    mysqlstudent adalah nama Data Source. Kemudian simpan dengan nama initmysqlstudent.ora dan kemudian letakkan pada alamat directory C:\oracle\product\10.2.0\db_1\hs\admin
  2. Pada alamat direktori C:\oracle\product\10.2.0\db_1\NETWORK\ADMIN edit file listener.ora menggunakan notepad. Akan tetapi alangkah baiknya jika file listener.ora anda backup terlebih dahulu untuk mewaspadai jika terjadi error. Kemudian tambahkan script pada SID_NAME = mysqlstudent pada listener.ora. Gunakan script berikut:
    (SID_DESC=
     (SID_NAME=mysqlstudent)
     (ORACLE_HOME = C:\oracle\product\10.2.0\db_1)
     (PROGRAM = hsodbc)
    )
    Lihat gambar berikut untuk penempatan syntax di atas:
  3. Pada service, restart TNSListener (Run -> ketikkan services.msc -> restart service OracleOraDb10g_home1TNSListener).
  4. Pada alamat directory C:\oracle\product\10.2.0\db_1\NETWORK\ADMIN, edit script pada file tnsname.ora menggunakan notepad editor, tetapi alangkah baiknya jika file tersebut di backup terlebih dahulu. Tambahkan script berikut:
    MYSQLSTUDENT=
      (DESCRIPTION =
        (ADDRESS_LIST =
          (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
        )
        (CONNECT_DATA =
          (SID = mysqlstudent)
        )
        (HS = OK)
      )
  5. Untuk cek tnsname yang telah ditambahkan tersebut, jalankan Net Manager kemudian pilih Oracle Net Configuration -> Local -> Service Naming. Silahkan apakah nama MYSQLSTUDENT telah muncul di Net Manager tersebut? jika sudah ada, silahkan melanjutkan ke langkah selanjutnya, apabila belum muncul, ulangi langkah di atas.


MEMBUAT DATABASE LINK PADA ORACLE UNTUK MEMANGGIL DATA DI MYSQL
  1. Untuk mencoba koneksi mysqlstudent, buatlah sebuah database link dengan nama mysql_student. Gunakan perintah berikut:
    create database link mysql_student using 'mysqlstudent'
  2. Silahkan lihat data yang ada di MySQL menggunakan query berikut:
    select * from student@mysql_student
  3. Untuk insert data ke MySQL, gunakan query berikut:
    insert into student@mysql_student values ('07560242', 'Mudafiq Riyan P', 'Malang')
  4. Jika sudah berhasil, maka kitapun bisa melakukan insert, update, delete, and view data yang ada di MySQL.

15 komentar:

  1. Mas, saya mau tanya :
    saya mentok di langkah

    create database link mysql_student using 'mysqlstudent'

    errornya : you have an error in your sql syntax

    terus saya juga cari2 sumber lain, katanya di Mysql itu emang ga ada db link (nah lohhh)
    itu gimana Mas?

    tks

    BalasHapus
  2. @kalambe: create database link itu di oraclenya, bukan di mysql, mysql hanya sebagai penyedia database aja, oracle yang meremote databasenya

    BalasHapus
  3. ow, iya2 udah bisa :D
    makasih Mas :)

    BalasHapus
  4. Oiya, saya mau tanya lagi
    membuat koneksi di ORA saya sudah bisa,
    tapi pada saat
    select * from student@mysql_student
    yg tidak bisa. saya nyobainnya di ORA. saya juga sudah buat table student di database student. tapi teteup ga bisa

    Mohon pencerahannya :)

    BalasHapus
  5. table student itu dibuat di mysql, kemudian diakses di oracle... perhatikan service OraListenernya jalan apa gak? seringkali pada service itu mati saat melakukan perubahan di file .ora.

    BalasHapus
  6. Punyaku error seperti ini
    *********************************************************************
    Link : "MYPPSDM.REGRESS.RDBMS.DEV.US.ORACLE.COM"
    Error : ORA-28545: error diagnosed by Net8 when connecting to an agent
    Unable to retrieve text of NETWORK/NCR message 65535
    ORA-02063: preceding 2 lines from MYPPSDM

    MYPPSDM = nama database link ku

    Ada solusi????

    BalasHapus
  7. Error 28545 itu kesalahan settingan..
    mungkin ini bisa membantu
    https://forums.oracle.com/forums/thread.jspa?threadID=1102303

    BalasHapus
  8. tanya.
    bagaimana kalau keadaannya dibalik, dari mysql bisa view, insert, update data yang ada di oracle? caranya gimana?

    BalasHapus
  9. izin di catat, dan di post ulang di blog saya.,., :)
    sangat membantu.,.
    terimakasih.,., :)

    BalasHapus
  10. [SQL] select * from dual@dblink
    [Err] ORA-28513: internal error in heterogeneous remote agent
    ORA-02063: preceding line from DBLINK

    saya errornya disana gan...kenappa yaa

    BalasHapus
  11. Di oracle sudah berhasil menampilkan data,
    saya select * from tb_nama@linkmysql tapi kenapa muncul data hanya 1 row saja ya?
    Padahal data di mysql nya bayak,
    Perlu di setting apalagi ya mas?

    Tks

    BalasHapus
  12. maaf untuk buka net managernya dimana ya kok saya cari tidak ada

    BalasHapus
  13. selamat siang mas,

    mas saya mau tanya boleh. kan diatas menerangkan bahwa database oracle sebagai masternya dan mysql sebagai clientnya. jika dibalik oracle sebagai client dan mysql sebagai master bisa tidak ya...

    BalasHapus