Migrasi data dari MySQL ke Oracle dengan Perl

Pada kali ini kita coba buat script migrasi dengan perl dari database mysql ke oracle, namun ada beberapa langkah awal yang harus diperhatikan, terutama masalah konektivitas perl ke dua database tersebut. Dengan menggunakan perl ini maka kita tidak perlu lagi men-dump table mysql ke file text dan kemudian diload ke oracle via sqlloader atau melalui sqlplus.

Mulai oracle 10.2 oracle sudah menyertakan perl 5 secara default, bisa dicek pada $ORACLE_HOME/perl, malah konektor ke database oracle sudah tersedia.

Jika kita melihat standard OS perl yang disertakan dimana lokasi perl interpreternya sendiri ada di /usr/bin/perl, ada sedikit masalah sewaktu kita akan menginstall konektor-konektor database.

untuk itu hal-hal ini perlu dilakukan:

- install perl dari source

- environment variable PERL5LIB dan PATH set ke lokasi perl yg barusan diinstall

- install DBI

- install DBD::Oracle

- install DBD::mysql

 

contoh script:

#!/home/oracle/localperl/bin/perl

use DBI;

# MYSQL CONFIG VARIABLES
$host = “localhost”;
$database = “mydb”;
$user = “root”;
$pw = “passwd”;

# PERL CONNECT()
#$connect = mysql->connect($host, $database, $user, $pw);
$dbm = DBI->connect(”dbi:mysql:$database:$host”, $user, $pw);
$dbo = DBI->connect(”dbi:Oracle:”,”mydb”,”mydb”, { ora_session_mode =>
2 })||die “%ERROR opening DB: $DBI::errstr”;

$lim1=0;
for($i = 2000; $i < 29827026; ) {
$lim2=$i;
$str_src = qq{select timestamp,…
from audit_table order by timestamp limit $lim1,$lim2};
$out1 = $dbm->prepare($str_src);
$out1->execute;

$lim1=$lim2+1;

       while(my($timestamp,…)=$out1->fetchrow_array) {

       $ins_ora1 = qq{insert into mydb.AUDIT_TABLE(TIMESTAMP…)
VALUES(to_date(’$timestamp’,'yyyy-mm-dd hh24:mi:ss’),….)};
       $out2 = $dbo->prepare($ins_ora1);
       $out2->execute;

       }

$ins_ora4 = “commit”;
$out3 = $dbo->prepare($ins_ora4);
$out3->execute;

$i=$i+2000;
}

undef $dbm;
undef $dbo;

 

set environment variable sebelum mengeksekusi script tsb:

export PERL5LIB=/home/oracle/localperl/lib:/home/oracle/localperl/lib/site_perl/5.10.0/i86pc-solaris:/home/oracle/localperl/lib/site_perl/5.10.0

export PATH=/home/oracle/localperl/bin:$PATH

export LD_LIBRARY_PATH=/apps/oracle/product/10.2/lib32:/apps/oracle/product/10.2/lib:/opt/mysql/mysql32/lib:/opt/mysql/mysql/lib

export ORACLE_HOME=ORACLE_HOME=/apps/oracle/product/10.2

 

salam,

oracle@dbs247.com

mysql@dbs247.com


About this entry