OceanBaseデータベースのOracleモードでは、共有ファイルシステム(NFS)上のフォルダをデータベースのディレクトリオブジェクトにマッピングできます。ディレクトリオブジェクトは主にUTL_FILEシステムパッケージで使用されます。
ディレクトリの作成
CREATE DIRECTORY ステートメントを使用して、データベースからディレクトリオブジェクトを作成できます。ディレクトリオブジェクトを作成する主な目的は、共有ファイルシステム上のフォルダにエイリアスを指定することです。
注意事項
ディレクトリオブジェクトを作成する際には、以下の点に注意する必要があります:
OceanBaseデータベースは、ユーザーが指定したファイルシステムパス(例えば、
/usr/sqldump)に自動的にフォルダを作成しません。すべての階層のフォルダはユーザーが手動で作成する必要があります。例えば、ユーザーは手動でmkdirを実行する必要があります。OceanBaseデータベースは、指定されたファイルシステムパスが存在するかどうか、また対応する読み書き権限があるかどうかをチェックまたは判断しません。
OceanBaseデータベースは分散型データベースであるため、ディレクトリオブジェクトを作成する際には、すべてのOBServerノードが一貫した絶対パスにアクセスできるようにする必要があります。そのため、ファイルシステムパスは通常、共有ファイルシステム(例えば、NFS)上のパスです。
ディレクトリを作成する際には、現在のユーザーが
CREATE ANY DIRECTORY権限を持っている必要があります。ディレクトリを作成する際には、グローバル変数
secure_file_privを使用してアクセスするファイルシステムパスを設定する必要があります。グローバル変数
secure_file_privは、データのインポートまたはエクスポート時にアクセス可能なパスを制御します。グローバル変数secure_file_privの詳細な設定と説明については、secure_file_privを参照してください。設定方法は以下のとおりです:
OBServerノード上で、テナント管理者がローカルUnixソケットを介してクラスタのOracleテナントに接続します。
接続例は以下のとおりです:
obclient -S /home/admin/oceanbase/run/sql.sock -uroot@sys -p********ローカルUnixソケットを介してOceanBaseデータベースに接続する具体的な操作と説明については、secure_file_privを参照してください。
ユーザーがアクセスできるファイルシステムパス
/usr/sqldumpを設定します。SET GLOBAL secure_file_priv = "/usr/sqldump";
コマンドの実行が成功した後、変更を有効にするにはセッションの再起動が必要です。
ステートメントと例
ディレクトリを作成する構文は次のとおりです:
CREATE [OR REPLACE] DIRECTORY <ディレクトリオブジェクト名> AS <ファイルシステムパス> ;
ここで、OR REPLACE は、対応するディレクトリオブジェクト名が既に存在する場合、新しいファイルシステムパスを使用して既存のディレクトリ定義を置き換えることを意味します。
ディレクトリ sql_file_dir を作成する例は次のとおりです:
CREATE OR REPLACE DIRECTORY sql_file_dir AS '/usr/sqldump';
ディレクトリの削除
DROP DIRECTORY ステートメントを使用して、データベースからディレクトリオブジェクトを削除できます。ディレクトリを作成する際には、現在のユーザーが DROP ANY DIRECTORY 権限を持っている必要があります。
注意事項
ディレクトリオブジェクトを削除する際には、以下の点に注意する必要があります:
ディレクトリオブジェクトを削除しても、共有ファイルシステム上の関連フォルダは削除されません。
ディレクトリオブジェクトを削除するには、
DROP ANY DIRECTORYシステム権限が必要です。PLが関連するファイルシステム内のファイルにアクセスしている間は、ディレクトリを削除しないでください。
ステートメントと例
ディレクトリを削除する構文は次のとおりです:
DROP DIRECTORY <ディレクトリオブジェクト名> ;
ディレクトリ sql_file_dir を削除する例は次のとおりです:
DROP DIRECTORY sql_file_dir;
ディレクトリ関連ビュー
ディレクトリオブジェクトの作成が成功した後、次のビューを使用してディレクトリオブジェクトのステータスを確認できます。
DBA_DIRECTORIESDBA_DIRECTORIESビューは、テナント内のすべてのディレクトリオブジェクトの定義を表示するために使用されます。このビューを参照できるのはSYSユーザーまたはこのビューに対するクエリ権限を持つユーザーのみです。フィールド名 タイプ 説明 OWNER VARCHAR2(128) ディレクトリの所有者 DIRECTORY_NAME VARCHAR2(128) ディレクトリ名 DIRECTORY_PATH VARCHAR2(4000) ディレクトリパス ORIGIN_CON_ID NUMBER(38) テナントID ALL_DIRECTORIESALL_DIRECTORIESビューは、現在のユーザーがアクセス可能なディレクトリオブジェクトの定義を表示するために使用されます。フィールド名 タイプ 説明 OWNER VARCHAR2(128) ディレクトリが属するOwner DIRECTORY_NAME VARCHAR2(128) ディレクトリ名 DIRECTORY_PATH VARCHAR2(4000) ディレクトリパス ORIGIN_CON_ID NUMBER(38) テナントID