接続の回復(FireDAC)

提供: Appmethod Topics
移動先: 案内検索

接続の操作(FireDAC) への移動


不安定な環境での動作方法を説明します。FireDAC では、接続障害時にアプリケーションで接続を回復することができます。

概要

ネットワークの接続が物理的に切れたり DBMS サーバーが再起動される可能性のある不安定な環境で、データベース アプリケーションを動作させる場合があります。アプリケーションは、そのような中断が起きた場合でもシームレスに回復し、DBMS との通信を続行する必要があります。

FireDAC の自動接続回復機能を使用すると、接続の切断を検出し、適切な応答によりその状況から回復することができます。切断が見つかるのは、Open、ExecSQL、Ping といった特定の DB アクションを実行した場合だけです。切断が見つかると、DBMS ドライバは Kind = ekServerGone に設定して EFDDBEngineException を発生させます。

接続状態を確認したり接続を有効に保つための最も簡単な方法は、TFDCustomConnection.Ping メソッドを呼び出すことです。Ping は接続が閉じている場合にも使用できるメソッドで、接続を確立できるかを確認できます。

既知の制限事項:

DBMS 説明
Advantage Database ローカルの空き接続はサポートされていません。
dbExpress ブリッジ ドライバ
  • FireDAC で ekServerGone を検出できない場合があります。
  • Ping メソッドはサポートされていません。
Informix DirectExecute を True に設定する必要があります。
Microsoft Access サポートされていません。
MySQL ネットワーク接続が切断された場合の呼び出しの遅延を最小限に抑えられるよう、接続定義パラメータ ReadTimeout および WriteTimeout を調整することを検討してください。
ODBC ブリッジ ドライバ
  • FireDAC で ekServerGone を検出できない場合があります。
  • Ping メソッドはサポートされていません。
SQLite サポートされていません。

接続の回復の制御

接続の自動回復を有効にするには、ResourceOptions.AutoReconnect を True に設定します。状況により、TFDCustomConnection の以下のイベント ハンドラを使用してください。

  • OnRecover - 接続が切断したというイベントに応答し、FireDAC に対して次のアクションを指定します。
  • OnLosted - 接続が切断されて回復できなかった場合に発生します。
  • OnRestored - 接続が切断されて回復した場合に発生します。

TFDCustomConnection.OnRecover イベント ハンドラの応答としては、接続を確立し直したり、オフライン モードに移行したり、あるいは、単純に接続を閉じるなどが考えられます。OnRecover が指定されていなければ、FireDAC は接続を再確立しようと試みます。以下に例を示します。

 procedure TForm1.FDConnection1Recover(ASender: TObject;
   const AInitiator: IFDStanObject; AException: Exception;
   var AAction: TFDPhysConnectionRecoverAction);
 var
   iRes: Integer;
 begin
   iRes := MessageDlg('Connection is lost. Offline - yes, Retry - ok, Fail - Cancel',
     mtConfirmation, [mbYes, mbOK, mbCancel], 0);
   case iRes of
   mrYes:    AAction := faOfflineAbort;
   mrOk:     AAction := faRetry;
   mrCancel: AAction := faFail;
   end;
   Log('Connection is recovering');
 end;

FireDAC マネージャを OnRecoverOnLostOnRestored イベント ハンドラ内から閉じないことを強くお勧めします。予期しない問題が発生する可能性があるためです。

アプリケーションの準備

接続を回復した場合、以下の状態が失われています。

  • アクティブなトランザクションがロールバックされ、実行は失敗したステートメントから続けられます。
  • まだ取得されていない結果セットはトリミングされ、TFDDataSet.SourceEOFTrue に設定されます。
  • Oracle パッケージの状態やセッション変数など、データベース セッションの状態が失われます。
  • 登録済みのデータベース警告の登録が解除されます。

アプリケーションを不安定な環境で動作させる場合に失敗時の影響を最小限に抑えられるよう準備するには、以下のオプション値を設定してください。

設定対象のオプション 設定する値

FetchOptions.Mode

fmAll

FetchOptions.RowsetSize

200 - 300

FetchOptions.AutoClose

True(デフォルト)

TxOptions.AutoCommit

True

ResourceOptions.AutoReconnect

True

アプリケーションでオフライン接続モードCachedUpdates を使用することができます。

関連項目