逆引きマニュアル: Oracle Data Pumpによるエクスポート

投稿日:

やりたいこと

Oracle Data Pumpエクスポートの使い方です。

前提条件

概要

CLIの場合

  1. NLS_LANGの設定
  2. expdpの実行

PL/SQLの場合

  1. ディレクトリ・オブジェクトの作成
  2. エクスポートの実行

手順(CLIの場合)

NLS_LANGの設定

以下のSQLで地域と言語を取得します。 最低でもcharsetだけ指定すれば動きますが・・・

SELECT PARAMETER, VALUE FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER IN ('NLS_TERRITORY', 'NLS_LANGUAGE', 'NLS_CHARACTERSET');

それから、NLS_LANGを適切に設定します。

charsetのみ指定する場合は export NLS_LANG=.JA16EUC のようにドット始まりで指定してください。 (以下の「注意」参照)

expdpコマンドの実行

例えば以下のようにします。

expdp <ユーザ>/<パスワード>@<接続文字列> directory=<ディレクトリ> dumpfile=<ファイル名> logfile=<ログファイル名> full=y
  • DIRECTORY: ディレクトリ・オブジェクトの名前
    • プロシージャの場合は大文字で指定する必要がありますが、こちらは小文字でもOKです。
  • DUMPFILE
  • FULL
  • LOGFILE
  • PARFILE: パラメータファイル

手順(PL/SQLの場合)

ディレクトリ・オブジェクトの作成

例えば /home/oracle に作成する場合は以下のようにします。

create or replace directory DATA_PUMP_DIR as '/home/oracle';

エクスポート

日付付きでエクスポートする例は以下になります。 versionをつけているのは、RDSへのインポートを考慮したため。 reusefileは不要かな・・・

-- データのエクスポート
DECLARE
    hdnl NUMBER;
    today VARCHAR2(8);
BEGIN
    hdnl := DBMS_DATAPUMP.open( operation => 'EXPORT', job_mode => 'FULL', job_name => null, version => '12.0.0');
    select to_char(sysdate, 'YYYYMMDD') into today from dual;

    DBMS_DATAPUMP.ADD_FILE( handle => hdnl, filename => 'exp_' || today || '.dmp', directory => 'DATA_PUMP_DIR', filetype => dbms_datapump.ku$_file_type_dump_file, reusefile => 1);
    DBMS_DATAPUMP.add_file( handle => hdnl, filename => 'exp_' || today || '.log', directory => 'DATA_PUMP_DIR', filetype => dbms_datapump.ku$_file_type_log_file, reusefile => 1);
    DBMS_DATAPUMP.start_job(hdnl);
END;

状況確認は以下のSQLで。 (From: DATAPUMP実行中のチェックSQLなど | RDBMS memo)

SELECT OPNAME, (SOFAR/TOTALWORK)*100 AS PCT
FROM V$SESSION_LONGOPS
WHERE OPNAME LIKE '%EXPORT%'

補足

DIRECTORYが未指定の場合、デフォルトの場所に作られます。

環境変数 DATA_PUMP_DIR が設定されている場合はそのパス、 未指定の場合は以下のSQLを特権ユーザで実行した値が使用されるようです。

SELECT directory_name, directory_path FROM dba_directories WHERE directory_name='DATA_PUMP_DIR';

マニュアル