Hitachi

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


dc_trn_chained_commit

〈このページの構成〉

名称

連鎖モードのコミット

形式

ANSI C ,C++の形式

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

K&R版 C の形式

#include <dctrn.h>
int dc_trn_chained_commit()

機能

トランザクションの同期点を取得します。グローバルトランザクションのルートトランザクションブランチとして,処理が正常に終了したこと(コミット)を,トランザクションを構成するトランザクションブランチのUAP,トランザクションサービス,およびリソースマネジャに知らせます。

dc_trn_chained_commit関数が正常に終了すると,新しいグローバルトランザクションが開始して,関数を呼び出したプロセスはこのトランザクションの範囲内です。しかし,この関数を呼び出したUAP以外のトランザクションモードに対しての指定を意味しません。

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

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

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

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

リターン値

リターン値

リターン値(数値)

意味

DC_OK

0

正常に終了しました。dc_trn_chained_commit関数が終了したあとも,このプロセスはトランザクション下にあって,グローバルトランザクションの範囲内です。

DCTRNER_ROLLBACK

-902

現在のトランザクションは,コミットできないでロールバックしました。

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

DCTRNER_HEURISTIC

-903

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

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

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

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

DCTRNER_HAZARD

-904

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

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

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

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

DCTRNER_PROTO

-905

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

DCTRNER_NO_BEGIN

-924

コミット処理は正常に終了しましたが,新しいトランザクションは開始できませんでした。このリターン値が返ったあと,このプロセスはトランザクション下にはありません。

DCTRNER_ROLLBACK_NO_BEGIN

-925

コミットしようとしたトランザクションは,コミットできないでロールバックしました。新しいトランザクションは開始できませんでした。このリターン値が返ったあと,このプロセスはトランザクション下にはありません。

DCTRNER_HEURISTIC_NO_BEGIN

-926

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

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

このリターン値が返される原因となったUAP,リソースマネジャ,およびグローバルトランザクションの同期点の結果は,メッセージログファイルの内容を参照してください。新しいトランザクションは開始できませんでした。このリターン値が返ったあと,このプロセスはトランザクション下にはありません。

DCTRNER_HAZARD_NO_BEGIN

-927

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

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

新しいトランザクションは開始できませんでした。このリターン値が返ったあと,このプロセスはトランザクション下にはありません。

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

指定例

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