データ・ポンプは、クライアント・ベースではなく、サーバー・ベースであるため、ダンプ・ファイル、ログ・ファイルおよびSQLファイルには、サーバー・ベースのディレクトリ・パスを基準としてアクセスします。データ・ポンプでは、ディレクトリ・パスをディレクトリ・オブジェクトとして指定する必要があります。ディレクトリ・オブジェクトは、ファイル・システムのディレクトリ・パスに名前をマップします。DBAは、承認されたユーザーのみが、ディレクトリ・パスに関連付けられたディレクトリ・オブジェクトにアクセスできるようにする必要があります。
次の例は、/usr/apps/datafilesにあるディレクトリにマップされるdpump_dir1というディレクトリ・オブジェクトを作成するSQL文を示しています。
SQL> CREATE DIRECTORY dpump_dir1 AS '/usr/apps/datafiles';
ディレクトリ・オブジェクトは、データのセキュリティおよび整合性を確保するために必要です。次に例を示します。
入力ファイルのディレクトリ・パスの位置を指定する権限を付与された場合、ユーザーは、サーバーにはアクセス権があるが、ユーザー自身はアクセス権を持たないデータの読取りを実行できる場合があります。
出力ファイルのディレクトリ・パスの位置を指定する権限を付与された場合、通常、ユーザーが削除権限を持たないファイルが、サーバーによって上書きされる場合があります。
UNIXおよびWindowsオペレーティング・システムの場合、デフォルトのディレクトリ・オブジェクトDATA_PUMP_DIRは、データベースが作成されるとき、またはデータベース・ディレクトリがアップグレードされるたびに作成されます。デフォルトでは、特権ユーザーのみが使用できます。(ユーザーSYSTEMは、デフォルトでDATA_PUMP_DIRディレクトリへの読取りおよび書込みアクセス権を持っています。)
権限のないユーザーの場合、データ・ポンプ・エクスポートまたはデータ・ポンプ・インポートを実行できるようにするには、データベース管理者(DBA)またはCREATE ANY DIRECTORY権限を持つユーザーがディレクトリ・オブジェクトを作成する必要があります。
ディレクトリの作成後、ディレクトリ・オブジェクトを作成するユーザーは、そのディレクトリに対するREAD権限またはWRITE権限を他のユーザーに付与する必要があります。たとえば、dpump_dir1で指定されたディレクトリのユーザーhrのかわりに、Oracle Databaseがファイルを読取りまたは書込みできるようにするには、DBAが次のコマンドを実行する必要があります。
SQL> GRANT READ, WRITE ON DIRECTORY dpump_dir1 TO hr;
ディレクトリ・オブジェクトに対するREAD権限またはWRITE権限は、Oracle Databaseによって対応するディレクトリにあるファイルの読取りまたは書込みのみを実行できることを意味します。適切なオペレーティング・システム権限がないかぎり、Oracle Databaseの外部にあるファイルには直接アクセスできません。同様に、Oracle Databaseには、ディレクトリのファイルに対して読取りおよび書込みを行うオペレーティング・システム権限が必要です。
データ・ポンプ・エクスポートおよびインポート・ユーティリティでは、次の順序でファイルの位置が判断されます。
ディレクトリ・オブジェクトがファイル指定の一部として指定されている場合は、そのディレクトリ・オブジェクトで指定された位置が使用されます。(ディレクトリ・オブジェクトとファイル名は、コロンで区切る必要があります。)
ディレクトリ・オブジェクトがファイル指定の一部として指定されていない場合は、DIRECTORYパラメータで指定されたディレクトリ・オブジェクトが使用されます。
ディレクトリ・オブジェクトがファイル指定の一部として指定されていない場合、およびDIRECTORYパラメータでディレクトリ・オブジェクトが指定されていない場合は、環境変数DATA_PUMP_DIRの値が使用されます。この環境変数は、データ・ポンプ・エクスポートおよびインポート・ユーティリティが実行されるクライアント・システムで、オペレーティング・システム・コマンドを使用して定義されます。このクライアント・ベースの環境変数には、DBAがサーバー・システムで最初に作成するサーバー・ベースのディレクトリ・オブジェクトの名前を割り当てる必要があります。たとえば、次のSQL文では、サーバー・システムにディレクトリ・オブジェクトが作成されます。このディレクトリ・オブジェクトの名前はDUMP_FILES1で、位置は '/usr/apps/dumpfiles1'です。
SQL> CREATE DIRECTORY DUMP_FILES1 AS '/usr/apps/dumpfiles1';
cshを使用しているUNIXベースのクライアント・システムのユーザーは、環境変数DATA_PUMP_DIRに、値DUMP_FILES1を割り当てることができます。コマンドラインでは、DIRECTORYパラメータは省略できます。ダンプ・ファイルemployees.dmpおよびログ・ファイル export.logは、'/usr/apps/dumpfiles1'に書き込まれます。
%setenv DATA_PUMP_DIR DUMP_FILES1 %expdp hr TABLES=employees DUMPFILE=employees.dmp
前述の3つの条件では、ディレクトリ・オブジェクトの位置を判断できない場合、特権ユーザーであれば、データ・ポンプはデフォルトのサーバー・ベースのディレクトリ・オブジェクトDATA_PUMP_DIRの値を試行します。このディレクトリ・オブジェクトは、データベースが作成されるとき、またはデータベース・ディレクトリがアップグレードされるたびに自動的に作成されます。DATA_PUMP_DIRのパス定義は、次のSQL問合せを使用して確認できます。
SQL> SELECT directory_name, directory_path FROM dba_directories 2 WHERE directory_name='DATA_PUMP_DIR';
特権ユーザーでない場合は、DATA_PUMP_DIRディレクトリ・オブジェクトへのアクセス権限が、DBAによって事前に付与されている必要があります。
デフォルトのDATA_PUMP_DIRディレクトリ・オブジェクトと、同じ名前のクライアント・ベースの環境変数とを混同しないでください。
Oracle RAC環境で操作を実行する場合は、次の考慮点に注意してください。
Oracle RAC構成でデータ・ポンプまたは外部表を使用するには、ディレクトリ・オブジェクトのパスがクラスタ・ファイル・システム上に存在するようにする必要があります。
ディレクトリ・オブジェクトは、データ・ポンプまたは外部表プロセス(あるいはその両方)を実行できるすべてのインスタンスから参照およびアクセス可能な共有物理記憶域を指している必要があります。
デフォルトのデータ・ポンプの動作では、Oracle RAC構成内の任意のインスタンスでワーカー・プロセスを実行できます。したがって、このようなOracle RACインスタンス上のワーカーは、ディレクトリ・オブジェクトによって定義された場所(共有ストレージ・メディアなど)に物理的にアクセスできる必要があります。この目的で使用できる共有ストレージが構成内にない場合にも並列処理が必要であれば、CLUSTER=NOパラメータを使用して、すべてのワーカー・プロセスを、データ・ポンプ・ジョブが開始されたインスタンスのみに置くことができます。
データ・ポンプは、パラレル問合せスレーブを使用して、データのロードおよびアンロードを実行する場合があります。Oracle RAC環境では、データ・ポンプはこれらのスレーブの実行場所を制御しません。また、データ・ポンプ・ジョブのCLUSTERおよびSERVICE_NAMEに指定された内容に関係なく、Oracle RAC内の他のインスタンスでスレーブが実行される場合があります。パラレル問合せ操作の制御は、データ・ポンプとは無関係です。パラレル問合せスレーブがデータ・ポンプ・ジョブの一部として他のインスタンスで実行される場合は、ダンプ・ファイル・セットの物理記憶域へのアクセスも必要になります。
Oracle Automatic Storage Management (Oracle ASM)を使用可能にしてデータ・ポンプ・エクスポート・ユーティリティまたはインポート・ユーティリティを使用する場合は、オペレーティング・システムのディレクトリ・パスではなくOracle ASMディスク・グループ名が使用されるように、ダンプ・ファイルで使用されるディレクトリ・オブジェクトを定義する必要があります。オペレーティング・システムのディレクトリ・パスを示す、別のディレクトリ・オブジェクトがログ・ファイルに使用される必要があります。たとえば、Oracle ASMダンプ・ファイルのディレクトリ・オブジェクトは、次のように作成します。
SQL> CREATE or REPLACE DIRECTORY dpump_dir as '+DATAFILES/';
ログ・ファイル用の個別のディレクトリ・オブジェクトは、次のように作成します。
SQL> CREATE or REPLACE DIRECTORY dpump_log as '/homedir/user1/';
ユーザーhrに、これらのディレクトリ・オブジェクトに対するアクセス権を付与する場合は、次に示すように、必要な権限を割り当てます。
SQL> GRANT READ, WRITE ON DIRECTORY dpump_dir TO hr; SQL> GRANT READ, WRITE ON DIRECTORY dpump_log TO hr;
この後に、次のデータ・ポンプ・エクスポート・ユーティリティのコマンドを使用します(パスワードを入力するように要求されます)。
> expdp hr DIRECTORY=dpump_dir DUMPFILE=hr.dmp LOGFILE=dpump_log:hr.log
注意:
データ・ポンプのダンプ・ファイルをASMとディスク・ディレクトリの間で単にコピーする場合には、DBMS_FILE_TRANSFER PL/SQLパッケージを使用できます。
関連項目:
エクスポートの「DIRECTORY」パラメータ
インポートの「DIRECTORY」パラメータ
CREATE DIRECTORYコマンドの詳細は、『Oracle Database SQL言語リファレンス』を参照してください
Oracle ASMの詳細は、『Oracle Automatic Storage Management管理者ガイド』を参照
DBMS_FILE_TRANSFER PL/SQLパッケージの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。