Kamis, 18 September 2014

Handover II : Export Import menggunakan EXPDP

Hari kedua gw bersama sang mentor, Nandar, gw diajarin untuk melakukan migrasi database dari satu server ke server lainnya menggunakan EXPDP.

Expdp atau dikenal dengan Export Data Pump adalah salah satu utilitas dari oracle database untuk melakukan export database untuk kebutuhan migrasi dari satu database ke database lainnya (masih dalam platform oracle). Fitur serupa adalah EXP yaitu Export Utility Wizard. Serupa tapi tak sama. Expdp jauh lebih powerfull dari pada Exp sehingga menjadi favorit saya tiap kali harus migrasi data dari satu database ke database yang lainya.

Jika Expdp adalah utilitas untuk export, maka oracle menyediakan Impdp. Fitur Impdp digunakan untuk melakukan import data dari dump file (*.dmp) yang dihasilakan dari Expdp. Artinya, kita tidak bisa menggunakan impdp untuk melakukan import data dari dump file yang dihasilkan oleh Exp dan begitu juga sebaliknya.

Berikut adalah prerequisite untuk dapat memanfaatkan utilitas ini .

1. Jika menggunakan utilitas ini menggunakan user selain user sys dan system, pastikan user tersebut sudah mendapatkan grant untuk menggunakan sys privilege Export Full Database untuk Expdp dan Import Full Database untuk Impdp.
2. Jika menggunakan utilitas ini menggunakan user selain user sys dan system, pastikan user tersebut sudah mendapatkan privilege read dan write terhadap directory DATA_PUMP_DIR atau directory lain yang digunakan selama memanfaatkan utilitas Expdp/Impdp. Jika tidak yakin apakah user tersebut mendapatkan akses read, dan write terhadap directory tersebut,  gunakan script berikut untuk grant akses read dan write terhadap sebuah directory.

grant read,write on directory DATA_PUMP_DIR to myuser
 Gunakan script berikut untuk melihat directory beserta physical path yang ada pada database tersebut :

select * from dba_directories;

3. Pastikan ORACLE_SID, ORACLE_BASE, ORACLE_HOME sudah disetting dengan benar di environment user OS yang login.
4. Pastikan $ORACLE_HOME/bin sudah terdafter dalam variable Path

 Contoh paling sederhana penggunaan Expdp/Impdp :

expdp <username>/<password> schemas=<schemaname> directory=<directoryname> dumpfile=<dumpfilename> logfile=<logfilename>

expdp blp/blp schemas=blp directory=data_pump_dir dumpfile=blp.dmp logfile=expdp_blp.log
impdp <username>/<password> schemas=<schemaname> directory=<directoryname> dumpfile=<dumpfilename> logfile=<logfilename>
 impdp blp/blp schemas=blp directory=data_pump_dir dumpfile=blp.dmp logfile=impdp_blp.log
Script diatas akan melakukan export schema blp dalam bentuk dumpfile yang disimpan di directory data_pump_dir. Sebelum melakukan eksekusi script tersebut, pastikan tidak ada file dengan nama yang sama pada physical path directory tersebut. Jika tidak, maka script tersebut akan gagal. Value pada parameter schemas bisa lebih dari satu, setiap schema yang ingin di export dipisahkan menggunakan koma ','.

Berikut adalah contoh melakukan export hanya pada salah satu atau lebih table.

expdp <username>/<password> tables=<tablename> directory=<directoryname> dumpfile=<dumpfilename> logfile=<logfilename>
expdp blp/blp tables=account directory=data_pump_dir dumpfile=blp.dmp logfile=expdp_blp.log
impdp <username>/<password> schemas=<tablename> directory=<directoryname> dumpfile=<dumpfilename> logfile=<logfilename>
 impdp blp/blp schemas=account directory=data_pump_dir dumpfile=blp.dmp logfile=impdp_blp.log
 Skrip diatas akan melakukan export hanya pada table yang disebutkan saya pada parameter tables. Value tersebut dapat lebih dari satu tables, dan pisahkan menggunakan koma ','.

Lalu bagaimana jika kita ingin melakukan export hanya pada table table tertentu saja ? kita bisa menambahkan parameter include. Jika kita ingin melakukan pengecualian pada proses export kita bisa menggunakan parameter exclude. Kedua parameter tersebut berlaku juga untuk proses import menggunakan Impdp. Berikut adalah contoh penggunaan kedua parameter tersebut.

expdp blp schemas=blp dumpfile=blp.dmp logfile=impdp_blp.log directory=data_pump_dir  include=TABLE:\"IN \(\'EFT_POS\',\'POS_MESSAGE\'\)\"
impdp blp schemas=blp dumpfile=blp.dmp logfile=impdp_blp.log directory=data_pump_dir  exclude=TABLE:\"IN \(\'EFT_POS\'\)\"
Pada contoh diatas, saya melakukan export terhadap  2 table EFT_POS dan POS_MESSAGE menggunakan parameter include. Dumpfile yang terbentuk kemudian di import, namun hanya table POS_MESSAGE, menggunakan parameter exclude. Parameter include dan exclude ini tidak terbatas pada filter untuk table, para meter tersebut juga berlaku untuk object lain seperti prosedur, trigger, index.

Kasus lain adalah bagaimana jika kita ingin melakukan export dari schema blp, dan kemudian akan di import ke schema lain bernama blp2 ? kasus seperti ini kita bisa lakukan dengan menambahkan parameter remap_schema=schema_lama:schema_baru.  Pastikan schema yang baru tersebut benar benar ada pada database tersebut.

Setiap object di dalam database yang menyimpan data yaitu table dan index memerlukan tablespace untuk menyimpan data tersebut secara logical. Namun bagaimana jika export schema blp yang kita lakukan dari database A menggunakan tablespace tblspc_a, dan akan kita import ke database B yang memiliki tablespace tblspc_b. Ada dua opsi dalam melakukan import untuk kasus seperti ini, yaitu membuat tablespace tblspc_a di database B atau menambahkan parameter remap_tablespace pada script import yang kita gunakan dengan format remap_tablespace=tablespace_lama:tablespacebaru,tablespace_lama:tablespace_baru. Koma kita gunakan untuk memisahkan jika kita perlu melakukan remap terhadap lebih dari satu tablespace.

Salah satu kasus yang pernah saya alami juga adalah harus melakukan migrasi data dari oracle 11g dan akan diimport kedalam database oracle 10g. Dalam kasus seperti ini, kita harus menambahkan parameter version pada script export kita dengan format version=10.2.0 dan akan dapat digunakan untuk import dengan format seperti biasa.

sekian dulu catatan saya tentang menggunakan expdp ini, kalo ada yang ingin di tanyakan monggo, atau saran untuk ditambahkan, silahkan tuliskan di komentar dan akan saya update halaman ini, atau kalo ada koreksi juga sangat diperlukan.












Tidak ada komentar:

Posting Komentar