13.11 CREATE DIRECTORY

目的

CREATE DIRECTORY文を使用すると、ディレクトリ・オブジェクトを作成できます。ディレクトリ・オブジェクトは、外部バイナリ・ファイルLOB(BFILE)および外部表データが存在するサーバー・ファイル・システム上のディレクトリの別名を示します。PL/SQLコードおよびOCIコールでBFILEを参照する際、管理の汎用性のために、オペレーティング・システムのパス名をハード・エンコードせずにディレクトリ名を使用できます。

すべてのディレクトリは1つのネームスペースに作成され、個別のスキーマでは所有されません。ディレクトリに対するオブジェクト権限を特定ユーザーに付与することによって、そのディレクトリ構造内に格納されているBFILEへのアクセスを制限できます。

関連項目:

前提条件

ディレクトリを作成するには、CREATE ANY DIRECTORYシステム権限が必要です。

ディレクトリを作成すると、そのディレクトリに対するREADWRITEおよびEXECUTEオブジェクト権限が自動的に付与され、他のユーザーおよびロールにこれらの権限を付与できます。DBAも、これらの権限を他のユーザーおよびロールに付与できます。

ディレクトリに対するWRITE権限は、外部表との接続において便利です。これによって、権限受領者は、外部表のエージェントがディレクトリに書き込めるのがログ・ファイルなのか不良ファイルなのかを判断できます。

ファイルの記憶域用に、それに応じたオペレーティング・システムのディレクトリ、Oracle Automatic Storage Management (Oracle ASM)ディスク・グループ、またはOracle ASMディスク・グループ内のディレクトリを作成する必要もあります。システム管理者およびデータベース管理者は、このオペレーティング・システムのディレクトリに、Oracle Databaseプロセスに対する読取り権限および書込み権限が正しく設定されていることを確認する必要があります。

ディレクトリに対して付与される権限は、オペレーティング・システムのディレクトリ用に定義されたアクセス権限とは無関係に作成されるため、これらの権限は完全に対応しない場合があります。たとえば、サンプル・ユーザーhrに、ディレクトリ・オブジェクトに対するREAD権限が付与されていても、それに対応するオペレーティング・システムのディレクトリにOracle Databaseプロセスに対するREAD権限が付与されていない場合は、エラーが発生します。

構文

create_directory::=

セマンティクス

OR REPLACE

OR REPLACEを指定すると、既存のディレクトリ・データベース・オブジェクトを再作成できます。この句を指定した場合、既存のディレクトリに付与されているデータベース・オブジェクト権限を削除、再作成および再付与しなくても、そのディレクトリの定義を変更できます。

再定義したディレクトリに対する権限が付与されていたユーザーは、権限が再付与されなくてもそのディレクトリにアクセスできます。

関連項目:

データベースからのディレクトリの削除については、「DROP DIRECTORY」を参照してください。

SHARING

この句は、アプリケーション・ルートにディレクトリを作成する場合にのみ適用されます。このタイプのディレクトリはアプリケーション共通オブジェクトと呼ばれ、アプリケーション・ルートに属するアプリケーションPDBと共有できます。ディレクトリの共有方法を決定するには、次の共有属性のいずれかを指定します。

  • METADATA - メタデータ・リンクはディレクトリのメタデータを共有しますが、データは各コンテナに固有です。このタイプのディレクトリは、メタデータリンク・アプリケーション共通オブジェクトと呼ばれます。

  • NONE - ディレクトリは共有されません。

この句を指定しない場合、DEFAULT_SHARING初期化パラメータの値を使用して、ディレクトリの共有属性が決定されます。DEFAULT_SHARING初期化パラメータに値が含まれていない場合、デフォルトはMETADATAです。

ディレクトリの共有属性を作成後に変更することはできません。

関連項目:

directory

作成するディレクトリ・オブジェクトの名前を指定します。名前は、「データベース・オブジェクトのネーミング規則」に指定されている要件を満たしている必要があります。

Oracle Databaseでは、指定するディレクトリが実際に存在するかどうかが検証されません。このため、オペレーティング・システムに存在するディレクトリを指定してください。また、オペレーティング・システムでパス名の大/小文字が区別される場合は、正しい形式でディレクトリ名を指定する必要があります。パス名の最後にスラッシュを付ける必要はありません。

ディレクトリ名で親ディレクトリを参照しないでください。たとえば、次の構文は有効です。

CREATE DIRECTORY mydir AS '/scratch/data/file_data';

ただし、次の構文は無効です。

CREATE DIRECTORY mydir AS '/scratch/../file_data';

path_name

ファイルがあるサーバーのオペレーティング・システム・ディレクトリのフル・パス名を指定します。一重引用符が必要です。その結果、パス名の大/小文字が区別されます。

ディレクトリの作成: 例

次の文は、サーバー上のディレクトリを指定するディレクトリ・データベース・オブジェクトを作成します。

CREATE DIRECTORY admin AS '/disk1/oracle/admin';

次の文は、オペレーティング・システムのディレクトリusr/bin/bfile_dirに格納されているBFILEにアクセスできるように、ディレクトリのデータベース・オブジェクトbfile_dirを再定義します。

CREATE OR REPLACE DIRECTORY bfile_dir AS '/usr/bin/bfile_dir';