2013年10月26日土曜日

OracleDBバックアップ用EXPDPバッチ作成のコツ

EXPDPは本来DBの引っ越しなんかで使うコマンドらしいですが、
お手軽データバックアップ方法としてや、断片化対策としても用いられています。

「Data Pump(expdp/impdp)の使い方~エクスポート/インポート、データ移動、論理バックアップ」
https://blogs.oracle.com/oracle4engineer/entry/data_pumpexpdpimpdp

「Oracleにおける断片化の種類と解消方法~表領域、セグメント、エクステント、ブロック、テーブル、索引」
https://blogs.oracle.com/oracle4engineer/entry/column_table_fragmentation

ただ先代まで使われていたEXP/IMPコマンドとの互換はなく、
おまけにお作法が面倒くさい。

下記ページにコマンドの使い方は載っていたのですが、
バッチを組むには少し厳しい情報量だったので少し補足しますよ!

「Oracleでexpdp/impdpを使ってみる」
http://dbtuning.seesaa.net/article/142143213.html

1.下ごしらえ

コマンドプロンプトよりSQLPLUSに入って、以下の設定を行います。
EXPファイルを吐き出す場所を予めOracleさんに認識させる必要があります。

あと、当サイトオリジナル要素として、
ストリームプールの明示指定をおススメします!
たまにOracleさんがエクスポートに使うメモリ領域確保に失敗するので。
…結構ホラーですよ。バックアップが取れてなくて、ある日システムが壊れたら。

  sqlplus STUDY/STUDY
  set linesize 2000

  --ユーザSTUDYの権限を確認(DBAあればよし)
  SELECT * FROM session_roles;

  --エクスポートファイルを吐き出す場所を指定
  CREATE DIRECTORY DumpDir as 'C:\★EXPファイル出力先フォルダ指定★';
  SELECT * FROM DBA_DIRECTORIES;

  --稀にEXPDPに用いるメモリ領域確保失敗するエラーを回避
  --下記コマンドで失敗したら、scope=spfileに変えてDB再起動必要
  alter system set streams_pool_size=48M scope=both;

  exit

2.エクスポート

バッチを意識して、エクスポートファイルとログは日付フォルダに移動。
エクスポートする場所にすでに同名のファイルがあると失敗します!!

  rem エクスポート先のフォルダを指定
  cd C:\★EXPファイル出力先フォルダ指定★

  rem 実行時の日時のフォルダを作成
  set DIRNAME=%date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%_expdp
  mkdir %DIRNAME%

  rem エクスポート用コマンド
  expdp system/manager dumpfile=DumpDir:expdp.dmp logfile= DumpDir:expdp.log schemas=STUDY
  rem ダンプファイルを移動
  move expdp.dmp %DIRNAME%
  move expdp.log %DIRNAME%

3.インポート

こちらは非バッチかと思いますが、備えは必要なので。
ポイントは「table_exists_action=REPLACE」です。
これのおかげで、1度テーブルなどのオブジェクトをDROPしなくても、
自動で上書きしてくれます。これは昔のEXPコマンドとは違うそうな。

  rem インポート元のフォルダを指定
  cd C:\★EXPファイル読み込み元フォルダ指定★

  rem インポート用コマンド
  impdp system/manager dumpfile=DumpDir:expdp.dmp logfile= DumpDir:impdp.log schemas=STUDY table_exists_action=REPLACE

この手の情報は、大方は大手ブログに書かれているのに、
何か困った時の情報となると途端に不足しますよね。

そのために保守サポートサービスに加入するんでしょうが、
社会全体でつまらん仕事を減らしていくためには、ナレッジ共有が大切なんでしょうね。

困ったときはお互い様ということで、
1人でも多くの技術者さんの情報発信をお待ちしてますよ!

0 件のコメント:

コメントを投稿