« 新東名(第二東名)開通 | トップページ | 道路情報 県道708号線 »

2012年4月 8日 (日)

TIPS : OracleRACのexpdpで、考慮すべきオプション

今までシリアルで行っていたexpdpがデータ増大にしたがって

・長時間かかるようになってきた

・1つのファイルが大きくなりすぎてきた

 (ファイルシステム上の限界までは「まだまだ」だけど気持ち的に、、ね。)

ということで、「PARALLEL」句の出番です。

$ expdp USER_A/PASSWORD_A@SERVICE_A \
> dumpfile=DATA_PUMP_DIR:USER_A_%U.dmp \
> parallel=2 \
> logfile=DATA_PUMP_DIR:expdp_USER_A.log \
> schemas=USER_A
Export: Release 11.2.0.1.0 - Production

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

接続先: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
【~省略~】
. . "USER_A"."TABLE_A"                              1 KB       1行がエクスポートされました
ORA-31693: 表データ・オブジェクト"USER_A"."TABLE_B"は、ロード/アンロードに失敗し、エラーのため
スキップされます:
ORA-31617: ダンプ・ファイル"/data_pump_dir/USER_A_02.dmp"を書込みのためにオープンできません
ORA-19505: ファイル"/data_pump_dir/USER_A_02.dmp"の識別に失敗しました。
ORA-27037: ファイル・ステータスを取得できません。

なんで~?

パラレルの片方は動いているっぽいのに、もう一つが書き込めないとなっている・・・

ダンプファイル出力先が「USER_A_%U.dmp」1つじゃ駄目なのか?

と思い、変数もやめて、直接2つ記述してみた。

$ expdp USER_A/PASSWORD_A@SERVICE_A \
> dumpfile=DATA_PUMP_DIR:USER_A_1.dmp, DATA_PUMP_DIR:USER_A_2.dmp \
> parallel=2 \
> logfile=DATA_PUMP_DIR:expdp_USER_A.log \
> schemas=USER_A
Export: Release 11.2.0.1.0 - Production

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

接続先: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
【~省略~】
. . "USER_A"."TABLE_A"                              1 KB       1行がエクスポートされました
ORA-31693: 表データ・オブジェクト"USER_A"."TABLE_B"は、ロード/アンロードに失敗し、エラーのため
スキップされます:
ORA-31617: ダンプ・ファイル"/data_pump_dir/USER_A_2.dmp"を書込みのためにオープンできません
ORA-19505: ファイル"/data_pump_dir/USER_A_2.dmp"の識別に失敗しました。
ORA-27037: ファイル・ステータスを取得できません。

やっぱり片方はうまくいき、パラレルで走っているもう一方がうまくいかない。

片方・・・そういえばこのシステム、RACだった。何かあるのかも。

で、オプションを再度検索すると、「CLUSTER」句というオプションがあることが判明。

Oracle Real Application Clusters 環境におけるOracle Data Pump

結果として、以下の流れで失敗しているらしい。

1.「CLUSTER」がデフォルトの場合(=未指定の場合)、「Y」が指定される。

2.expdpを実行するサーバだけでを行っているつもりが、他のノードでも同時に実行される。

3.出力先が他のノード側に存在しない(マウントされていない)場合、出力に失敗する。

今回は、NASを出力先にしているわけでなく、SANのデバイスをマウント・出力先としていたため

他ノードではマウントされていない(っていうか同一デバイスを重複マウントするとファイルシステム壊れる)。。

で、エラー発生という流れ。

そこで、「cluster=n」を追加して実行

$ expdp USER_A/PASSWORD_A@SERVICE_A \
> dumpfile=DATA_PUMP_DIR:USER_A_%U.dmp \
> cluster=n parallel=2 \
> logfile=DATA_PUMP_DIR:expdp_USER_A.log \
> schemas=USER_A
Export: Release 11.2.0.1.0 - Production

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

接続先: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
【~省略~】
マスター表"USER_A"."SYS_EXPORT_SCHEMA_01"は正常にロード/アンロードされました
******************************************************************************
USER_A.SYS_EXPORT_SCHEMA_01に設定されたダンプ・ファイルは次のとおりです:
  /data_pump_dir/USER_A_01.dmp
  /data_pump_dir/USER_A_02.dmp
ジョブ"USER_A"."SYS_EXPORT_SCHEMA_01"が正常に完了しました

うまくいきました。

肝心の時間短縮ですが、

・ファイル出力先が1つ(ディスクI/Oが分散されていない)であること

・1つのノードだけで行っていること

の影響からか、処理時間が半分になる、とまでは行かなかった。

不思議なのは、手動で行った場合は、若干ながらも短縮される気がするが、

同一ジョブをジョブ管理ソフトを通じて実行すると、parallel句が有っても無くても、

処理時間が違わないように感じる。使用するCPU・コアが制限されてしまうのかな??

暇なときにでも、サポセンに聞いてみよう。

|

« 新東名(第二東名)開通 | トップページ | 道路情報 県道708号線 »

パソコン・インターネット」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/538346/54408279

この記事へのトラックバック一覧です: TIPS : OracleRACのexpdpで、考慮すべきオプション:

« 新東名(第二東名)開通 | トップページ | 道路情報 県道708号線 »