開発、テスト、および本番の 3 つの Oracle 11g データベースがあります。ロギング ディレクトリが 3 つのシステムで異なるとします。
dev => \var\log\oracle\
test => e:\logging\
prod => g:\logs\logging\
これらのディレクトリを utl_file で使用しています。
これらの設定はどこに保存しますか? これらの値を保存してPL/SQLで簡単に読み取る「ora_config.ini」のようなものはありますか?
少なくとも Oracle 9i 以降、Oracle にはdirectoryオブジェクトがあります。http://docs.oracle.com/cd/B12037_01/server.101/b10759/statements_5007.htmを参照してください。
各システムで同じ名前のディレクトリ オブジェクトを作成し、 への呼び出しでそのディレクトリを名前で参照する必要がありますutl_file。
たとえば、「dev」の場合:
create directory logging_dir as '/var/log/oracle';
「テスト」について:
create directory logging_dir as 'e:\logging';
「製品」で:
create directory logging_dir as 'g:\logs\logging';
また、PL/SQL コードはすべての環境で同一です。たとえば、次のようになります。
f := utl_file.fopen('LOGGING_DIR', 'filename.log', 'W');
DBA は、ディレクトリ オブジェクトを作成し、それらを使用する必要があるデータベース ユーザーまたはロールに権限を付与する必要があります。
ディレクトリ オブジェクトを作成するシステム権限をデータベース ユーザーだけに付与しないでください。これは、Oracle が OS ユーザー「oracle」としてファイル システム上の任意の場所を読み書きできるようにすることで、セキュリティ ホールが作成されるためです。