(0)目次&概説
(1) expdp/impdpについて
(1-1) expdp/impdpの概要
(1-2) expdp/impdpの配置場所や転送方法
(2) エクスポート手順(expdp)
(2-1) (事前作業)ロールの付与
(2-1-1) ロールの付与状況チェック
(2-1-2) ロールの権限付与
(2-2) (事前作業)ディレクトリオブジェクトの作成
(2-2-1) ディレクトリオブジェクトの作成
(2-2-2) ディレクトリオブジェクトの作成確認
(2-2-3) ディレクトリオブジェクトの権限付与
(2-3) expdpの実行
(2-3-1) expdpの基本構文
(2-3-2) expdpのオプション指定例
(1) expdp/impdpについて
(1-1) expdp/impdpの概要
expdp/impdpはOracle Data Pumpのコンポーネントで、Oracle10gから利用可能な新しいエクスポートユーティリティです。前のバージョンの「exp」と比較して速度が向上した事と、暗号化などのオプション機能も加わっています。また11gからは古い「exp」の方は非推奨となっています。
またexpdp/impdpはサーバーベースであるため、例えクライアント端末から実行した場合でもダンプやログはサーバ側に生成されます(ディレクトリパスはディレクトリオブジェクトでの指定が必須)。
(1-2) expdp/impdpの配置場所や転送方法
Data Pumpを使って出力したファイルはバイナリ形式(2進数形式)のため、同じくData Pumpを使ってインポートする必要があります。またインポートの経路に関して、通常はダンプファイル(.dmp)をエクスポートして、それをターゲットDBにインポートしますが、Data Pumpをネットワークモードで使用するとエクスポート元⇒インポート先へ直接データを転送する事ができます。
配備パスについては、通常であればexpdp/impdpともに下記のディレクトリに配備されています。
$ORACLE_HOME/bin/
私の場合は以下に格納されていました。
/u01/app/oracle/product/11.2.0/dbhome_1/bin/
(2) エクスポート手順(expdp)
(2-1) (事前作業)ロールの付与
もしもDB全体のエクスポートや自分以外のスキーマやそのオブジェクトをエクスポートする場合には「EXP_FULL_DATABASE」ロールが必要となりますので、それらの操作を行いたい場合は下記の(2-1-1)~(2-1-2)を実施します。
(2-1-1) ロールの付与状況チェック
「DBA_SYS_PRIVS」テーブルを照会して「EXP_FULL_DATABASE」ロールが現在どのユーザーに付与されているかをチェックします。
SELECT * FROM DBA_ROLE_PRIVS WHERE GRANTED_ROLE LIKE '%EXP%';
(図211)DBA_ROLE_PRIVS
下記の例では「SYS」ユーザーと「DBA」ユーザーと「DATAPUMP_EXP_FULL_DATABASE」ロールに「EXP_FULL_DATABASE」ロールが付与されています。
ちなみにROLEを確認するテーブルは主に3種類あり、その中でも「EXP_FULL_DATABASE」は全てのGRANTEEとROLEの組み合わせが見れるテーブルです。
USER_ROLE_PRIVS | ユーザー×ロール | DBに接続しているユーザ自身に付与されたロールをチェックできます。 |
SESSION_ROLES | ユーザー×ロール | 現在のセッションで有効なロールをチェックできます(ロールはセッションごとに有効化・無効化できるため) |
DBA_ROLE_PRIVS | ユーザー×ロール | ユーザーに付与されたロール情報を全て保持しています(照会にはSELECT ANY TABLE権限が必要)。 |
また権限を確認するテーブルは主に2種類あり、システム権限とテーブル権限に関する表があります。
DBA_SYS_PRIVS | [ユーザー/ロール]×権限 | ユーザー/ロールに付与されたシステム権限の情報をチェックできます。GRANTEE列にはユーザー・ロールの両方が含まれます。 |
DBA_TAB_PRIVS | [ユーザー/ロール]×権限 | ユーザー/ロールに付与されたテーブルの権限の情報をチェックできます。GRANTEE列にはユーザー・ロールの両方が含まれます。 |
(図211)②DBA_TAB_PRIVS
(2-1-2) ロールの権限付与
上記チェックの結果、権限が付与されていなかった場合は次のGRANT文で付与します。
GRANT EXP_FULL_DATABASE TO [role_name/user_name];
(2-2) (事前作業)ディレクトリオブジェクトの作成
ディレクトリオブジェクトはOracleDBサーバのファイルシステム上のディレクトリを表すオブジェクトで、Data Pumpにおいてはディレクトリパスは「ディレクトリオブジェクト」を指定する必要があります。
(2-2-1) ディレクトリオブジェクトの作成
ディレクトリオブジェクトは以下のコマンドで作成します。
CREATE DIRECTORY [Directory Object Name] AS '[Directory Path]';
私の例では下記のように作成しています。
CREATE DIRECTORY DATA_PUMP_DIR AS '/u01/app/oracle/admin/orcl/dpdump/';
(2-2-2) ディレクトリオブジェクトの作成確認
作成したディレクトリオブジェクトの確認は以下のテーブルでチェックします。
SELECT * FROM ALL_DIRECTORIES;
(図222)
(2-2-3) ディレクトリオブジェクトの権限付与
ディレクトリオブジェクトの権限はOSのファイルシステムのディレクトリ権限とは異なり、Oracle側で別途管理しています。ですのでエクスポートを実行するユーザーには予め、上記で作成したディレクトリオブジェクトの権限を付与しておく必要があります。権限の付与は次のコマンドで行います。
GRANT READ ON DIRECTORY DATA_PUMP_DIR TO [user name]; GRANT WRITE ON DIRECTORY DATA_PUMP_DIR TO [user name];
(図223)
(2-3) expdpの実行
上記の事前準備が完了したら、いよいよexpdpコマンドでDBダンプ(≒バックアップ)を取得します。
(2-3-1) expdpの基本構文
expdpの基本構文は下記の通りです。実際は[option]の部分にて様々な条件(出力先、対象スキーマなど)を指定して実行することが多いです。
expdp [user]/[password]@[net service name] [option]
expdpの代表的なオプションには以下のような要素があります。
(表) expdpの主なオプション
directory=[dump output path] | エクスポートするダンプファイルのディレクトリをディレクトリオブジェクトを使って指定します。 |
dumpfile=[dump name].dmp | エクスポートするダンプファイルの名前を指定します。 |
schemas=[your schema] | スキーマ単位にインポートする際に指定します。 |
(2-3-2) expdpのオプション指定例
下記の例では「ダンプ出力先」(directory)と「ダンプファイル名」(dumpfile)と「対象スキーマ」(schemas)を指定した例です。「DATA_PUMP_DIR」が事前準備にて作成したディレクトリオブジェクトです。
$ cd $ORACLE_HOME/bin/ $ ./expdp directory=DATA_PUMP_DIR dumpfile=REBWEGUSR_20200322.dmp schemas=TENNISDBUSR;
(図232)expdpの実行
↓
(中略)
↓
Export: Release 11.2.0.1.0 - Production on Sun MON DD HH:MM:SS 2020 Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved. Username: RBWEGUSR Password: Connected to: Oracle Database 11g Release 11.2.0.1.0 - 64bit Production Starting "RBWEGUSR"."SYS_EXPORT_SCHEMA_01": RBWEGUSR/[password] directory=DATA_PUMP_DIR dumpfile=REBWEGUSR_20200322.dmp schemas=RBWEGUSR Estimate in progress using BLOCKS method... Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA Total estimation using BLOCKS method: 58.75 MB Processing object type SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA Processing object type SCHEMA_EXPORT/SEQUENCE/SEQUENCE Processing object type SCHEMA_EXPORT/TABLE/TABLE Processing object type SCHEMA_EXPORT/TABLE/INDEX/INDEX Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT Processing object type SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS Processing object type SCHEMA_EXPORT/TABLE/COMMENT Processing object type SCHEMA_EXPORT/PROCEDURE/PROCEDURE Processing object type SCHEMA_EXPORT/PROCEDURE/ALTER_PROCEDURE Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/REF_CONSTRAINT Processing object type SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS . . exported "RBWEGUSR"."EMP" 6.718 MB 138667 rows (中略) . . exported "RBWEGUSR"."EMP_TEST2" 6.718 MB 138667 rows Master table "RBWEGUSR"."SYS_EXPORT_SCHEMA_01" successfully loaded/unloaded ****************************************************************************** Dump file set for RBWEGUSR.SYS_EXPORT_SCHEMA_01 is: /u01/app/oracle/admin/orcl/dpdump/REBWEGUSR_20200322.dmp Job "RBWEGUSR"."SYS_EXPORT_SCHEMA_01" successfully completed at HH:MM:SS
(図232)expdpの出力結果
指定したディレクトリに「.dmp」形式で出力されます。
[…] ・Oracleデータベースのバックアップをexpdpで取得する方法 […]