やったことは、
Data Pump は parallel パラメータで並列度を指定できるので、CPU数やコア数が多いマシンではスピードアップが期待できるのではないかと思う。
exp/imp では、別スキーマに import するときは、「fromuser=orcl touser=orcl_temp」のように指定するけど、Data Pump の場合は、「remap_schema=orcl:orcl_temp」のように指定するのは新鮮だった。
環境
$ cat /etc/issue CentOS release 5.3 (Final) Kernel \r on an \m $ sqlplus / as sysdba SQL>select * from v$version; BANNER ---------------------------------------------------------------- Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Prod PL/SQL Release 10.2.0.4.0 - Production CORE 10.2.0.4.0 Production TNS for Linux: Version 10.2.0.4.0 - Production NLSRTL Version 10.2.0.4.0 - Production
手順
- SQL*Plus でログインする。
$ sqlplus / as sysdba
- DIRECTORY OBJECT の作?ときは、「fromuser=orcl touser=orcl_temp」のように指定するけど、Data Pump の場合は、「remap_schema=orcl:orcl_temp」のように指定するのは新鮮だった。
環境
$ cat /etc/issue CentOS release 5.3 (Final) Kernel \r on an \m $ sqlplus / as sysdba SQL>select * from v$version; BANNER ---------------------------------------------------------------- Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Prod PL/SQL Release 10.2.0.4.0 - Production CORE 10.2.0.4.0 Production TNS for Linux: Version 10.2.0.4.0 - Production NLSRTL Version 10.2.0.4.0 - Production
手順
- SQL*Plus でログインする。
$ sqlplus / as sysdba
- DIRECTORY OBJECT の作成
SQL> create or replace directory pump_dir as '/opt/app/oracle/admin/orcl/dpdump';
- 権限の付与
SQL> grant read, write on directory pump_dir to system;
- スキーマを export する。
$ cd /opt/app/oracle/admin/orcl/dpdump $ nohup expdp system/manager directory=pump_dir dumpfile=exp_pump_orcl_`date '+%Y%m%d'`.dmp schemas=orcl parallel=2 > exp_pump_orcl_`date '+%Y%m%d'`.log 2>&1 & [1] 2755
- プロセスの優先度を上げる。
$ su - # ps -ef # sudo renice -20 -p 2755 # sudo renice -20 -p 2758 # exit
$ su - orcl $ cd sql $ wget http://github.com/yoheia/yoheia/raw/master/oracle/sql/create_user_script.sql $ sqlplus -s / as sysdba @create_user_script.sql specify user name which you want to create Enter value for user_name: orcl specify user's passord which you want to create Enter value for user_passwd: orcl $ perl -ple 's/(\s)+orcl([;|\s]+)/$1orcl_temp$2/g;s/(\s)+orcl([;|\s]+)/$1orcl_temp$2/g;' create_user_orcl.sql > create_user_orcl_temp.sql $ vi create_user_orcl_temp.sql DROP USER orcl_temp CASCADE;
- orcl_temp ユーザを作成する。
$ sqlplus -s / as sysdba @create_user_orcl_temp.sql exit
- orcl_temp スキーマに import する。
$ cd /opt/app/oracle/admin/orcl/dpdump $ nohup impdp system/manager directory=pump_dir dumpfile=exp_pump_orcl_20100224.dmp remap_schema=orcl:orcl_temp parallel=2 > imp_pump_orcl_`date '+%Y%m%d'`.log 2>&1 &
- プロセスの優先度を上げる。
$ su - # ps -ef # renice -20 -p 3256 # renice -20 -p 3258
参考
追記(2010/04/08):
スキーマ単位でのインポートで、従来のimportだと12時間たっても終わらなかったけど、Data Pump 使ったら 1 時間で終わった。Data Pump 爆速!
追記(2010/04/20):
- 使えるオプション
- EXCLUDE
- REMAP_TABLESPACE
- TABLE_EXISTS_ACTION
追記(2011/05/19):
ディレクトリ・オブジェクトの名前とパスを調べるSQL
SQL> col directory_name for a20 SQL> col directory_path for a80 SQL> SELECT directory_name, directory_path FROM dba_directories;