Hitachi

OpenTP1 Version 7 分散トランザクション処理機能 OpenTP1 プログラム作成リファレンス COBOL言語編


TXROLLBACK

〈このページの構成〉

名称

トランザクションのロールバック

形式

 DATA DIVISION.
* Include TX definitions.
 01 TX-RETURN-STATUS.
    COPY TXSTATUS.
 
 PROCEDURE DIVISION.
 CALL "TXROLLBACK" USING TX-RETURN-STATUS.

機能

TXROLLBACKは,呼び出しスレッドのトランザクションの作業をロールバックします。

transaction_control特性が,TX-UNCHAINEDに設定されていた場合で,TXROLLBACKがリターンすると,呼び出し元スレッドはトランザクションモードにはいません。しかし,transaction_control特性がTX-CHAINEDに設定されていた場合で,TXROLLBACKがリターンすると,呼び出し元スレッドは新しいトランザクション下のトランザクションモードにとどまります。transaction_control特性については,TXSETTRANCTLを参照してください。

『次に示すAPIで設定した値は,TXROLLBACKの処理に影響を与えます。』

『TXROLLBACKはMHPからは呼び出せません。』

『データ領域』

『●TX-RETURN-STATUS

TXROLLBACKの実行結果が返されます。』

リターン値

成功した場合,TXROLLBACKはTX-OKを返します。これは,負ではないリターン値です。『0が返ります。』『transaction_control特性がTX-CHAINEDに設定されていた場合は,新しいトランザクションが開始されます。』『TXROLLBACKを呼び出したSPPがルートトランザクションブランチでない場合は,実際のロールバック処理はしないで,そのトランザクションブランチをrollback_only状態にするだけです。ルートトランザクションブランチの同期点処理でロールバックの指示があるまで,トランザクションモードのままとどまります。』

エラー

次のような場合,TXROLLBACKはエラーリターンして,次のうちどれか一つの値を返します。これは,負のリターン値です。

TX-NO-BEGIN

トランザクションはロールバックしましたが,新しいトランザクションを開始できないで,呼び出し元はすでにトランザクションモードにいません。

このリターン値は,transaction_control特性がTX-CHAINEDのときだけ発生します。

TX-MIXED

トランザクションは部分的にコミット,部分的にロールバックしました。transaction_control特性がTX-CHAINEDと設定されていれば,新しいトランザクションが開始されます。

TX-MIXED-NO-BEGIN

トランザクションは部分的にコミット,部分的にロールバックしました。新しいトランザクションは開始できないで,呼び出し元は,すでにトランザクションモードにはいません。

このリターン値は,transaction_control特性がTX-CHAINEDのときだけ返ります。

TX-HAZARD

障害が原因で,トランザクションは部分的にコミット,部分的にロールバックした可能性があります。transaction_control特性がTX-CHAINEDに設定されていれば,新しいトランザクションが開始されます。

TX-HAZARD-NO-BEGIN

障害が原因で,トランザクションは部分的にコミット,部分的にロールバックした可能性があります。新しいトランザクションは開始できないで,呼び出し元はすでにトランザクションモードではありません。

このリターン値は,transaction_control特性がTX-CHAINEDのときだけ返ります。

TX-COMMITTED

トランザクションは,ヒューリスティックにコミットしました。transaction_control特性がTX-CHAINEDに設定されていれば,新しいトランザクションが開始されます。

TX-COMMITTED-NO-BEGIN

トランザクションは,ヒューリスティックにコミットしました。新しいトランザクションは開始できないで,呼び出し元はすでにトランザクションモードにはいません。このリターン値は,transaction_control特性がTX-CHAINEDのときだけ返ります。

TX-PROTOCOL-ERROR

TXROLLBACKは,適切でないコンテクストで呼ばれました(例えば,呼び出し元がトランザクションモードでない)。

TX-FAIL

トランザクションマネジャ,または一つ以上のリソースマネジャで,回復できないエラーが起こりました。トランザクションマネジャ,または一つ以上のリソースマネジャのどちらか,またはその両方が,すでにアプリケーションに代わって作業できないことがエラーの原因です。呼び出し元のトランザクションに対する状態は不明です。

参照

TXBEGIN,TXSETTRANCTL,TXSETTIMEOUT

『OpenTP1で使う場合の注意事項』

  1. 『transaction_control特性がTX-CHAINEDに設定されていた場合,TXROLLBACKを呼び出せるのはルートトランザクションブランチ(TXBEGINを呼び出したUAP)だけです。』

  2. 『transaction_control特性がTX-UNCHAINEDに設定されていた場合,TXROLLBACKはルートトランザクションブランチでなくても呼び出せますが,呼び出したトランザクションブランチによって処理が異なります。TXROLLBACKの呼び出し元がルートブランチの場合,非ルートブランチに対して,RPCを介してロールバック要求をしますが,非ルートブランチでTXROLLBACKを呼び出した場合,呼び出し元の非ルートブランチはrollback_onlyを記録するだけで,ルートブランチに対してRPCを介してロールバック要求をしません。呼び出し元の非ルートブランチは,ルートブランチの指示を待ったあと,ロールバック処理をします。』

  3. 『TXROLLBACKと,OpenTP1の CBLDCTRN は併用できません。』