分散トランザクション処理機能 OpenTP1 解説

[目次][用語][索引][前へ][次へ]

4.4.5 データベースにアクセスする場合

OpenTP1のUAPで使うユーザファイルに,DBMSを使用した場合について説明します。

<この項の構成>
(1) OpenTP1のトランザクション処理との関係
(2) XAインタフェースでデータベースへアクセスする場合の準備

(1) OpenTP1のトランザクション処理との関係

DBMSを使用する場合,X/Openで規定したDTPモデルのXAインタフェースをサポートしたDBMSかどうかで,OpenTP1のトランザクションと連携できるかどうか決まります。

(a) XAインタフェースをサポートしたDBMSの場合

XAインタフェースをサポートしたDBMSの場合は,OpenTP1のトランザクションと同期を取って更新できます。同期を取る場合は,OpenTP1の同期点を制御する関数(dc_trn_begin関数,dc_trn_unchained_commit関数,tx_begin(),tx_commit()など)を使います。DBMSが提供するトランザクションを制御する機能などは使えません。OpenTP1のトランザクション処理で制御できるDBMSは,XAインタフェースをサポートした製品(例 Oracle7など)に限ります。

XAインタフェースをサポートしている複数のデータベースへアクセスするUAPでは,整合性を保ちながら複数のデータベースを更新できます。次に示すOpenTP1のリソースマネジャは,XAインタフェースをサポートしています。

XAインタフェースに準拠したDBMSと,OpenTP1のリソースマネジャの両方にアクセスするUAPでも,OpenTP1のトランザクションとして処理できます。障害が原因でUAPが異常終了した場合や,OpenTP1を再開始(リラン)した場合でも,DBMSとOpenTP1のリソースマネジャの両方のトランザクションを,OpenTP1で決着します。

(b) XAインタフェースをサポートしていない,またはXAインタフェースでOpenTP1と連携していないDBMSの場合

XAインタフェースをサポートしていないDBMSの場合,DBMSへのアクセスはできますが,OpenTP1のトランザクションとは同期を取れません。

XAインタフェースでOpenTP1と連携していないため,DBMSへのアクセス中に,障害が原因でUAPが異常終了した場合や,OpenTP1を再開始(リラン)した場合には,OpenTP1からDBMSへトランザクションの決着を指示しません。そのため,DBMS独自の機能でトランザクションを回復する必要があります。

(2) XAインタフェースでデータベースへアクセスする場合の準備

XAインタフェースをサポートしたDBMSを,OpenTP1とXAインタフェースで連携して使う場合に準備する項目を次に示します。この準備は,OpenTP1提供以外のリソースマネジャを使う場合に必要です。

(a) OpenTP1への登録

OpenTP1提供以外のリソースマネジャの各種名称を登録します。OpenTP1へは,次に示すどちらかの方法で登録します。

  1. dcsetupコマンドでOpenTP1をセットアップ後,trnlnkrmコマンドを実行する。
  2. 拡張RM登録定義を作成する。

拡張RM登録定義を作成しておくと,dcsetupコマンドでOpenTP1をセットアップしたあとにtrnlnkrmコマンドを実行しなくても良くなります。trnlnkrmコマンドの使い方については,マニュアル「OpenTP1 運用と操作」を参照してください。拡張RM登録定義の指定方法については,マニュアル「OpenTP1 システム定義」を参照してください。

(b) UAPのリンケージ

UAPの実行形式ファイルを作成するときに,トランザクション制御用オブジェクトファイル,およびDBMSのライブラリとオブジェクトモジュールをリンケージする必要があります。

トランザクション制御用オブジェクトファイルは,trnmkobjコマンドを実行して作成します。trnmkobjコマンドの使い方については,マニュアル「OpenTP1 運用と操作」を参照してください。

(c) システム定義

DBMSを使用する場合,トランザクションサービス定義にtrnstring形式の定義を,必要に応じて,ユーザサービス定義,またはユーザサービスデフォルト定義に,trnrmid形式の定義をする必要があります。指定する内容には,DBMS固有の項目もあります。このような項目は,使用するDBMSのマニュアルを参照してください。

trnstring,trnrmid形式の定義を指定すると,一つのリソースマネジャを複数の制御単位に分け,接続するユーザ名称などを変更してリソースマネジャに接続することもできます(リソースマネジャ接続先選択機能)。リソースマネジャ接続先選択機能については,マニュアル「OpenTP1 プログラム作成の手引」を参照してください。

trnstring,trnrmid形式の定義については,マニュアル「OpenTP1 システム定義」を参照してください。

(d) 環境変数

DBMSを使用する場合,特定の環境変数が必要になる場合があります。その場合,トランザクションサービス定義,ユーザサービス定義,またはユーザサービスデフォルト定義に,putenv形式の定義をする必要があります。

putenv形式の定義については,マニュアル「OpenTP1 システム定義」を参照してください。

(e) OpenTP1内部スレッドスタック領域の拡張

DBMSを使用する場合,トランザクションサービス定義で,thread_stack_sizeオペランドにOpenTP1内部で使用するスレッドスタック領域のサイズを設定する必要があります。

定義の詳細については,マニュアル「OpenTP1 システム定義」を参照してください。