Hitachi

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


dc_trn_unchained_commit

〈このページの構成〉

名称

非連鎖モードのコミット

形式

ANSI C ,C++の形式

#include <dctrn.h>
int  dc_trn_unchained_commit(void)

K&R版 C の形式

#include <dctrn.h>
int dc_trn_unchained_commit()

機能

グローバルトランザクションの正常終了(コミット)を,トランザクションを構成するトランザクションブランチ,トランザクションサービス,およびリソースマネジャに知らせます。

dc_trn_unchained_commit関数が正常に終了したあとで,新しいグローバルトランザクションは開始しません。

グローバルトランザクションが複数のトランザクションブランチから構成されるとき(関数を呼び出したUAPだけでないとき)は,それぞれのトランザクションブランチの処理結果がコミットとならないかぎり,コミットされません。

dc_trn_unchained_commit関数を呼び出せるのは,ルートトランザクションブランチ(トランザクションを開始したUAP)だけです。それ以外のUAPから呼び出した場合は,リターン値 DCTRNER_PROTO でエラーリターンします。

dc_trn_unchained_commit関数を呼び出すプロセスは,このマニュアルの記述に従って正しく作成されたUAPを稼働させたものでなければなりません。

dc_trn_unchained_commit関数は,同期点処理が完了したときに,正常に終了,またはエラーリターンのどちらかで返ります。dc_trn_unchained_commit関数を呼び出すサービスが正常に終了するためには,UAPの実行環境を設定するときに,トランザクション属性を指定していることが前提です。

リターン値

リターン値

リターン値(数値)

意味

DC_OK

0

正常に終了しました。このプロセスはトランザクション下にはありません。プロセスはグローバルトランザクションの範囲の外です。

DCTRNER_ROLLBACK

-902

現在のトランザクションは,コミットできないでロールバックしました。プロセスはトランザクションの範囲の外です。

DCTRNER_HEURISTIC

-903

dc_trn_unchained_commit関数を呼び出したグローバルトランザクションは,ヒューリスティック決定のため,あるトランザクションブランチはコミットとなり,あるトランザクションブランチはロールバックとなりました。

このリターン値は,ヒューリスティック決定の結果が,グローバルトランザクションの同期点の結果と一致しなかった場合にリターンします。

このリターン値が返る原因になったUAP,リソースマネジャ,およびグローバルトランザクションの同期点の結果は,メッセージログファイルを参照してください。

このリターン値が返ったあと,このプロセスはトランザクション下にはありません。プロセスはグローバルトランザクションの範囲の外です。

DCTRNER_HAZARD

-904

グローバルトランザクションのトランザクションブランチがヒューリスティックに完了しました。しかし,障害のため,ヒューリスティックに完了したトランザクションブランチの同期点の結果がわかりません。

このリターン値が返る原因になったUAP,リソースマネジャ,およびグローバルトランザクションの同期点の結果は,メッセージログファイルを参照してください。

このリターン値が返ったあと,このプロセスはトランザクション下にはありません。プロセスはグローバルトランザクションの範囲の外です。

トランザクションサービス定義で,trn_extend_functionオペランドに00000001を指定し,1相コミット時にリソースマネジャからのリターン値がXAER_NOTAの場合も,DCTRNER_HAZARDを返します。

DCTRNER_PROTO

-905

dc_trn_unchained_commit関数を,正しくないコンテクスト(例えば,すでにトランザクション中にいない)で呼び出しています。トランザクションモードに対する影響はありません。

指定例

if(dc_trn_info(NULL) && dc_trn_unchained_commit() < 0)
  fputs("cannot commit transaction\n",stderr);