4.3 Oracle Data Pumpレガシー・モードでのファイルの場所の管理

オリジナルのバージョンはクライアントベース、データ・ポンプはサーバーベースであるため、オリジナルのエクスポートとインポート、およびOracle Data Pumpエクスポートとインポートは、ダンプ・ファイルとログ・ファイルの書込み/読取りを実行できる場所によって異なります。

オリジナルのエクスポートおよびインポートでは、FILEパラメータとLOGパラメータを使用して、それぞれダンプ・ファイル名とログ・ファイル名を指定しました。これらのファイル名は常にクライアント・システムに対してローカルなファイルを参照します。パス指定を含めることもできます。

Oracle Data Pumpエクスポートおよびインポートは、DUMPFILEパラメータとLOGFILEパラメータを使用して、それぞれダンプ・ファイル名とログ・ファイル名を指定しました。これらのファイル名は常にサーバー・システムに対してローカルなファイルを参照し、パス情報を含めることはできません。かわりに、ディレクトリ・オブジェクトを使用して、パス情報を間接的に指定します。ディレクトリ・オブジェクトによって定義されるパス値は、サーバーからアクセスできる必要があります。ディレクトリ・オブジェクトは、Oracle Data Pumpジョブ用にDIRECTORYパラメータを使用して指定されます。DUMPFILEパラメータおよびLOGFILEパラメータに渡されるファイル名にディレクトリ・オブジェクトを付加することもできます。Oracle Data Pumpを使用する特権ユーザーは、ディレクトリ・オブジェクトがコマンドラインで指定されていない場合に、デフォルト・ディレクトリ・オブジェクトを使用できます。このデフォルトのディレクトリ・オブジェクトDATA_PUMP_DIRは、インストール時に設定されます。

Oracle Data Pumpのレガシー・モードを有効にし、オリジナルのエクスポートのFILE=filespecパラメータまたはLOG=filespecパラメータ(あるいはその両方)をコマンドラインに指定すると、次の優先順位ルールを使用して、ファイルの場所が決まります。

  • コマンドラインにFILEパラメータとLOGパラメータの両方を指定した場合は、優先順位ルールがそれぞれのパラメータに個別に適用されます。

  • オリジナルのエクスポート/インポートとOracle Data Pumpエクスポート/インポートのパラメータが混在する場合は、それぞれに個別のルールが適用されます。

    たとえば、次のコマンドを指定したとします。

    expdp system FILE=/user/disk/foo.dmp LOGFILE=foo.log DIRECTORY=dpump_dir
    

    この場合、この項で説明したとおり、Oracle Data Pumpのレガシー・モードによるファイル管理ルールが、FILEパラメータに適用されます。ダンプ、ログおよびSQLファイルのデフォルトの場所に関する通常の(レガシー・モードではない)Oracle Data Pumpのファイル管理ルールは、LOGFILEパラメータに適用されます。

例4-1 適用されるOracle Data Pumpのレガシー・モードによるファイル管理ルール

ファイル管理は次の順序で進行します。

  1. パスの位置がファイル指定の一部として指定されると、Oracle Data Pumpはエクスポート・ジョブを実行するスキーマからアクセスでき、そのパスの位置がファイル指定でのパスの位置に一致するディレクトリ・オブジェクトの検索を試行します。そのようなディレクトリ・オブジェクトが見つからないと、エラーが返されます。たとえば、USER_DUMP_FILESという名前のサーバーベースのディレクトリ・オブジェクトを'/disk1/user1/dumpfiles/'のパス値とともに定義し、このディレクトリ・オブジェクトへの読取り/書込みアクセス権限をhrスキーマに付与するとします。次のコマンドを実行すると、Oracle Data Pumpはそのパス値に'/disk1/user1/dumpfiles/'が含まれ、そのhrスキーマに読取り/書込みアクセス権限が付与されているサーバーベースのディレクトリ・オブジェクトを検索します。

    expdp hr FILE=/disk1/user1/dumpfiles/hrdata.dmp
    

    その場合、Oracle Data Pumpはディレクトリ・オブジェクトUSER_DUMP_FILESを使用します。この例で使用されているパス値'/disk1/user1/dumpfiles/'は、Oracle Databaseからアクセスできるサーバー・システム上のパスを参照している必要があります。

    パスの位置がファイル指定の一部として指定されている場合は、DIRECTORYパラメータで指定されたディレクトリ・オブジェクトが無視されます。たとえば、次のコマンドを実行すると、Oracle Data Pumpはファイル・パラメータのDPUMP_DIRディレクトリ・オブジェクトを使用せず、かわりにそのパス値に'/disk1/user1/dumpfiles/'が含まれ、そのhrスキーマに読取り/書込みアクセス権限が付与されているサーバーベースのディレクトリ・オブジェクトを探します。

    expdp hr FILE=/disk1/user1/dumpfiles/hrdata.dmp DIRECTORY=dpump_dir
    
  2. パスの位置をファイル指定の一部として指定していない場合は、DIRECTORYパラメータに指定されたディレクトリ・オブジェクトが使用されます。たとえば、次のコマンドを実行すると、Oracle Data PumpはDPUMP_DIRディレクトリ・オブジェクト用に定義されたパスの位置をhrdata.dmpファイルに適用します。

    expdp hr FILE=hrdata.dmp DIRECTORY=dpump_dir
    
  3. ファイル指定の一部としてパスの場所を指定せず、DIRECTORYパラメータでディレクトリ・オブジェクトの名前を指定していない場合、Oracle Data Pumpは次の順序で、次の処理を実行します。

    1. Oracle Data PumpはDATA_PUMP_DIR_schema_nameという形式のディレクトリ・オブジェクトを検索します。ここでのschema_nameは、Oracle Data Pumpジョブを実行するスキーマです。たとえば、次のコマンドを実行すると、Oracle Data PumpはDATA_PUMP_DIR_HRという名前のサーバーベースのディレクトリ・オブジェクトの存在を調べます。

      expdp hr FILE=hrdata.dmp
      

      また、hrスキーマには、このディレクトリ・オブジェクトへの読取り/書込みアクセス権限が付与されている必要があります。そのようなディレクトリ・オブジェクトが存在しないとき、処理はステップbに進みます。

    2. Oracle Data Pumpは、クライアントベースの環境変数DATA_PUMP_DIRを検索します。たとえば、DUMP_FILES1という名前のサーバーベースのディレクトリ・オブジェクトが定義されていて、hrスキーマにそのオブジェクトへの読取り/書込みアクセス権限が付与されているとします。その場合は、クライアント・システムで、次のようにDUMP_FILES1を指すように環境変数DATA_PUMP_DIRを設定します。

      setenv DATA_PUMP_DIR DUMP_FILES1
      expdp hr FILE=hrdata.dmp
      

      Oracle Data Pumpは、次にサーバーベースのディレクトリ・オブジェクトDUMP_FILES1hrdata.dmpファイルに対して使用します。

      クライアントベースの環境変数DATA_PUMP_DIRが存在しないとき、処理はステップcに進みます。

    3. Oracle Data Pumpジョブを実行するスキーマにDBA権限があると、デフォルトのOracle Data Pumpディレクトリ・オブジェクトDATA_PUMP_DIRが使用されます。このデフォルトのディレクトリ・オブジェクトは、インストール時に設定されます。たとえば、次のコマンドを実行すると、Oracle Data PumpはシステムにDBA権限があるとみなし、デフォルトのDATA_PUMP_DIRディレクトリ・オブジェクトを使用しようとします。

      expdp system FILE=hrdata.dmp