4.1.1 Microsoft SQL Server連携時の環境設定
- 〈この項の構成〉
(1) Microsoft SQL Serverの登録
Microsoft SQL Serverをリソースマネジャとして登録するには,[リソースマネジャのXA関連オブジェクト]ダイアログボックスを使用します。ダイアログボックスについては,「2.1.3(2) リソースマネジャのXA関連オブジェクトの設定」を参照してください。また,Microsoft SQL Serverを登録するときに必要な「関連オブジェクト名称」などについては,Microsoft SQL ServerのXAインタフェースに関して記載されたマニュアルを参照してください。
[リソースマネジャのXA関連オブジェクト]ダイアログボックスでの指定例を次に示します。
C:\PROGRA~1\MICROS~3.NET\Vc7\PLATFO~1\Lib\xaSwitch.Lib
(2) Microsoft SQL Server連携時のOPEN,CLOSE文字列の設定
TP1/LiNKでは,X/OpenのXAインタフェースで定められているリソースマネジャのOpen,Close文字列を設定する必要があります。Open,Close文字列は,[OPEN,CLOSE文字列]ダイアログボックスで設定します。ダイアログボックスについては,「2.1.3(4) Open,Close文字列の指定」を参照してください。Microsoft SQL ServerのOpen,Close文字列として指定する内容については,Microsoft SQL Serverのマニュアルを参照してください。
[OPEN,CLOSE文字列]ダイアログボックスでの指定例を次に示します。
- [トランザクションサービス用xa_open関数用文字列(T)]
-
Tm=OpenTP1,RmRecoveryGuid=986D495E-F4D4-4e80-8B70-9377FFAF33E7,Timeout=180000
- [トランザクションサービス用xa_close関数用文字列(S)]
-
Tm=OpenTP1,RmRecoveryGuid=986D495E-F4D4-4e80-8B70-9377FFAF33E7,Timeout=180000
- [ユーザサーバ用xa_open関数用文字列(U)]
-
Tm=OpenTP1,RmRecoveryGuid=986D495E-F4D4-4e80-8B70-9377FFAF33E7,Timeout=180000
- [ユーザサーバ用xa_close関数用文字列(F)]
-
Tm=OpenTP1,RmRecoveryGuid=986D495E-F4D4-4e80-8B70-9377FFAF33E7,Timeout=180000
RmRecoveryGuidの値は,グローバルで一意な値を指定します。Microsoft Visual C++が提供する「guidgen」ユーティリティプログラムの「Registry Format」で取得した値(括弧は省く)を指定してください。
Timeoutの値は,XAトランザクションのタイムアウト値をミリ秒単位で指定します。タイムアウト時間が経過すると,Microsoft SQL Server(Windows MSDTC)はXAトランザクションを自動的にロールバックします。また,Open,Close文字列には,すべて同じ値を指定します。詳細は,Microsoft SQL Serverのマニュアルを参照してください。
(3) Microsoft SQL Server連携時のUAPのコンパイルとリンケージ
UAPを作成する場合には,[オブジェクト作成]ダイアログボックスで「%DCDIR%\spool\trnrmcmd\userobj\」に作成した,トランザクション制御用オブジェクトファイルをリンケージしてください。ダイアログボックスについては,「2.1.3(5) トランザクション制御用オブジェクトファイルの作成」を参照してください。
(4) MSDTCの設定
リソースマネジャにMicrosoft SQL Serverを使用する場合,MSDTCのXAトランザクションを有効にする必要があります。MSDTCのXAトランザクションは,次の手順で有効にできます。
-
[スタート]−[プログラム]−[管理ツール]−[コンポーネントサービス]をクリックします。
-
管理コンソールで[コンポーネントサービス]−[コンピュータ]−[マイコンピュータ]を選択します。
-
[操作]−[プロパティ]を選択します。
-
[MSDTC]タブで[セキュリティの構成]ボタンをクリックします。
-
[セキュリティの構成]ダイアログボックスで[XAトランザクションを有効にする]チェックボックスをオンにして,[OK]ボタンをクリックします。※
-
MSDTCを再起動します。
- 注※
-
使用しているトランザクション形態に合わせ,[トランザクション マネージャー通信]も設定してください。
(5) Microsoft SQL Server連携時に必要な定義
リソースマネジャにMicrosoft SQL Serverを使用する場合,トランザクションサービス定義(%DCDIR%\conf\trnファイル)にtrn_extend_functionオペランドを追加します。これによって,次の条件が重なった場合にTP1/LiNKのトランザクションの決着関数はDC_OK(0)ではなく,DCTRNER_HAZARD(-904)またはTX_HAZARD(-4)を返すようにできます。
-
リソースマネジャへのアクセスがMicrosoft SQL Serverしか存在しない(1相コミットで決着を行う)
-
Microsoft SQL Serverが,Timeoutの指定によってトランザクションを自動的にロールバックする
trn_extend_functionオペランドについて次に示します。
形式
set trn_extend_function = トランザクションサービスの機能拡張レベル 〜〈16進数字〉((00000000〜00000001))《00000000》
説明
トランザクションサービスの機能の拡張レベルを,次の中から指定します。
次の指定値で示す機能の拡張レベルを複数指定する場合,それぞれの指定値の論理和を指定してください。
- 00000000
-
トランザクションサービスの機能を拡張しません。
- 00000001
-
1相コミット時に,リソースマネジャからXAER_NOTAが返ってきた場合の関数のリターン値はDC_OK(または,TX_OK)ではなくDCTRNER_HAZARD(-904)(または,TX_HAZARD(-4))を返します。
このオペランドは,トランザクションブランチが関連するすべてのOpenTP1ノードのトランザクションサービス定義で指定してください。
トランザクションブランチが関連するすべてのOpenTP1ノードのうち,このオペランドの指定がないノードが一つ以上ある場合,1相コミットでリソースマネジャからXAER_NOTAが返されたときは,ルートトランザクションブランチのリターン値は変更されません。
1相コミットで,リソースマネジャからXAER_NOTAが返された場合の関数のリターン値を次の表に示します。
関数
リターン値
trn_extend_function=00000000の場合
trn_extend_function=00000001の場合
dc_trn_chained_commit
(CBLDCTRN('C-COMMIT'))
DC_OK(00000)
DCTRNER_HAZARD(00904),DCTRNER_HAZARD_NO_BEGIN(00927)
dc_trn_unchained_commit
(CBLDCTRN('U-COMMIT'))
DC_OK(00000)
DCTRNER_HAZARD(00904),
tx_commit
(TXCOMMIT)
TX_OK(TX-OK)
TX_HAZARD(TX-HAZARD),TX_HAZARD_NO_BEGIN(TX-HAZARD-NO-BEGIN)
dc_mcf_commit
(CBLDCMCF('COMMIT'))
DCMCFRTN_00000(00000)
DCMCFRTN_HAZARD(70908)
- 注
-
括弧内の英数字は,COBOL言語を使用した場合の関数名およびステータスコードです。
定義例
定義の最終行には,改行を入力してください。
# ALL RIGHTS RESERVED, COPYRIGHT (C)1994, HITACHI, LTD. # LICENSED MATERIAL OF HITACHI,LTD. # * # * トランザクションサービス定義 # * 環境名: trn # * # TP1/LiNK (trn) set trn_tran_process_count = 32 set trn_wait_rm_open = continue trnstring -n MS_SQL_Server \ -o "Tm=OpenTP1,RmRecoveryGuid=986D495E-…33E7,Timeout=180\ 000"\ -c "Tm=OpenTP1,RmRecoveryGuid=986D495E-…33E7,Timeout=180\ 000"\ -O "Tm=OpenTP1,RmRecoveryGuid=986D495E-…33E7,Timeout=180\ 000"\ -C "Tm=OpenTP1,RmRecoveryGuid=986D495E-…33E7,Timeout=180\ 000"\ set trn_extend_function = 00000001
(6) Microsoft SQL Server連携時の注意事項
リソースマネジャにMicrosoft SQL Serverを使用する場合,UAP作成時に次の点に注意してください。
-
DB-LibraryによってXA連携を行う場合(UAPをC言語またはMicrosoft Visual C++で作成)
TP1/LiNKのトランザクションとMicrosoft SQL Serverとの接続をXAで関連付けるために,各トランザクションブランチの先頭で関連付けを行うdbenlistxatrans関数を発行する必要があります。この関数が発行されていないと,TP1/LiNKで管理しているトランザクションで決着ができません。詳細は,Microsoft SQL Serverのマニュアルを参照してください。
-
ODBC接続によってXA連携を行う場合(UAPをC言語またはMicrosoft Visual C++で作成)
TP1/LiNKのトランザクションとMicrosoft SQL Serverとの接続をXAで関連付けるために,各トランザクションブランチの先頭で関連付けするSQLSetconnectOption関数またはSQLSetConnectAttr関数を発行する必要があります。この関数が発行されていないと,TP1/LiNKで管理しているトランザクションによる決着ができません。詳細は,Microsoft SQL Serverのマニュアルを参照してください。
-
ODBC接続によってXA連携を行う場合(COBOL言語で作成)
TP1/LiNKのトランザクションとMicrosoft SQL Serverとの接続をXAで関連付けるために,各トランザクションブランチの先頭で関連付けを行うサービスルーチン(COBOL言語で提供するCBLSQLSETOPT)を発行する必要があります。このサービスルーチンが発行されていないと,TP1/LiNKで管理しているトランザクションによる決着ができません。また,Microsoft SQL ServerとXA連携を行う[SPP環境設定]ダイアログボックスまたは[SUP環境設定]ダイアログボックスの[ユーザサーバの環境変数]の[変数(Y)](または[変数(B)])に「CBLSQLCOMMOD」を,[値(Z)]に「AUTO」を設定してください。各ダイアログボックスについては,「3.2.1 SPPの実行環境の設定」および「3.3.1 SUPの実行環境の設定」を参照してください。
また,連鎖型RPCを使用する場合には,次の三つの関数およびサービスルーチンを2回目以降のRPCで発行しないようにしてください。
-
dbenlistxatrans関数
-
SQLSetconnectOption関数
-
CBLSQLSETOPT