24 OFSを使用したDBFSアクセス

Oracle File Server (OFS)プロセスを使用してデータベース・ファイル・システム(DBFS)にアクセスできます。

この章では、OFSが専用バックグラウンド・プロセスであるOFSDを使用してDBFSを管理する方法について詳しく説明します。また、DBFSへのアクセスおよび管理方法に関する詳細も示します。

Oracle Clientインストールがない複数のノードで新規に作成されたDBFSにアクセスするには、OFSを使用してファイル・システムをNFSマウントします。Oracle Clientがインストールされていない場合は、OFSを使用して、新しく作成されたDBFSをNFSにマウントし、複数のノードで使用します。すべてのファイル・システム・リクエストはOFSバックグラウンド・プロセスのスレッドによって処理されます。

24.1 OFSについて

Oracle File Server (OFS)は、PDB固有のスクリプト、ログ、トレース・ファイル、およびデータベース内でアプリケーションを実行することによって生成されるその他のファイルを格納する必要性に対処します。

さらに、次のタスクにOFSを使用できます。

  • データベース表にロードする前のソース・データをホストできるステージング領域として。
  • Oracle Data Pumpプロセスからのインポートまたはエクスポート・ファイルを格納する場合。

データ、REDO、アーカイブ・ログ・ファイル、データベース・トレース・ファイルなどのコア・データベース・ファイルをOFSに配置しないでください。これにより、依存性サイクルが発生し、システムがハングする可能性があります。同様に、自動診断リポジトリの場所を設定するdiagnostic_dest初期化パラメータは、OFS内のディレクトリを指さないようにしてください。

OFSには、PDBの一部である記憶域を使用してデータベース・ファイル・システムを作成する方法と手順が用意されています。作成したファイル・システムをマウントし、PL/SQLプロシージャを使用して他のUnixファイル・システムと同様にアンマウントし、使用されなくなったファイル・システムを破棄できます。PDBが破棄されると、ファイル・システムも破棄され、基礎となる記憶域が解放されます。

24.2 Oracle File Serverプロセスについて

OFSは、Oracle File Server Deamon (OFSD)と呼ばれる致命的でない専用のバックグラウンド・プロセスを使用して、データベース・ファイル・システムを管理します。

バックグラウンド・プロセスの詳細は、『データベース・リファレンス』ガイドの「バックグラウンド・プロセス」を参照してください。

インスタンスが起動すると、OFSがサポートされているLinuxなどのオペレーティング・システム・プラットフォームでOFSDプロセスが生成されます。OFSDはマルチスレッドであり、致命的ではありません。ファイル・システム管理リクエストと、マウントされた各ファイル・システムからのファイル・リクエストの両方を処理します。

OFSの集中管理されたサーバー・バックグラウンド・プロセス・モデルでは、制限された一連のサーバー・スレッドを使用して複数のファイル・システムをマウントおよびアクセスできます。必要に応じて新しいファイル・サーバー・スレッドを作成することで、リソース共有と線形スケーラビリティが向上します。これらのスレッドで使用されるメモリーおよびCPUは、RDBMSインスタンスで設定されたシステム全体のパラメータによって制御されます。

OFSDプロセスは、レシーバ・スレッドとワーカー・スレッドの2種類のスレッドを起動します。レシーバ・スレッドは、マウントされたファイル・システムからのリクエストを受信します。このスレッドの名前はof01と同様です。このスレッドによって受信されたリクエストは、別のワーカー・スレッドによって処理される送信キューに配置されます。送信キューは、受信リクエストをすべてのワーカー・スレッドに効率的に分散するためにハッシュ・パーティション化されています。デフォルトでは、OFSDは3つのワーカー・スレッドを起動します。OFS_THREADSパラメータの値を更新して、ワーカー・スレッドの数を増やすことができます。

OFSDプロセス

OFSDは、DBFSとOFSの2種類のファイル・システムをサポートしています。

DBMS_FS PL/SQLプロシージャを使用して、OFSDプロセスによって管理されるファイル・システムを作成、マウントおよび操作します。

OFSDは、ワーカー・スレッドのプールを使用して、インスタンスにマウントされた複数のファイル・システムからのリクエストを処理します。V$OFSMOUNTを使用して、マウントされたファイル・システムを問い合せます。返されるレスポンスは各PDBに固有です。指定されたPDBにマウントされているファイル・システムのみがリストされます。

24.3 OFS構成パラメータ

次の表は、OFSを使用してデータベース・オブジェクトのファイル・システム・アクセスを提供するようにチューニングできるパラメータを示しています。

表24-1 OFS構成パラメータ

パラメータ名 説明

OFS_THREADS

OFSリクエストを処理するOFSワーカー・スレッドの数を設定します。3から128の範囲で整数値を入力します。OFS_THREADSのデフォルト値は4で、これには1つのレシーバ・スレッドと3つのワーカー・スレッドが含まれます。デフォルトでは、OFSDは3つのワーカー・スレッドを開始します。

このパラメータの値は、マウントされたファイル・システムの合計数と、各ファイル・システムでファイル操作が実行される速度に基づいて設定します。

OFS_THREADSの数を更新して、パラレルに実行されるDBMS_FSリクエストの数を増やすことができます。これにより、Oracleデータベース内のOracleファイル・システムでmake、mount、unmountおよびdestroy操作を実行しているワーカー・スレッドの数が増加します。

この値は動的に増やすことしかできず、減らすことはできないため、慎重に検討した後で設定します。値を変更する前に、V$OFS_THREADSビューを問い合せて、実行中のすべてのOFSスレッドをリストし、様々なOFSスレッドに関する詳細を取得します。このビューの列およびデータ型の詳細は、Oracle DatabaseリファレンスV$OFS_THREADSを参照してください。

OFS_THREADSの値を増やすと、複数のPDBを含む環境でパラレル・ファイル・システム・リクエストの実行にかかる時間が大幅に短縮されます。OFS_THREADSに高い値を設定すると、指定した数のスレッドが作成されます。ワークロードがない場合、これらのスレッドはアイドル状態のままになり、新しい作業を待機します。

ノート:

diagnostic_dest初期化パラメータは、自動診断リポジトリの場所を設定します。依存性サイクルが生成され、システムがハングアップする可能性があるため、dbfs_clientまたはOracle File Server (OFS)をファイル・システム・サーバーとして使用する場合は、このパラメータがdbfs_clientまたはOFS内のディレクトリを指していないことを確認してください。

24.4 OFSクライアント・インタフェース

OFSインタフェースには、OFSの操作をサポートするビューと手順が含まれています。

OFSで提供されるPL/SQLプロシージャを使用して、ファイル・システムを作成、マウント、アンマウントおよび破棄します。ビューを問い合せて、マウントされたファイル・システムの状態を識別し、個々のファイルI/O操作のパフォーマンス・データを収集できます。

24.4.1 DBMS_FSパッケージ

DBMS_FSパッケージを使用して、ファイル・システムを管理します。このパッケージの手順を使用して、Oracle Databaseのファイル・システムを作成、マウント、アンマウントおよび破棄します。

複数のPDBがこれらのジョブをパラレルに発行できます。リクエストは、異なるワーカー・スレッドによってパラレルに実行されます。V$OFS_THREADSを問い合せることにより、操作のステータスを取得できます。OFSDがスレッドを管理します。現在のワーカー・スレッドの数がOFS_THREADSパラメータの値より少ない場合、新しいワーカー・スレッドが作成されます。

関連項目:

Oracle OFSプロシージャの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。

次の例に、DBMS_FSパッケージの使用方法を示します。

BEGIN
 DBMS_FS.MAKE_ORACLE_FS (
  fstype           => 'dbfs',
  fsname           => 'dbfs_fs1',
  mount_options    => 'TABLESPACE=dbfs_fs1_tbspc');
END;
/
BEGIN
 DBMS_FS.MOUNT_ORACLE_FS (
  fstype           => 'dbfs',                              
  fsname           => 'dbfs_fs1',                              
  mount_point      => '/oracle/dbfs/testfs',                              
  mount_options    => 'default_permissions, allow_other'); 
END;
/
/************** Now you can access the file system. All the FS operations go here ***************/

BEGIN
 DBMS_FS.UNMOUNT_ORACLE_FS (
  fsname           => 'dbfs_fs1',                              
  mount_point      => '/oracle/dbfs/testfs',
  unmount_options    => 'force'); 
END;
/
BEGIN
 DBMS_FS.DESTROY_ORACLE_FS (
  fstype           => 'dbfs',
  fsname           => 'dbfs_fs1');
END;
/

24.4.2 OFSのビュー

OFS操作をサポートするビューはV$OFSで始まります。

表24-2 OFSの固定ビュー

ビュー 説明
V$OFS_THREADS このビューを問い合せて、実行中のすべてのOFSスレッドをリストし、スレッド・タイプ、スレッドが動作しているファイル・システム、特定の操作でワーカー・スレッドによって費やされた時間など、様々なOFSスレッドに関する詳細を取得します。このビューの列およびデータ型の詳細は、Oracle DatabaseリファレンスV$OFS_THREADSを参照してください。
V$OFSMOUNT このビューを問い合せて、Oracle File Systemによってマウントされたファイル・システムの詳細を取得します。このビューの列およびデータ型の詳細は、Oracle DatabaseリファレンスV$OFSMOUNTを参照してください。
V$OFS_STATS このビューを問い合せて、マウント・ポイントの各ファイル操作がコールされた回数をリストします。このビューの列およびデータ型の詳細は、Oracle DatabaseリファレンスV$OFS_STATSを参照してください。

24.5 FUSEを使用したDBFSのローカル管理

Filesystem in User Space (FUSE)を使用してDBFSを管理する方法を理解します。

LinuxカーネルのFUSEインタフェースによって、オペレーティング・システム・プロセスでファイル・システムが使用可能になります。ファイル・システムをマウントした後、ファイル・システムをエクスポートしてから、クライアント・アプリケーションがこのファイル・システムにアクセスできる他のノードにNFSマウントできます。

24.5.1 FUSEの構成

OFSDは、FUSEを介してデータベース・ファイル・システムを公開します。OFSDを使用してデータベース・ファイル・システムをマウントする前に、FUSEモジュールをインストールして構成する必要があります。

コンピュート・ノードでデータベース・インスタンスを実行している場合は、そのノードでFUSEモジュールを構成します。ファイル・システムはマウントされ、コンピュート・ノード上のマウントされたパスを介して表示されます。RAC構成では、OFSファイル・システムを各ノードに独立してマウントできるように、各ノードでFUSEを構成します。
データベース・インスタンスが実行されているクラウド環境またはオンプレミス環境でFUSEモジュールを構成するには、次のようにします。
  1. OracleユーザーがFUSE実行可能ファイルfusermountを使用するための読取りおよび実行権限を設定します。
    sudo chmod o+rx /usr/bin/fusermount
    fusermountファイルを使用して、FUSEユーザー・モードのファイル・システムをマウントおよびアンマウントします。
  2. Oracleユーザーがファイル・システムをマウントできるように、fusermountファイルにsetuidビットを設定します。
    sudo chmod u+s /usr/bin/fusermount
  3. マウントされたファイル・システムへのアクセスを他のユーザーに許可します。
    sudo sh -c ''echo user_allow_other >> /etc/fuse.conf''
  4. オプション。デフォルトでは、FUSEを使用してマウントできるファイル・システムの最大数は1000です。多数のPDBを実行し、PDBごとに個別のファイル・システムを構成する必要がある場合は、次のコマンドを実行して、FUSEを使用してマウントできるファイル・システムの数を増やします。次のコマンドは、FUSEを使用してマウントできるファイル・システムの数を4000に増やします。
    sudo sh -c ''echo mount_max=4000 >> /etc/fuse.conf''
  5. すべてのユーザーにfuse.confファイルの読取りを許可し、Oracleプロセスが実行時にこのファイルを読み取ることができるようにします。
    sudo chmod a+r /etc/fuse.conf

24.5.2 クラウドのOFSへのアクセス

任意のクラウド環境にマウントされたOFSからファイルにアクセスするには、環境を構成するための追加のステップを実行する必要があります。

クラウド環境のOFSマウント内のファイルにアクセスするには、追加の構成を実行する必要がある場合があります。セキュリティ上の理由により、OFSマウント・ポイントをデータベース・ノードからクライアント・ノードにエクスポートできない場合があります。これにより、クライアント・アプリケーションがオペレーティング・システムのコマンドおよびユーティリティを介してOFSファイルにアクセスできなくなり、OFSマウント・パスがシステム・コールを使用してアクセスできない場合があります。このような場合、Oracleでは、utl_fileパッケージを使用してOFSマウント内のファイルにアクセスすることをお薦めします。UTLファイル・パッケージの詳細は、PL/SQLパッケージおよびタイプ・リファレンスUTL_FILEサブプログラムのサマリーを参照してください。

impdpおよびexpdpコマンドライン・クライアントを使用して、OFSマウント内のファイルにアクセスすることもできます。ユーティリティ・ガイドOracle Data PumpインポートおよびOracle Data Pumpエクスポートを参照してください。

クラウドのクライアント・アプリケーションがOFSのファイルにアクセスできるように環境を構成するには、次のようにします。
  1. OFSマウント・パスを使用してディレクトリ・オブジェクトを作成します。

    次のサンプル・コードは、/u03/dbfs/<pdbid>/dataがdbノードのOFSマウント・ディレクトリである場合に、pdb1_ofsdirというディレクトリ・オブジェクトを作成する方法を示しています。

    CREATE DIRECTORY pdb1_ofsdir AS '/u03/dbfs/<pdbid>/data/';
  2. ディレクトリ・オブジェクトにアクセスするためのアクセス権をユーザーに付与します。

    ディレクトリ・オブジェクトの作成およびそのアクセス権の設定の詳細は、PL/SQLパッケージおよびタイプ・リファレンスCREATE DIRECTORYを参照してください。

DBFS表を直接問い合せまたは変更して、OFSファイルにアクセスしないでください。DBFSファイル・システムがOFSを介してマウントされている場合、またはメタデータとデータの不整合につながる可能性がある場合は、dbfs_clientを使用しないでください。OFSファイルにアクセスするには、DBMS_FSパッケージにリストされているプロシージャに加えて、UTL_FILEパッケージを使用します。PL/SQLパッケージおよびタイプ・リファレンスFS_EXISTSおよびLIST_FILESを参照してください。

24.6 NFSアカウントによるDBFSおよびOFSへのアクセス

NFSは、ネットワーク上の任意のローカル・ファイル・システムにアクセスするために広く使用されているプロトコルです。OFSはこのプロトコルを使用し、コンピュート・ノードにマウントされているDBFSファイル・システムへのアクセスを可能にします。

NFSを使用すると、ファイル・システムへのアクセスが認可されているすべてのノードからコンピュート・ノードにアクセスできます。

24.6.1 NFSアカウントによるOFSへのアクセス

OFSマウントは、指定したノードのリストにエクスポートし、それらにNFSマウントできます。これにより、ユーザーは、データベースが実行されていないノードからOFSマウント・ポイントのコンテンツにアクセスできます。NFSエクスポートは、セキュリティ上の理由からクラウド環境では機能しない場合がありますが、オンプレミス環境で使用できます。

NFS v3はステートレス・プロトコルであり、opendirコールとreleasedirコールの間に各readdirリクエストをカプセル化します。これによって、多数のファイルがあるディレクトリをリストする場合、パフォーマンスが低下する可能性があります。したがって、OFSはopendirコールとreleasedirコールの間で持続するディレクトリ・キャッシュを維持します。no_rbt_cacheマウント・オプションは、ディレクトリ・キャッシュ・リストの不整合を回避したり、ディレクトリ・キャッシュの利点を利用するために使用しないでください。

24.6.2 NFSサーバーによるストレージへのアクセスの前提条件

NFSサーバーによるストレージへのアクセスの前提条件について学習します。

前提条件は次のとおりです。

  • OFSを使用する前にDBFSファイル・システムを作成する必要があります。

  • データベースでエクスポートされるファイル・システムをマウントできる必要があります。

  • NFSサーバーをKERNELモジュールで設定する必要があります。

    ノート:

    KERNELモジュールはLinux用FUSEドライバでサポートされます。

24.6.3 NFSセキュリティ

OFSでは、OS認証モデルを使用してNFSクライアント・ユーザーを認可します。ユーザーがローカル・ノード(Oracleインスタンスが実行されている)にアクセスしている場合、ファイル・システム内の各ファイルへのアクセスは各オブジェクトに設定されているUNIXアクセス制御リストで制御されます。NFSクライアントの場合、アクセスを制御するようにKerberosを構成できます。

Linuxでは、OFSはFUSEを使用してOSカーネルまたはNFSクライアントからファイル・システム要求を取得します。このためには、rootユーザー以外のOSユーザーとOracleユーザーがファイル・システムにアクセスする必要がある場合に、/etc/fuse.conf設定ファイルにuser_allow_otherパラメータを設定する必要があります。

ノート:

ユーザーがOracleパスワードを使用してSQL*PlusなどのOracleクライアント・ツールにログインしてSQL文を実行できるように設定することもできます。

ネットワークが安全でない場合、Kerberosを設定してOS NFSを使用してユーザーを認証することをお薦めします。

ノート:

  • Kerberos認証はNFSバージョン4以降で使用できます。OFSがNFSバージョン3経由でエクスポートされた場合、認証はAUTH_SYSを使用して実行されます。

  • ローカル・ノードでは、OFSのエクスポート方法(NFSバージョン3またはNFSバージョン4)に関係なく、AUTH_SYSを使用して認証が実行されます。

24.6.3.1 Kerberosについて

Kerberosは暗号化テクノロジKey Distribution Center (KDC)を使用し、オープン・ネットワークでセキュアな認証を実行する仲裁者の役割を果たします。

Kerberosは、3種類のセキュリティをすべて提供する広く普及しているセキュリティ・メカニズムです。

  • 認証

  • 整合性チェック

  • プライバシ

Kerberosインフラストラクチャは、Kerberosソフトウェア、セキュアな認証サーバー、集中管理されたアカウントおよびパスワード・ストア、Kerberosプロトコルによる認証が設定されたシステムで構成されています。OS NFSサーバーは、Kerberosプリンシパル名をユーザー名として使用して完全な認証と整合性チェックを処理します。認証が実行されると、Oracleカーネルに渡される要求はVFS I/O要求を通じて渡されるユーザー名に基づいて処理されます。

24.6.3.2 Kerberosサーバーの構成

LinuxシステムでKerberosサーバーを構成するには:

  1. LinuxシステムにKerberosソフトウェアをインストールします。

  2. 次のコマンドを使用して、デーモンが実行されているかどうかを確認します。
    # /sbin/chkconfig krb5kdc on
    # /sbin/chkconfig kadmin on
  3. デーモンが実行されていない場合は、次のコマンドを使用してデーモンを手動で起動します。
    # /etc/rc.d/init.d/krb5kdc start
    # /etc/rc.d/init.d/kadmin start
  4. kadmin.localコマンドを使用して、ユーザー・プリンシパルを追加します。

    例:
    kadmin.local: addprinc <scott>