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 di
setting 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.