アクセス・ドライバは、データベース・サーバー内で実行されます。これは、SQL*Loaderが、ロードするデータをサーバーに送信するクライアント・プログラムであるという点で、SQL*Loaderとは異なります。この違いは、次のことを意味しています。
サーバーでは、アクセス・ドライバによってロードされるファイルにアクセスする必要があります。
サーバーでは、アクセス・ドライバによって作成された出力ファイル(ログ・ファイル、不良ファイルおよび廃棄ファイル)、およびORACLE_DATAPUMP
アクセス・ドライバによって作成されたダンプ・ファイルの作成と書込みを行う必要があります。
アクセス・ドライバでは、ディレクトリ・オブジェクトを使用して、ファイルの読取りおよび書込みを行う位置を指定する必要があります。ディレクトリ・オブジェクトは、ファイル・システムのディレクトリ名に名前をマップします。たとえば、次の文は/usr/apps/datafiles
にあるディレクトリにマップされる、ext_tab_dir
という名前のディレクトリ・オブジェクトを作成します。
CREATE DIRECTORY ext_tab_dir AS '/usr/apps/datafiles';
ディレクトリ・オブジェクトは、DBAまたはCREATE
ANY
DIRECTORY
権限を持つすべてのユーザーが作成できます。
注意:
Oracle Real Applications Cluster(Oracle RAC)構成で外部表を使用するには、ディレクトリ・オブジェクトのパスがクラスタ・ファイル・システム上に存在するようにする必要があります。
ディレクトリの作成後、ディレクトリ・オブジェクトを作成するユーザーは、そのディレクトリのREAD
権限およびWRITE
権限を他のユーザーに付与する必要があります。これらの権限は、ロールを使用して割り当てるのではなく、明示的に付与する必要があります。たとえば、ext_tab_dir
で指定されたディレクトリのユーザーscott
のかわりに、サーバーがファイルを読み込むことができるようにするには、ディレクトリ・オブジェクトを作成したユーザーが、次のコマンドを実行する必要があります。
GRANT READ ON DIRECTORY ext_tab_dir TO scott;
SYS
ユーザーのみがディレクトリ・オブジェクトを所有できます。ただし、SYS
ユーザーは、ディレクトリ・オブジェクトを作成する権限を他のユーザーに付与できます。ディレクトリ・オブジェクトへのREAD
権限またはWRITE
権限は、Oracle Databaseによるファイルの読取りまたは書込みのみを意味します。適切なオペレーティング・システム権限がないかぎり、Oracle Databaseの外部にあるファイルには直接アクセスできません。同様に、Oracle Databaseには、ディレクトリのファイルに対して読取りおよび書込みを行うオペレーティング・システム権限が必要です。