4.5.1 OpenTP1のトランザクション処理との関係
DBMSを使う場合,X/Openで規定したDTPモデルのXAインタフェースをサポートしたDBMSかどうかで,OpenTP1のトランザクションと連携できるかどうか決まります。
(1) XAインタフェースをサポートしたDBMSの場合
XAインタフェースをサポートしたDBMSの場合は,OpenTP1のトランザクションと同期を取って更新できます。同期を取る場合は,OpenTP1の同期点を制御する関数(dc_trn_begin関数,dc_trn_unchained_commit関数,tx_begin(),tx_commit() など)を使います。DBMSで提供する同期点を制御する機能は,OpenTP1の同期点を制御する関数と併用できません。DBMSの同期点を制御する機能を使った場合,リソースの不整合が起こってしまう場合があります。
OpenTP1のトランザクション処理で制御できるDBMSは,XAインタフェースをサポートした製品に限ります。
XAインタフェースをサポートしている場合,複数のデータベースへアクセスするUAPでは,複数のデータベースを,整合性を保ちながら更新できます。次に示すOpenTP1のリソースマネジャは,XAインタフェースをサポートしています。
-
TP1/FS/Direct Access(DAMファイルサービス)
-
TP1/FS/Table Access(TAMファイルサービス)
-
ISAM,ISAM/B(ISAMファイルサービス)
-
TP1/Message Control(メッセージ送受信機能(MCF))
-
TP1/Message Queue(メッセージキューイング機能)
そのため,XAインタフェースに準拠したDBMSと,OpenTP1のリソースマネジャの両方にアクセスするUAPでも,OpenTP1のトランザクションとして処理できます。障害が原因でUAPが異常終了した場合や,OpenTP1を再開始(リラン)した場合でも,DBMSとOpenTP1リソースマネジャの両方のトランザクションを,OpenTP1で決着します。
(2) XAインタフェースをサポートしていない,またはXAインタフェースでOpenTP1と連携していないDBMSの場合
XAインタフェースをサポートしていないDBMSの場合,DBMSへのアクセスはできますが,OpenTP1のトランザクションとは同期を取れません。
XAインタフェースでOpenTP1と連携していないため,DBMSへのアクセス中に,障害が原因でUAPが異常終了した場合や,OpenTP1を再開始(リラン)した場合には,OpenTP1からDBMSへトランザクションの決着を指示しません。そのため,DBMS独自の機能でトランザクションを回復する必要があります。