7.6.3 トランザクションと同期して転送されるリソース永続化

次に示すリソースは,トランザクションと同期して待機系に転送されます。

ここでは,トランザクションと同期して転送されるリソースの永続化について説明します。永続トランザクションの場合と,非永続トランザクションの場合に分けて説明します。

永続トランザクション非永続トランザクション
待機系にトランザクション起動元となる入力メッセージがあるトランザクションを,永続トランザクションといいます。
待機系に入力メッセージがないトランザクションを,非永続トランザクションといいます。
<この項の構成>
(1) 永続トランザクションでのリソースの永続化
(2) 非永続トランザクションでのリソースの永続化

(1) 永続トランザクションでのリソースの永続化

永続トランザクションでのリソースの永続化の処理方式について説明します。

(a) 送信メッセージ永続化

UAPから送信要求された永続指定のメッセージを待機系に転送して,送信メッセージを永続化します。送信メッセージの永続化処理の流れを次に示します。

  1. 実行系のUAPから永続指定のメッセージ送信要求を受け付けると,コミット確定後に出力キュー(OTQ)にメッセージを登録(出力キュー通番を採番)し,メッセージ送信指示を行います。
  2. 永続化するメッセージをCL同期メッセージとして待機系に転送します。CL同期メッセージを受信した待機系は,出力キュー通番の通番抜けがないことを確認後,仮登録済みの処理キューに送信メッセージを追加し,出力キューにメッセージを登録します。そのあと,送達確認メッセージを応答します。出力キュー通番の通番抜けがある場合は,送達確認メッセージの応答を待ち合わせます。
  3. 実行系は,UAPから送信要求されたメッセージの送信指示を行ったあと,待機系に対して送信が完了した旨のメッセージを転送します。このメッセージをCL同期済み通知メッセージといいます。
  4. CL同期済み通知メッセージを受信した待機系は,仮登録済みの処理キューを登録します。
(b) XDBの更新ログ永続化

XDBの更新ログ(実行系のデータベースの更新情報)を待機系に転送して,更新ログを永続化します。待機系では,更新ログに付加されたコミット通番に従ってデータベースへの反映を行います。更新ログの永続化処理の流れを次の図に示します。

図7-9 更新ログの永続化処理の流れ

[図データ]

説明
  1. UAPからSQLの更新要求を受け付けると,コミット確定後,実行系は待機系に更新ログをCL同期メッセージとして転送します。
  2. CL同期メッセージを受信した待機系は,仮登録済みの処理キューに転送された更新ログを追加し,送達確認メッセージを応答します。更新ログの通番抜けがある場合は,送達確認メッセージの応答を待ち合わせます。
  3. 実行系から待機系に,CL同期済み通知メッセージが転送されます。
  4. CL同期済み通知メッセージを受信した待機系は,仮登録済みの処理キュー(同時実行数1)を登録します。更新ログの通番抜けがある場合は,処理キュー登録を待ち合わせます。
(c) タイマトランザクションの起動要求永続化

UAPからのタイマトランザクションの起動要求時に永続指定がある場合,待機系にタイマトランザクションの情報を転送して,タイマトランザクションの起動要求を永続化します。タイマトランザクションの起動要求の永続化の流れを次に示します。

  1. UAPからの永続指定のタイマトランザクション起動要求を実行系で受け付けると,コミット確定後,実行系は待機系にCL同期メッセージを送信します。
  2. CL同期メッセージを受信した待機系は,タイマトランザクション起動用の処理キューを仮登録し,送達確認メッセージを応答します。
  3. 送達確認メッセージを受信した実行系は,CL同期済み通知メッセージを待機系に送信します。
  4. CL同期済み通知メッセージを受信した待機系は,仮登録済みの処理キューを登録します。
  5. 実行系は,タイマトランザクションのコミット確定後,待機系にCL同期メッセージを送信します。
  6. CL同期メッセージを受信した待機系は,送達確認メッセージを応答します。
  7. 送達確認メッセージを受信した実行系は,CL同期済み通知メッセージを待機系に送信します。
  8. CL同期済み通知メッセージを受信した待機系は,仮登録済みのタイマトランザクション用処理キューを登録します。
(d) 滞留メッセージ永続化

UAPからのee_scd_msg_receive関数の発行によって受信した入力メッセージを待機系に転送します。このとき,待機系で受信済みの入力メッセージは破棄されます。

(2) 非永続トランザクションでのリソースの永続化

非永続トランザクションで,永続指定の送信メッセージや,XDBの更新ログなどの永続化が必要なリソースがある場合,待機系にリソースを転送してリソースを永続化します。ただし,リソースを転送する前に実行系が異常終了した場合,待機系には仮登録した処理キューがないため,UAPの再起動によるリソースの回復はできません。

非永続トランザクションでのXDBの更新ログの永続化処理の流れを次に示します。

  1. 実行系のUAPからSQL(更新)要求を受け付けると,コミット確定後に待機系に更新ログを転送します(CL同期メッセージ)。
  2. CL同期メッセージを受信した待機系は,仮登録済みの処理キューがないため,処理キュー制御用バッファ(PCE)を確保して処理キューの仮登録を行います。そのあと,実行系に送達確認メッセージを応答します。

以降の処理は,永続トランザクションでのリソースの永続化処理の流れと同じになります。

なお,非永続トランザクションの場合,待機系に転送するリソースがないときは,CL同期メッセージまたはCL同期済み通知メッセージは送信されません。