14.5 BFILE管理

この項では、BFILEを含むデータベースを管理するための様々な管理作業について説明します。

14.5.1 ディレクトリ・オブジェクト使用のガイドライン

DIRECTORYオブジェクトの効率的な管理のガイドラインについて学習します。

ディレクトリ機能の主な目的は、サーバーのファイル・システム内の大きなファイルへのアクセスをDBAが管理するうえで、単純で柔軟性があり、既存アプリケーションの変更が不要で、安全性の高いメカニズムを使用可能にすることです。ただし、この目的を実現するには、DBAがディレクトリ・オブジェクトの使用時に次のガイドラインに従うことが非常に重要です。

  • ディレクトリ・オブジェクトは、データファイルのディレクトリにマップしないでください。ディレクトリ・オブジェクトは、Oracleデータファイル、制御ファイル、ログ・ファイルおよび他のシステム・ファイルを含む物理ディレクトリにマップしないでください。これらのファイルを(不意にまたはなんらかの理由で)変更すると、データベースまたはサーバーのオペレーティング・システムが破損する場合があります。

  • DBAのみがシステム権限を持つ必要があります。CREATE ANY DIRECTORYDROP ANY DIRECTORY (DBAに最初に付与される)などのシステム権限は、他のユーザーにむやみに付与せず、慎重に扱う必要があります。多くの場合、データベース管理者のみが、これらの権限を持ちます。

  • DIRECTORY権限を付与するときには、十分な注意が必要です。ディレクトリ・オブジェクトへの権限を他のユーザーに付与する場合は、注意が必要です。同様に、権限をユーザーに付与するときは、WITH GRANT OPTION句の使用にも注意が必要です。

  • データベースの運用中に、ディレクトリ・オブジェクトを削除または置換しないでください。ディレクトリ・オブジェクトを削除または置換した場合、このディレクトリ・オブジェクトに対応付けられているすべてのファイルのすべてのセッションからの操作が正常に実行されなくなります。さらに、これらのファイルを正常にクローズする前にDROPコマンドまたはREPLACEコマンドを実行した場合は、プログラムにおけるこれらのファイルへの参照が失われ、これらのファイルに対応付けられているシステム・リソースも、セッションを停止するまで解放されなくなります。

    この場合、PL/SQLユーザーに可能な手段は、たとえばDBMS_LOB.FILECLOSEALLをコールするプログラム・ブロックを実行してファイル操作を再開するか、または各セッションをすべて終了するかのいずれかです。したがって、これらのコマンドは慎重に使用し、できればメンテナンスの停止時間中に使用します。

  • ユーザーのDIRECTORYオブジェクト権限を取り消すときには、十分な注意が必要です。REVOKE文を使用してユーザーのDIRECTORYオブジェクト権限を取り消した場合、ユーザーのセッションに依存するファイルへの、その後の操作が正常に実行されません。ユーザーは、権限を再取得してファイルをクローズするか、セッションでFILECLOSEALLを実行してファイル操作を再開する必要があります。

一般的に、ファイル・アクセスの管理にディレクトリ・オブジェクトを使用することは、OSレベルでのシステム管理作業の延長です。ファイルは、計画を立てることによって、Oracleプロセス用のREAD権限を持つ適切なディレクトリに論理的に構成できます。

これらの物理ファイルにマップするREAD権限とともにディレクトリ・オブジェクトを作成し、特定のデータベース・ユーザーにこれらのディレクトリへのアクセス権限を付与できます。

14.5.2 ディレクトリ・オブジェクトおよびBFILEの使用規則

次の条件が満たされている場合、ディレクトリ・オブジェクトまたはBFILEオブジェクトを作成できます。

ディレクトリ・オブジェクトまたはBFILEオブジェクトを作成する場合、次の条件が満たされている必要があります。

  • オペレーティング・システム・ファイルが、シンボリック・リンクまたはハード・リンクではないこと。

  • Oracleディレクトリ・オブジェクトに指定されているオペレーティング・システム・ディレクトリ・パスが、既存のオペレーティング・システム・ディレクトリ・パスであること。

  • Oracleディレクトリ・オブジェクトに指定されているオペレーティング・システム・ディレクトリ・パスのコンポーネントに、シンボリック・リンクが含まれていないこと。

14.5.3 オープンできるBFILE数の上限の設定

1回のセッションで同時にオープンが可能なBFILEの数には制限があります。この数の定義方法について、この項で学習します。

初期化パラメータSESSION_MAX_OPEN_FILESは、1回のセッションで同時にオープンできるファイル数の上限を定義します。

デフォルト値は10です。このデフォルト値を使用して、1回のセッションにつき10個までのファイルを同時にオープンできます。この制限を変更するには、データベース管理者がinit.oraファイルのパラメータ値を変更する必要があります。たとえば:

SESSION_MAX_OPEN_FILES=20

クローズされていないファイル数がSESSION_MAX_OPEN_FILES値を超えると、そのセッションでは、それ以上のファイルをオープンできなくなります。すべてのオープンしているファイルをクローズするには、DBMS_LOB.FILECLOSEALLコールを使用します。