DataPump(expdp/impdp)でバックアップ/リストアの方法と事前準備

Oracle Databaseの論理バックアップ・リストアツール「DataPump」の使い方について紹介します。

Datapumpを利用するには準備が必要で使う時にも少々癖がありますが、この記事では丁寧に使い方と事前準備手順を紹介します。

またDatapumpは並列実行・暗号化・圧縮など様々な機能があり、使いこなすと強力なバックアップツールになります。

今後オススメの使い方をどんどん紹介したいと思います。

なおDatapumpはexpdpとimpdpの2つのツールの総称なので間違わないようにしましょう。

この記事の目的

  • Datapump(expdp/impdp)を行うための準備
  • Datapump(expdp/impdp)でバックアッ/リストアが出来るようになる
  • Datapumpでよく使うオプションとその使い所を紹介
目次

Datapump(expdp/impdp)を行うための準備作業

まずはDatapumpを使うための準備作業ですが、大きく3つの設定が必要です。

  1. ディレクトリオブジェクトの作成
  2. ディレクトリオプジェクトへの読み書き権限付与
  3. Datapumpの実行権限付与

なお設定手順時のユーザはSYSユーザで実施します。 最初はディレクトリオブジェクトの作成です。

create or replace directory <ディレクトリオブジェクト名> as '<対象ディレクトリパス>';

次に先ほど作成したディレクトリオブジェクトへ読み書き権限をDatapumpは実行ユーザへ付与します。

grant read, write on directory <ディレクトリオブジェクト名> to <ユーザ名 or ロール名>;

最後にDatapumpの実行権限の付与です。

この権限は非常に強い権限であるため権限を付与するユーザは限定してください。

grant DATAPUMP_EXP_FULL_DATABASE to <ユーザ名 or ロール名>;

grant DATAPUMP_IMP_FULL_DATABASE to <ユーザ名 or ロール名>;

エクスポートは「DATAPUMP_EXP_FULL_DATABASE」、

インポートは「DATAPUMP_IMP_FULL_DATABASE」権限をそれぞれ付与してください。

これでDatapumpに必要な設定は完了です。

expdpでダンプデータ(バックアップデータ)をエクスポート

expdpコマンドでダンプデータ(バックアップデータ)をエクスポートする手順を紹介します。

下が基本のコマンドになります。

expdp <ユーザ名>/<パスワード> directory=<ディレクトリオブジェクト名> dumpfile=<ダンプファイル名> logfile=<ログファイル名>

何をエクスポートしたか分からなくなってしまうので、出力先ファイル名ログファイル名は必ず指定しましょう。

ではここからエクスポート対象を指定したexpdpの使い方を紹介します。 – データベース全体

データベース全体をバックアップするには「full=y」オプションを使用します。

expdp <ユーザ名>/<パスワード> directory=<ディレクトリオブジェクト名> full=y

下がサンプルコマンドです。

expdp dpuser/oracle directory=DATAPUMPDIR \

dumpfile=FULL_ORCL.dmp \

logfile=FULL_ORCL.log \

full=y
  • スキーマ単位

スキーマ単位でバックアップするには「schemas=<スキーマ名>」オプションを使用します。

expdp <ユーザ名>/<パスワード> directory=<ディレクトリオブジェクト名> schemas=<スキーマ名>

下がサンプルコマンドになります。

expdp dpuser/oracle directory=DATAPUMPDIR \

dumpfile=ORCL_USER_DPUSER.dmp \

logfile=ORCL_USER_DPUSER.log \

schemas=dpuser
  • 表領域単位
expdp <ユーザ名>/<パスワード> directory=<ディレクトリオブジェクト名> tablespaces=<表領域名>

下がサンプルコマンドになります。

expdp dpuser/oracle directory=DATAPUMPDIR \

dumpfile=ORCL_TS_SYSTEM.dmp \

logfile=ORCL_TS_SYSTEM.log \

tablespaces=users
  • テーブル単位
expdp <ユーザ名>/<パスワード> directory=<ディレクトリオブジェクト名> tables=<テーブル名>

カンマ区切りでテーブルを複数指定して、1回で複数のテーブルをエクスポートすることは可能です。

下がサンプルコマンドになります。

expdp dpuser/oracle directory=DATAPUMPDIR \

dumpfile=ORCL_TAB_TEST001-TAB001002.dmp \

logfile=ORCL_TAB_TEST001-TAB001002.log \

tables=test001.tab001,test001.tab002

私の個人的な意見になりますが、最も利用するのは「テーブル単位」です。

理由は、Datapumpはアプリ担当がピンポイントでテーブルをバックアップするツールだからです。

データベース単位スキーマ単位表領域単位でバックアップするのはRMANを利用することをオススメします。

impdpでダンプデータ(バックアップデータ)をインポート

impdpコマンドでダンプデータ(バックアップデータ)をインポートする手順を紹介します。

impdp <ユーザ名>/<パスワード> directory=<ディレクトリオブジェクト名> dumpfile=<ダンプファイル名> logfile=<ログファイル名>

インポートが正常に終了したのか分からなくなってしまうので**、ログファイル名**は必ず指定しましょう。

ではここからはインポート対象を指定したimpdpの使い方を紹介します。

インポートの時は注意が必要です、

エクスポートした対象(スキーマ名・表領域名・テーブル名)インポートした対象が異なる場合は変換オプションが必要になります。

スキーマ名・表領域名・テーブル名が同じ時のインポート

  • データベース全体
impdp <ユーザ名>/<パスワード> directory=<ディレクトリオブジェクト名> full=y

下がサンプルコマンドになります。

impdp dpuser/oracle directory=DATAPUMPDIR \

dumpfile=FULL_ORCL.dmp \

logfile=FULL_ORCL.log \

full=y
  • スキーマ単位
impdp <ユーザ名>/<パスワード> directory=<ディレクトリオブジェクト名> schemas=<スキーマ名>

下がサンプルコマンドになります。

impdp dpuser/oracle directory=DATAPUMPDIR \

dumpfile=ORCL_USER_DPUSER.dmp \

logfile=ORCL_USER_DPUSER.log \

schemas=dpuser
  • 表領域単位
impdp <ユーザ名>/<パスワード> directory=<ディレクトリオブジェクト名> tablespaces=<表領域名>

下がサンプルコマンドになります。

impdp dpuser/oracle directory=DATAPUMPDIR \

dumpfile=ORCL_TS_USERS.dmp \

logfile=ORCL_TS_USERS.log \

tablespaces=users
  • テーブル単位
impdp <ユーザ名>/<パスワード> directory=<ディレクトリオブジェクト名> tables=<テーブル名>

カンマ区切りでテーブルを複数指定して、1回で複数のテーブルをインポートすることは可能です。

下がサンプルコマンドになります。

impdp dpuser/oracle directory=DATAPUMPDIR \

dumpfile=ORCL_TAB_TEST001-TAB001002.dmp \

logfile=ORCL_TAB_TEST001-TAB001002.log \

tables=test001.tab001,test001.tab002

スキーマ名・表領域名・テーブル名が異なる場合のインポート

ここからはスキーマ名・表領域名・テーブル名が異なる場合の紹介になります。 基本的には「remap_XXXXX」を利用して、コロンを使用して「<元の名前>:<対象の名前>」の形で指定します。

  • スキーマが異なる場合の変換方法
impdp <ユーザ名>/<パスワード> directory=<ディレクトリオブジェクト名> remap_schema=<元スキーマ名>:<対象スキーマ名>

下がサンプルコマンドになります。

impdp dpuser/oracle directory=DATAPUMPDIR \

dumpfile=ORCL_USER_DPUSER.dmp \

logfile=ORCL_USER_DPUSER.log \

remap_schema=dpuser:dpuser001
  • 表領域名が異なる場合の変換方法
impdp <ユーザ名>/<パスワード> directory=<ディレクトリオブジェクト名> remap_tablespace=<元の表領域名>:<対象の表領域名>

下がサンプルコマンドになります。

impdp dpuser/oracle directory=DATAPUMPDIR \

dumpfile=ORCL_TS_USERS.dmp \

logfile=ORCL_TS_USERS.log \

remap_tablespace=users:users001
  • テーブル名が異なる場合の変換方法
impdp <ユーザ名>/<パスワード> directory=<ディレクトリオブジェクト名> remap_table=<元のテーブル名>:<対象のテーブル名>

下がコマンドになります。複数のテーブルも指定する時は「カンマ」を使用して区切ってください。

impdp dpuser/oracle directory=DATAPUMPDIR \

dumpfile=ORCL_TAB_TEST001-TAB001002.dmp \

logfile=ORCL_TAB_TEST001-TAB001002.log \

remap_table=test001.tab001:tab101,test001.tab002:tab102

本記事のまとめ

– Datapump(expdp/impdp)を実行するために**ディレクトリオブジェクトの作成**と**権限の付与**が必要
– expdpでエクスポートする時は**テーブル単位**でバックアップを行う
– impdpでインポート対象を変更する時は**変換用のオプション**を付ける

Oracle Databaseをもっと勉強したい方は↓の記事もオススメです。

あわせて読みたい
OracleDBを勉強・理解する時のオススメ本を紹介 Oracle Databaseを勉強・理解する上でオススメの本を紹介していきます。 RDBMSやSQLを勉強するための本ではなく、Oracle Databaseの仕組みや利用・設計・運用などを製品...
よかったらシェアしてね!
  • URLをコピーしました!
目次