ablog

不器用で落着きのない技術者のメモ

Data Pump を使ってみた

やったことは、


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;
$ 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
$ 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;