Hitachi

OpenTP1 Version 7 分散トランザクション処理機能 TP1/Server Base Enterprise Option 使用の手引


3.4.15 DBキュー書き込み禁止機能

DBキューへの書き込みで障害が発生した場合に,KFSB85652-Iを出力してDBキュー書き込み状態を書き込み禁止状態に変更できます。この機能を利用する場合は,DBキュー機能関連定義のdbq_inhibit_useにYを指定し,dbqgrpdef定義コマンドの-kオプションに1を指定します。

障害発生と判断するのは,DBキューへの書き込み処理で次の状態となった場合です。

この機能を使用すると,DBキューへの書き込み要求が正常終了したあと,DBキューへの書き込みで障害が発生した場合,書き込み禁止状態にしてロールバックします。以降のDBキューへの書き込み要求は,書き込み禁止状態になっているためエラーリターンします。書き込み要求がすぐにリターンすることで任意の後処理が実行できます。詳細は,「3.4.15(1) トランザクションの流れ」を参照してください。

この機能を使用しない場合,DBキューへの書き込み要求が正常終了したあと,DBキューへの書き込みで障害が発生したときは,書き込み禁止状態にせずにロールバックするだけです。以降のDBキューへの書き込み要求も正常終了した後にロールバックします。詳細は,「3.4.5(5) メッセージの書き込み中にDB障害が発生した場合」を参照してください。

書き込み禁止状態は,eedbqinhibitコマンドで解除できます。また,eedbqinhibitコマンドで書き込み禁止状態の設定もできます。

同一プロセスで複数トランザクションから同一DBキューに対する書き込みを行っていた場合に障害が発生すると,タイミングによっては複数のトランザクションがロールバックすることがあります。詳細は,「3.4.15(2) 同一プロセスの複数トランザクションで書き込み要求時の流れ」を参照してください。

また,書き込み禁止状態はプロセスごとで管理します。複数プロセスから同一DBキューに対する書き込みで障害が発生した場合は,それぞれのプロセスでトランザクションがロールバックし,それぞれのプロセスで書き込み禁止状態になります。そのためプロセスごとにeedbqinhibitコマンドによって書き込み禁止状態の解除が必要となります。詳細は,「3.4.15(3) 複数プロセスから同一DBキューへの書き込み要求時の流れ」を参照してください。

同一トランザクションから複数のDBキューに対して書き込み要求を行った場合に,DBキューへの書き込みで障害が発生すると,障害が発生したDBキューだけ書き込み禁止状態となります。詳細は,「3.4.15(4) 同一トランザクションから複数DBキューへ書き込み要求時の流れ」を参照してください。

DBキューへの書き込み要求をDBキューグループ指定で行った場合に,DBキューへの書き込みで障害が発生すると,障害が発生したDBキューだけ書き込み禁止状態としてほかのDBキューへのリトライは行わずにロールバックします。詳細は,「3.4.15(5) DBキューグループ指定で書き込み要求時の流れ」を参照してください。

〈この項の構成〉

(1) トランザクションの流れ

図3‒40 DBキューサービス起動〜書き込みで障害発生

[図データ]

  1. サービスからのメッセージ書き込み関数処理で書き込みメッセージを保留します。

  2. DBキュー書き込み状態を確認し,書き込み可能状態の場合は正常終了します。

  3. トランザクションコミット前処理でDBキュー書き込み時に障害発生。

  4. DBキュー書き込み状態を書き込み禁止状態にします。

  5. 該当するトランザクションをロールバックします。

  6. ERRTRNRを起動します。

  7. サービスからのメッセージ書き込み関数処理で書き込みメッセージを保留します。

  8. DBキュー書き込み状態を確認し,書き込み禁止状態の場合はエラーリターンします。

(2) 同一プロセスの複数トランザクションで書き込み要求時の流れ

図3‒41 同一プロセス内の複数トランザクションからの書き込み要求

[図データ]

同一プロセス内の複数トランザクションから同一DBキューに対して書き込み要求を行う場合,書き込み禁止状態設定前は書き込み要求が正常終了し,書き込み処理で障害が発生すると,トランザクションをロールバックします。書き込み禁止状態設定以降の書き込み要求はエラーリターンします。

(3) 複数プロセスから同一DBキューへの書き込み要求時の流れ

図3‒42 複数プロセスから同一DBキューへの書き込み要求で障害発生時の処理

[図データ]

書き込み禁止状態はプロセスごとに管理するため,障害中のDBキューへ複数プロセスから書き込みを行った場合,それぞれのプロセスごとに書き込みで障害が発生した時点で書き込み禁止状態となります。

また,書き込み禁止状態を解除する場合,それぞれのプロセスで書き込み禁止状態解除コマンドを実行する必要があります。

(4) 同一トランザクションから複数DBキューへ書き込み要求時の流れ

図3‒43 同一トランザクションから複数DBキューへ書き込み要求を行った場合の処理

[図データ]

同一トランザクションから複数のDBキューへ書き込み要求を行った場合に書き込みで障害が発生すると,障害が発生したDBキューだけ書き込み禁止状態を設定して以降の書き込み処理は行わずにロールバックします。

(5) DBキューグループ指定で書き込み要求時の流れ

図3‒44 DBキューグループ指定で書き込み要求を行った場合の処理

[図データ]

DBキューグループ指定で書き込み要求を行った場合に書き込みで障害が発生すると,障害が発生したDBキューだけ書き込み禁止状態にして,同一グループ内の他DBキューへの書き込みリトライは行わずにロールバックします。

書き込み禁止状態となったDBキューは縮退中と同じ扱いとし,DBキューグループ指定時の書き込み対象から除外します。

DBキューグループ指定で書き込み要求を行った場合に,すべてのDBキューが書き込める状態ではなかったとき,書き込み要求はエラーリターンします。