DBA_DIRECTORIES

DBA_DIRECTORIES はOracleデータベース内すべてのディレクトリを示すデータ・ディクショナリ・ビューである。

DBA_DIRECTORIES
列名 データ型 NULL 説明
OWNER VARCHAR2(128) NOT NULL ディレクトリの所有者
DIRECTORY_NAME VARCHAR2(128) NOT NULL ディレクトリの名前
DIRECTORY_PATH VARCHAR2(4000) ディレクトリのパス
ORIGIN_CON_ID VARCHAR2(256) データの発生元のコンテナのID

権限

SELECT ANY DICTIONARY システム権限を持つユーザーだけが DBA_DIRECTORIES データ・ディクショナリ・ビューを参照できる。

必要な権限が無いと、表またはビューが存在しないというエラーが発生する。

$ sqlplus tsuka/mellon@test_db

SQL*Plus: Release 19.0.0.0.0 Production on Tue Nov 14 22:12:47 2018
Version 19.1.0.0.0

Copyright (c) 1982, 2018, Oracle. All rights reserved.

Last Successful login time: Fri Apr 15 2022 23:35:38 -07:00

Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - 64bit Production

SQL> SELECT * FROM DBA_DIRECTORIES;
SELECT * FROM DBA_DIRECTORIES
              *
行1でエラーが発生しました。:
ORA-00942: 表またはビューが存在しません。

OWNER

Oracleデータ・ディクショナリ・ビュー DBA_DIRECTORIES の OWNER 列は、ディレクトリ・オブジェクトの所有者を示す。

ディレクトリの所有者を確認するSQL文の例を次に示す。

SQL> SELECT OWNER FROM DBA_DIRECTORIES WHERE DIRECTORY_NAME = 'DATA_PUMP_DIR';

OWNER
-----
SYS

ディレクトリ・オブジェクトは所有者が常に SYS であるため、OWNER 列の値は常に「SYS」である。

DIRECTORY_NAME

Oracleデータ・ディクショナリ・ビュー DBA_DIRECTORIES の DIRECTORY_NAME 列は、ディレクトリオブジェクトの名前を示す。

ディレクトリの名前を確認するSQL文の例を次に示す。

SQL> SELECT OWNER, DIRECTORY_NAME, DIRECTORY_PATH FROM DBA_DIRECTORIES;

OWNER DIRECTORY_NAME DIRECTORY_PATH
----- -------------- ------------------------------
SYS   DATA_PUMP_DIR  D:\app\test\admin\orcl\dpdump\
SYS   TEMP_DIR       C:\temp\

DIRECTORY_PATH

Oracleデータ・ディクショナリ・ビュー DBA_DIRECTORIES の DIRECTORY_PATH 列は、ディレクトリのパスを示す。

ディレクトリのパスを確認するSQL文の例を次に示す。

SQL> SELECT DIRECTORY_PATH FROM DBA_DIRECTORIES WHERE DIRECTORY_NAME = 'DATA_PUMP_DIR';

DIRECTORY_PATH
------------------------------
D:\app\test\admin\orcl\dpdump\

ORIGIN_CON_ID

Oracleデータ・ディクショナリ・ビュー DBA_DIRECTORIES の ORIGIN_CON_ID 列は、データの発生元のコンテナのIDを示す。

ディレクトリのコンテナIDを確認するSQL文の例を次に示す。

0
非マルチテナント・コンテナ・データベース(CDB)内の行に使用される。
n
コンテナID n (行の発生元がルートの場合はn = 1)のコンテナを発生元とするデータを含む行に対して使用される。

関連データ・ディクショナリ・ビュー

ディレクトリ・オブジェクトに関するデータ・ディクショナリ・ビューには、次のものがある。

ALL_DIRECTORIES
現在のユーザーがアクセスできるディレクトリ・オブジェクト
DBA_DIRECTORIES
Oracleデータベース内すべてのディレクトリ・オブジェクト

ディレクトリ・オブジェクトは所有者が常に SYS であるため、USER_DIRECTORIES というデータディクショナリは存在しない。

関連システム権限

ディレクトリ・オブジェクトに関するシステム権限には、次のものがある。

CREATE ANY DIRECTORY
ディレクトリを作成できる。
DROP ANY DIRECTORY
ディレクトリを削除できる。
SELECT ANY DICTIONARY
データディクショナリの「DBA_」ビューを参照できる。

DBA_DIRECTORIESデータ・ディクショナリ・ビューを参照できる権限をユーザに追加するSQL文の例を次に示す。

SQL> GRANT SELECT ANY DICTIONARY TO tsukamoto;

関連オブジェクト権限

ディレクトリ・オブジェクトに関するオブジェクト権限には、次のものがある。

READ
ディレクトリ内のファイルを読み取る。
WRITE
ディレクトリ内のファイルに書き込む。

ディレクトリの読取り権限と書込み権限をユーザに追加するSQL文の例を次に示す。

SQL> GRANT READ, WRITE ON DIRECTORY log_dir TO tsuka;

関連SQL

ディレクトリに関するSQLの一覧を次に示す。

CREATE DIRECTORY
ディレクトリを作成する。
DROP DIRECTORY
ディレクトリを削除する。

Oracleデータベースに ALTER DIRECTORY 文は存在しない。ディレクトリ・オブジェクトを変更したいときは、CREATE OR REPLACE DIRECTOY 文でディレクトリ・オブジェクトを置き換える。