18.5 DBFSのメンテナンス

DBFS管理には、診断の実行、フェイルオーバーの管理、バックアップの実行などを行うためのツールが用意されています。

18.5.1 DBFSクライアントでのOracle Walletの使用

この項では、Oracle Walletの使用について学習します。

Oracle Walletを使用すると、ユーザーがパスワードを入力しなくても、DBFSクライアントでDBFSストアをマウントできます。

関連項目:

ウォレットの作成と管理の詳細は、Oracle Databaseエンタープライズ・ユーザー・セキュリティ管理者ガイドを参照してくださいエンタープライズ・ユーザー・セキュリティ(EUS)はOracle Database 23cでは非推奨です。

  1. ウォレットのディレクトリを作成します。たとえば:
    mkdir $ORACLE_HOME/oracle/wallet
    
  2. 自動ログイン・ウォレットを作成します。
    mkstore -wrl $ORACLE_HOME/oracle/wallet -create
    

    mkstoreウォレット管理コマンドライン・ツールは、Oracle Database 23cで非推奨になり、将来のリリースで削除される可能性があります。

  3. クライアントのsqlnet.oraファイルに、ウォレットの場所を追加します。
    WALLET_LOCATION = (SOURCE = (METHOD = FILE) (METHOD_DATA = (DIRECTORY =
     $ORACLE_HOME/oracle/wallet) ) ) 
    
  4. クライアントのsqlnet.oraファイル内に、次のパラメータを追加します。
    SQLNET.WALLET_OVERRIDE = TRUE
    
  5. 資格証明を作成します。
    mkstore -wrl wallet_location -createCredential db_connect_string username password
    

    たとえば:

    mkstore -wrl $ORACLE_HOME/oracle/wallet -createCredential DBConnectString scott password
    
  6. 使用するtnsnames.oraファイルに、接続の別名を追加します。
  7. dbfs_clientをOracle Walletで使用します。

    たとえば:

    $ dbfs_client -o wallet /@DBConnectString /mnt/dbfs 

18.5.2 DBFSの診断

dbfs_clientプログラムは、問題の診断に役立つように複数レベルのトレースをサポートしています。

dbfs_clientは、Linuxでsyslogデーモンを使用してトレースをファイルまたは/var/log/messagesに出力できます。

ノート:

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

ファイルに対してトレースする場合、dbfs_clientプログラムにより、ディスク上で2つのトレース・ファイルが保持されます。dbfs_clientは、トレース・ファイルを自動的にローテーションし、ディスク使用量を10MBに制限します。

デフォルトでは、/var/log/messagesに常にロギングされるクリティカルなメッセージを除き、トレーシングは無効になっています。

dbfs_clientでOracle Databaseに接続できない場合、trace_levelおよびtrace_fileオプションを使用してトレースを有効にします。トレースを使用すると、追加メッセージがログ・ファイルに出力されて、デバッグが容易になります。

DBFSでは、Oracle Databaseを使用して、ファイルが格納されます。Oracleサーバーの問題は、dbfs_clientにエラーとして伝播される場合があります。dbfs_clientエラーが発生した場合、Oracleサーバー・ログを表示して、そのエラーが根本原因であるかを確認してください。

18.5.3 フェイルオーバー・イベント中のデータ損失の防止

dbfs_clientプログラムは、Oracle RACクラスタ内のデータベース・インスタンスの1つに障害が発生した場合、既存の他のデータベース・インスタンスの1つにフェイルオーバーできます。

dbfs_clientフェイルオーバーが正常に動作するには、Oracleデータベース・サービスを変更して、フェイルオーバー・パラメータを指定する必要があります。サービスを変更するには、例18-2に示すように、DBMS_SERVICE.MODIFY_SERVICEプロシージャを実行します

例18-2 DBFSクライアント・フェイルオーバー・イベントの有効化

exec DBMS_SERVICE.MODIFY_SERVICE(service_name => 'service_name',
              aq_ha_notifications => true,
              failover_method => 'BASIC',
              failover_type => 'SELECT',
              failover_retries => 180,
              failover_delay => 1);

前提条件が満たされれば、バックエンドのOracle Databaseインスタンスに障害が発生した後におけるDBFS接続のフェイルオーバー中のデータ損失を防ぐことができます。この場合、クライアントが終了するとキャッシュされた書込みは失われる可能性があります。ただし、他のOracle RACインスタンスまたはスタンバイ・データベースに対するバックエンド・フェイルオーバーでは、書込みが失われることはありません。

  • -o failoverマウント・オプションを指定します。

    $ dbfs_client database_user@database_server -o failover /mnt/dbfs 

18.5.4 クライアント側の書込みキャッシュの迂回

dbfs_clientの共有およびキャッシュ・セマンティクスは、close-to-openキャッシュ一貫性動作を使用する点においてNFSと類似しています。

これにより、dbfs_clientの複数のコピーが同一の共有ファイル・システムにアクセスできるようになります。デフォルト・モードでは、クライアント上に書込みをキャッシュし、タイムアウト後またはユーザーがファイルを閉じた後で、その書込みをフラッシュします。また、ファイルへの書込みは、ライターがファイルをクローズした後にファイルをオープンするクライアントにのみ表示されます。

クライアント側の書込みキャッシュは迂回できます。

  • ファイルがオープンしているときにO_SYNCを指定します。

    キャッシュへの書込みをディスクに強制するには、fsyncをコールします。

18.5.5 DBFSのバックアップ

DBFSのバックアップには2つの方法があります。

ファイルシステムの基礎となる表をデータベース・レベルでバックアップするか、マウント・ポイントを介してOracle Secure Backupなどのファイルシステムのバックアップ・ユーティリティを使用できます。

内容は次のとおりです。

18.5.5.1 データベース・レベルでのDBFSバックアップ

データベース・レベルで表をバックアップすると、ファイル・システム内のファイルとデータベース内のリレーショナル・データの一貫性を常に保つことができる利点があります。

また、データベースの完全なリストアおよびリカバリにより、データを損失せずにファイル・システムを完全にリストアおよびリカバリできます。データベースのpoint-in-timeリカバリの実行中に、ファイルは指定した時間にリカバリされます。通常のデータベース・バックアップのように、バックアップ中に発生した変更はリストアの一貫性に影響しません。リストアされたファイル・システム全体は、指定したタイム・スタンプにおいて常に一貫性があります。

18.5.5.2 ファイル・システム・ユーティリティを介したDBFSのバックアップ

ファイル・システム・バックアップ・ユーティリティを使用してファイル・システムをバックアップすると、個々のファイルをバックアップから容易にリストアできる利点があります。

リストアされたファイルに最後のバックアップ以降に加えられた変更は失われます。

Oracle Secure Backup管理サーバーを使用してバックアップがスケジュールされる場合、allow_rootマウント・オプションを指定します。

18.5.6 DBFSの小さいファイルのパフォーマンス

すべての共有ファイル・システムと同様に、小さいファイルに対するDBFSのパフォーマンスは、ローカル・ファイル・システムのパフォーマンスより遅れます。

DBFS内の各ファイルのデータまたはメタデータの操作は、FUSEユーザー・モード・ファイル・システムによって処理され、ネットワークを介してデータベースに転送される必要があります。このため、クライアントでキャッシュされていない操作は、DBFS内での実行に数ミリ秒かかります。

ディスクへの入力/出力(IO)を伴う操作では、ディスクIOの待機によって時間遅延のオーバーヘッドがマスクされます。大きいIOのオーバーヘッドは、小さいIOの場合よりも当然低いパーセンテージになります。ネットワーク・オーバーヘッドは、ディスクIOを発行しない操作でより顕著です。

ローカル・ファイル・システムを使用する数の少ない小さいファイル上で動作する操作では、オーバーヘッドは目立ちませんが、数千の小さいファイル上に影響を与える操作では、オーバーヘッドは大きくなります。たとえば、単一ディレクトリをリストする場合や単一ファイルを参照する場合、ほぼ即時にレスポンスが得られますが、数千のファイルを含むディレクトリ・ツリー内を検索する場合、オーバーヘッドは相対的に大きくなります。読取りおよび書込みのパフォーマンスを最適化するために、dbfs_clientdirect_ioオプションをお薦めします。