アプリケーション・コンティニュイティは、リクエスト境界で動作します。リクエスト は、アプリケーションが送信する作業単位です。通常、Universal Connection Pool、Oracle WebLogic Server、DRCPおよびサード・パーティの接続プールの接続を流用して返す間に実行されます。要求は、beginRequest
APIとendRequest
APIでマークされます。前述の接続プールのいずれかを使用する場合、Oracle DatabaseはデフォルトでこれらのAPIを提供します。
アプリケーション・コンティニュイティはアプリケーションで次のように機能します。
-failovertype
パラメータがTRANSACTION
に設定され、-commit_outcome
パラメータがTRUE
に設定されるように、新しいデータベース・サービスを作成するか、または既存のデータベース・サービスを変更します。
このサービスを使用してアプリケーションがデータベースへの接続をオープンするか、またはこのサービスを使用してOracle接続プールから接続を流用するとき、セッション・ハンドルによって、各トランザクションの論理トランザクションID (LTXID)が転送されます。
アプリケーションが要求を送信すると、停止が発生した場合にサーバーとリプレイ・ドライバは協力してリプレイのどの状態を取得するかを判別します。(計画済または計画外の)リカバリ可能エラー が発生した場合、エラー・メッセージがリプレイ・ドライバに戻されます。
JDBC-thin (タイプ4)アプリケーションの場合、リプレイ・ドライバはFANメッセージ(停止またはエラー)を受信します。高速接続フェイルオーバー(FCF)は、停止セッションを中断します。リプレイ・ドライバは次を実行します。
後でリプレイ中またはリプレイ後にエラーが発生する場合に備えて、デッド状態の物理セッションを新しいクリーン・セッションに置き換え、FANを再確立します。
トランザクション・ガードを使用して進行中のトランザクションがオープンであった場合の結果を確認することにより、リプレイを準備します。
必要に応じて、初期状態に対するラベリング・コールバックまたは再接続コールバック(これらの1つが登録されている場合)を使用してコールバックします。
トランザクション状態および非トランザクション状態をリカバリし、クライアント・ドライバによって確認されたデータおよびメッセージが、クライアントが確認して決定した可能性があったものと同じであることを手順ごとに検証し、データベース・セッションを再構築します。
Oracle Databaseは、リプレイの開始時およびリプレイの進行中にリプレイを検証します。クライアントが前に決定した可能性がある同じデータ値およびメッセージにクライアント・データを再配置できなかったことが原因で、データベース・セッションが正しく再構築されなかった場合、リプレイ・ドライバはアプリケーションに元のエラーを返します。