Java アプリケーション以外のアプリケーションから Informix データベース・サーバー に接続する際の自動クライアント・リルート・フィーチャーの操作

自動クライアント・リルート・サポートは、 IBM® データ・サーバー・クライアントが Informix 高可用性クラスター内のサーバーとの接続を失ったときに、フェイルオーバー・サポートを提供します。 自動クライアント・リルートにより、クライアントは、クラスター内の任意の使用可能なサーバーを介してデータベースへの再接続を試行することにより、障害からリカバリーできます。

自動クライアント・リルートは、ワークロード・バランシングが使用可能なときにはデフォルトで使用可能です。

自動クライアント・リルートが使用可能な場合、クライアントが既存の接続で接続障害を検出するときに、以下のプロセスが通常発生します。

  1. クライアントが既存の接続を使用して SQL ステートメントの実行を試行し、障害を検出します。
  2. クライアントは、接続マネージャーによって戻されるサーバー・リストを使用して、アクセス対象のサーバーを識別し、データベースへの再接続を試行します。
  3. 自動クライアント・リルート・プロセスがアプリケーションをデータベースに再接続できる場合、クライアントは新しく確立された接続のための実行環境を再構成します。 エラー SQL30108N がアプリケーションに戻されて、失敗したデータベース接続がリカバリーされ、トランザクションがロールバックされたことが示されます。 その後アプリケーションは、ロールバックされた作業を繰り返すことを含めて、将来のリカバリーを担当します。

    失敗した SQL ステートメントがトランザクション内の最初の SQL ステートメントであり、シームレス・フェイルオーバーを使用した自動クライアント・リルートが有効になっており、クライアントが CLI または .NET である場合、ドライバーは、失敗した SQL 操作を自動クライアント・リルート処理の一部として再生します。 接続が成功すると、エラーはアプリケーションに報告されず、トランザクションはロールバックされません。 接続の失敗と、それ以後のリカバリーはアプリケーションから隠されます。

  4. 自動クライアント・リルートがデータベースに再接続できない場合は、エラー SQL30081N がアプリケーションに戻されます。 その後アプリケーションは、接続障害からのリカバリーを担当します (例えば、それ自身でデータベースへの接続を試行します) 。

自動クライアント・リルートは、クライアントが新規接続での接続障害を検出したときにも使用されます。 しかし、この場合、再接続が成功すると、失敗したデータベース接続がリカバリーされたことを示すエラーはアプリケーションに戻されません。 再接続が失敗すると、エラー SQL30081N が戻されます。

ファイルの終わり (EOF) 文字を含むすべてのデータが最初の照会ブロックまたは後続のフェッチ要求で戻された場合、サーバーが到達不能になった後に COMMIT または ROLLBACK ステートメントを発行すると、 CLI ドライバーはシームレス・フェイルオーバーを実行できます。 シームレス・フェイルオーバーが行われるには、以下の条件が満たされる必要があります。
  • enableAcr パラメーターと enableSeamlessAcr パラメーターの両方を有効にする必要があります。
  • カーソルのブロッキングが有効になっている必要があります。
  • カーソルが読み取り専用または前方向のみのいずれかである必要があります。
FetchBufferSize キーワードを構成して、 CLI ドライバーがプリフェッチする結果セットのサイズが、最初の照会ブロックに EOF 文字を含めるのに十分であるようにすることができます。 FetchBufferSizeの詳細については、関連参照セクションを参照してください。

非シームレス ACR 環境では、 ReceiveTimeout イベントによって ACR 接続エラー (SQL30108N) がトリガーされます。

非シームレス ACR 環境で QueryTimeoutパラメーターが設定されている場合、以下の動作が監視されます:
  • 照会タイムアウト・イベントの前に接続が失敗した場合、ACR 接続エラー (SQL30108N、理由コード 1、および失敗コード 1、2 または 3) がアプリケーションに返されます。
  • Interrupt パラメーターがデフォルト値の 1 に設定されている場合に照会タイムアウト・イベントが発生すると、アプリケーションに SQL0952N エラーが返されます。
  • Interrupt パラメーターが 2 の値に設定され、照会タイムアウト・イベントが発生すると、ACR 接続エラー (SQL30108N 、障害コード 4、エラー・コード 1) がアプリケーションに返されます。

Interrupt パラメーターが値 2 に設定され、SQL ステートメントが実行されている間に SQLCancel() API がアプリケーションから明示的に送信される場合、ACR 接続エラー (SQL30108N 失敗コード 4 およびエラー・コード 2) がアプリケーションに返されます。

tcpipConnectTimeout パラメーターと memberConnectTimeout パラメーターが設定されていて、非シームレス ACR 環境で TCPIP 接続タイムアウトまたはメンバー接続タイムアウト・イベントが発生した場合、 CLI ドライバーは使用可能な新規メンバーに再接続しますが、ACR エラー (SQL30108N) はアプリケーションに返されません。