こんにちは!シミダイ(@shimidai2100)です。
Oracle Databaseの論理バックアップ・リストアツール「DataPump」の使い方について紹介します。
Datapumpを利用するには準備が必要で使う時にも少々癖がありますが、この記事では丁寧に使い方と事前準備手順を紹介します。
またDatapumpは並列実行・暗号化・圧縮など様々な機能があり、使いこなすと強力なバックアップツールになります。
今後オススメの使い方をどんどん紹介したいと思います。
なおDatapumpはexpdpとimpdpの2つのツールの総称なので間違わないようにしましょう。
この記事の目的
- Datapump(expdp/impdp)を行うための準備
- Datapump(expdp/impdp)でバックアッ/リストアが出来るようになる
- Datapumpでよく使うオプションとその使い所を紹介
Contents
Datapump(expdp/impdp)を行うための準備作業
まずはDatapumpを使うための準備作業ですが、大きく3つの設定が必要です。
- ディレクトリオブジェクトの作成
- ディレクトリオプジェクトへの読み書き権限付与
- Datapumpの実行権限付与
なお設定手順時のユーザはSYSユーザで実施します。
最初はディレクトリオブジェクトの作成です。
1 |
create or replace directory <ディレクトリオブジェクト名> as '<対象ディレクトリパス>'; |
次に先ほど作成したディレクトリオブジェクトへ読み書き権限をDatapumpは実行ユーザへ付与します。
1 |
grant read, write on directory <ディレクトリオブジェクト名> to <ユーザ名 or ロール名>; |
最後にDatapumpの実行権限の付与です。この権限は非常に強い権限であるため権限を付与するユーザは限定してください。
1 2 |
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コマンドでダンプデータ(バックアップデータ)をエクスポートする手順を紹介します。
下が基本のコマンドになります。
1 |
expdp <ユーザ名>/<パスワード> directory=<ディレクトリオブジェクト名> dumpfile=<ダンプファイル名> logfile=<ログファイル名> |
何をエクスポートしたか分からなくなってしまうので、出力先ファイル名とログファイル名は必ず指定しましょう。
ではここからエクスポート対象を指定したexpdpの使い方を紹介します。
- データベース全体
データベース全体をバックアップするには「full=y」オプションを使用します。
1 |
expdp <ユーザ名>/<パスワード> directory=<ディレクトリオブジェクト名> full=y |
下がサンプルコマンドです。
1 2 3 4 |
expdp dpuser/oracle directory=DATAPUMPDIR \ dumpfile=FULL_ORCL.dmp \ logfile=FULL_ORCL.log \ full=y |
- スキーマ単位
スキーマ単位でバックアップするには「schemas=<スキーマ名>」オプションを使用します。
1 |
expdp <ユーザ名>/<パスワード> directory=<ディレクトリオブジェクト名> schemas=<スキーマ名> |
下がサンプルコマンドになります。
1 2 3 4 |
expdp dpuser/oracle directory=DATAPUMPDIR \ dumpfile=ORCL_USER_DPUSER.dmp \ logfile=ORCL_USER_DPUSER.log \ schemas=dpuser |
- 表領域単位
1 |
expdp <ユーザ名>/<パスワード> directory=<ディレクトリオブジェクト名> tablespaces=<表領域名> |
下がサンプルコマンドになります。
1 2 3 4 |
expdp dpuser/oracle directory=DATAPUMPDIR \ dumpfile=ORCL_TS_SYSTEM.dmp \ logfile=ORCL_TS_SYSTEM.log \ tablespaces=users |
- テーブル単位
1 |
expdp <ユーザ名>/<パスワード> directory=<ディレクトリオブジェクト名> tables=<テーブル名> |
カンマ区切りでテーブルを複数指定して、1回で複数のテーブルをエクスポートすることは可能です。
下がサンプルコマンドになります。
1 2 3 4 |
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コマンドでダンプデータ(バックアップデータ)をインポートする手順を紹介します。
1 |
expdp <ユーザ名>/<パスワード> directory=<ディレクトリオブジェクト名> dumpfile=<ダンプファイル名> logfile=<ログファイル名> |
インポートが正常に終了したのか分からなくなってしまうので、ログファイル名は必ず指定しましょう。
ではここからはインポート対象を指定したimpdpの使い方を紹介します。
インポートの時は注意が必要です、エクスポートした対象(スキーマ名・表領域名・テーブル名)とインポートした対象が異なる場合は変換オプションが必要になります。
スキーマ名・表領域名・テーブル名が同じ時のインポート
- データベース全体
1 |
impdp <ユーザ名>/<パスワード> directory=<ディレクトリオブジェクト名> full=y |
下がサンプルコマンドになります。
1 2 3 4 |
impdp dpuser/oracle directory=DATAPUMPDIR \ dumpfile=FULL_ORCL.dmp \ logfile=FULL_ORCL.log \ full=y |
- スキーマ単位
1 |
impdp <ユーザ名>/<パスワード> directory=<ディレクトリオブジェクト名> schemas=<スキーマ名> |
下がサンプルコマンドになります。
1 2 3 4 |
impdp dpuser/oracle directory=DATAPUMPDIR \ dumpfile=ORCL_USER_DPUSER.dmp \ logfile=ORCL_USER_DPUSER.log \ schemas=dpuser |
- 表領域単位
1 |
impdp <ユーザ名>/<パスワード> directory=<ディレクトリオブジェクト名> tablespaces=<表領域名> |
下がサンプルコマンドになります。
1 2 3 4 |
impdp dpuser/oracle directory=DATAPUMPDIR \ dumpfile=ORCL_TS_USERS.dmp \ logfile=ORCL_TS_USERS.log \ tablespaces=users |
- テーブル単位
1 |
impdp <ユーザ名>/<パスワード> directory=<ディレクトリオブジェクト名> tables=<テーブル名> |
カンマ区切りでテーブルを複数指定して、1回で複数のテーブルをインポートすることは可能です。
下がサンプルコマンドになります。
1 2 3 4 |
impdp dpuser/oracle directory=DATAPUMPDIR \ dumpfile=ORCL_TAB_TEST001-TAB001002.dmp \ logfile=ORCL_TAB_TEST001-TAB001002.log \ tables=test001.tab001,test001.tab002 |
スキーマ名・表領域名・テーブル名が異なる場合のインポート
ここからはスキーマ名・表領域名・テーブル名が異なる場合の紹介になります。
基本的には「remap_XXXXX」を利用して、コロンを使用して「<元の名前>:<対象の名前>」の形で指定します。
- スキーマが異なる場合の変換方法
1 |
impdp <ユーザ名>/<パスワード> directory=<ディレクトリオブジェクト名> remap_schema=<元スキーマ名>:<対象スキーマ名> |
下がサンプルコマンドになります。
1 2 3 4 |
impdp dpuser/oracle directory=DATAPUMPDIR \ dumpfile=ORCL_USER_DPUSER.dmp \ logfile=ORCL_USER_DPUSER.log \ remap_schema=dpuser:dpuser001 |
- 表領域名が異なる場合の変換方法
1 |
impdp <ユーザ名>/<パスワード> directory=<ディレクトリオブジェクト名> remap_tablespace=<元の表領域名>:<対象の表領域名> |
下がサンプルコマンドになります。
1 2 3 4 |
impdp dpuser/oracle directory=DATAPUMPDIR \ dumpfile=ORCL_TS_USERS.dmp \ logfile=ORCL_TS_USERS.log \ remap_tablespace=users:users001 |
- テーブル名が異なる場合の変換方法
1 |
impdp <ユーザ名>/<パスワード> directory=<ディレクトリオブジェクト名> remap_table=<元のテーブル名>:<対象のテーブル名> |
下がコマンドになります。複数のテーブルも指定する時は「カンマ」を使用して区切ってください。
1 2 3 4 |
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を勉強・理解する時のオススメ本を紹介
こんにちは!シミダイ(@shimidai2100)です。 Oracle Databaseを勉強・理解する上でオススメの本を紹介していきます。 RDBMSやSQLを勉強するための本ではなく、Oracle ...