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) ディレクトリの所有者 DIRECTORY_NAME VARCHAR2(128) ディレクトリ名 DIRECTORY_PATH VARCHAR2(4000) ディレクトリパス ORIGIN_CON_ID NUMBER(38) テナントID