Hitachi

OpenTP1 Version 7 分散トランザクション処理機能 OpenTP1 使用の手引 Windows(R)編


4.6.3 SQL Serverとの連携

ここでは,SQL Serverと連携するために必要な設定について説明します。

〈この項の構成〉

(1) SQL Serverの登録

OpenTP1システムにSQL Serverを登録します。OpenTP1システムへのSQL Serverの登録には,trnlnkrmコマンドを使用します。

trnlnkrmコマンドの実行例を次に示します。

trnlnkrm -a MS_SQL_Server -s msqlsrvxa1 -o xaswitch.lib

trnlnkrmコマンドについては,「7. 運用コマンド」を参照してください。また,trnlnkrmコマンドに指定する「RM名」にはMS_SQL_Serverを指定してください。

「RMスイッチ名」,「RM関連オブジェクト名」については,SQL Serverのマニュアルを参照してください。

trnlnkrmコマンドを実行する場合の注意事項を次に示します。

(2) トランザクションサービス定義の設定

トランザクションサービス定義のtrnstring定義コマンドで,リソースマネジャにアクセスするための情報を指定します。SQL Serverと連携する場合は,-nオプション,-oオプション,-Oオプション,-cオプション,-Cオプション,-および必要に応じて-dオプションを指定します。

-oオプション,-Oオプション,-cオプション,および-Cオプションには,リソースマネジャへのアクセスに使用するxa_open関数用文字列,およびxa_close関数用文字列を指定します。xa_open関数用文字列,およびxa_close関数用文字は次のように指定してください。

SQL Serverのxa_open関数用文字列,およびxa_close関数用文字列として指定する内容の詳細については,SQL Serverのマニュアルを参照してください。

トランザクションサービス定義の定義例を次に示します。

set trn_extend_function=00000001    #add when SQL Server is used.
 
trnstring -n MS_SQL_Server \
-o "Tm=OpenTP1,\
RmRecoveryGuid=986D495E-F4D4-4e80-8B70-9377FFAF33E7,Timeout=180000" \
-O "Tm=OpenTP1,\
RmRecoveryGuid=986D495E-F4D4-4e80-8B70-9377FFAF33E7,Timeout=180000" \
-c "Tm=OpenTP1,\
RmRecoveryGuid=986D495E-F4D4-4e80-8B70-9377FFAF33E7,Timeout=180000" \
-C "Tm=OpenTP1,\
RmRecoveryGuid=986D495E-F4D4-4e80-8B70-9377FFAF33E7,Timeout=180000"

""で囲んだ文字列を継続行記号(\)で区切って改行する場合は,次の行は必ず第1カラム目から記述し,スペースを開けないで文字列を続けてください。

注意事項

X/OpenのXAインタフェースを使用してOpenTP1からSQL Serverにアクセスする場合に発生する障害の多くは,xa_open関数用文字列,およびxa_close関数用文字列の定義誤りによって発生します。KFCA00901-Wメッセージが出力された場合には,xa_open関数用文字列,およびxa_close関数用文字列の定義を見直してください。

(3) UAPの翻訳と結合

SQL ServerにアクセスするUAPを翻訳(コンパイル)および結合(リンケージ)する場合,trnmkobjコマンドで%DCDIR%\spool\trnrmcmd\userobj下に作成したトランザクション制御用オブジェクトをリンケージする必要があります。

コンパイルとリンケージの手順については,「3.2 UAPの翻訳と結合」を参照してください。各言語に関するコンパイルとリンケージのオプションについては,マニュアル「OpenTP1 プログラム作成リファレンス C言語編」および「OpenTP1 プログラム作成リファレンス COBOL言語編」を参照してください。その他のコンパイルとリンケージのオプションについては,MicrosoftまたはSQL Serverのマニュアルを参照してください。

trnmkobjコマンドについては,「7. 運用コマンド」を参照してください。

SQL ServerにアクセスするUAP用トランザクション制御用オブジェクトの作成例を,C言語の場合とCOBOL言語の場合に分けて次に示します。

C言語の場合

trnmkobj -o rm_obj -r MS_SQL_Server 

COBOL言語の場合

trnmkobj -o rm_obj -C "/Zl" -r MS_SQL_Server

(4) メイクファイルの例(C言語の場合)

C言語でSPPを作成する場合のメイクファイルの例を示します。

(a) ソースファイル名

メイクファイルの例中で使用するソースファイル名を次に示します。

  • C言語で作成したUAPのソースプログラム名:

    • exmain.c(メイン関数)

    • exsv1.c(サービス関数1)

    • exsv2.c(サービス関数2)

    • exsql.c(SQL)

  • RPCインタフェース定義ファイル名:ex.def

(b) メイクファイルの例

メイクファイルの例を次に示します。

NODEBUG = 1
!include <ntwin32.mak>
#TP1TEST Make File
SYSLIB = $(conlibsdll)
TP1LIB = [libdam.lib]※1 [libtam.lib]※2 libbetran.lib
SQLSRVLIB = xaswitch.lib odbc32.lib
 
all:TP1TEST.exe
#コンパイル
exmain.obj:exmain.c
        $(cc) $(cflags) $(cvarsdll) $*.c
exsv1.obj:exsv1.c
        $(cc) $(cflags) $(cvarsdll) $*.c
exsv2.obj:exsv2.c
        $(cc) $(cflags) $(cvarsdll) $*.c
ex_sstb.obj:ex_sstb.c
        $(cc) $(cflags) $(cvarsdll) $*.c
exsql.obj:exsql.c
        $(cc) $(cflags) $(cvarsdll) $*.c
#スタブソースファイルの作成
ex_sstb.c:ex.def
        $(DCDIR)\bin\stbmake $?
#リンケージ
TP1TEST.exe: exmain.obj exsv1.obj exsv2.obj ex_sstb.obj exsql.obj
        $(link) $(conflags) -out:$*.exe $** \
        [$(DCDIR)\spool\trnrmcmd\userobj\rm_obj.obj \]※3
        $(TP1LIB) $(SYSLIB) $(SQLSRVLIB)
注※1

libdam.libは,TP1/FS/Direct Accessを使用する場合だけ指定してください。

注※2

libtam.libは,TP1/FS/Table Accessを使用する場合だけ指定してください。

注※3

TP1/FS/Direct AccessまたはTP1/FS/Table Accessを使用する場合には,trnmkobjコマンドでトランザクション制御用オブジェクトを作成するときに,「OpenTP1_DAM」または「OpenTP1_TAM」を追加してください。

(5) メイクファイルの例(COBOL言語の場合)

COBOL言語でSPPを作成する場合のメイクファイルの例を示します。

(a) ソースファイル名

メイクファイルの例中で使用するソースファイル名を次に示します。

  • COBOL2002で作成したUAPのソースプログラム名:main.cbl

  • COBOL2002で作成したUAPのサービスプログラム名:sev1.cbl

  • COBOL2002で作成したUAPのサービスプログラム名:sev2.cbl

  • COBOL2002で作成したSQLプログラム名1:exsql1.cbl

  • COBOL2002で作成したSQLプログラム名2:exsql2.cbl

  • RPCインタフェース定義ファイル名:ex.def

(b) メイクファイルの例

メイクファイルの例を次に示します。

!include <ntwin32.mak>
# TP1TEST Make File
CBLFG1 = -Compile,NoLink -Comp5 -Lib,CUI -SQL,ODBC -Main,System
CBLFG2 = -Compile,NoLink -Comp5 -Lib,CUI -SQL,ODBC
SYSLIB = $(conlibsdll)
TP1LIB = [libdam.lib]※1 [libtam.lib]※2 libbetran.lib
SQLSRVOBJ = xaswitch.lib
CCBL = ccbl2002
LK = ccbl2002 -Lib,CUI
 
all:TP1TEST.exe
# コンパイル
main.obj:main.cbl
        $(CCBL) $(CBLFG1) main.cbl
sev1.obj:sev1.cbl
        $(CCBL) $(CBLFG2) sev1.cbl
sev2.obj:sev2.cbl
        $(CCBL) $(CBLFG2) sev2.cbl
exsql1.obj:exsql1.cbl
        $(CCBL) $(CBLFG2) exsql1.cbl
exsql2.obj:exsql2.cbl
        $(CCBL) $(CBLFG2) exsql2.cbl
ex_sstb.obj:ex_sstb.c
        $(cc) $(cflags) /Zl $(cvarsdll) $*.c
# スタブソースファイルの作成
ex_sstb.c:ex.def
        $(DCDIR)\bin\stbmake $?
# リンケージ
TP1TEST.exe: main.obj sev1.obj sev2.obj ex_sstb.obj \
             exsql1.obj exsql2.obj
        $(LK) -OutputFile $*.exe $** \
        [$(DCDIR)\spool\trnrmcmd\userobj\rm_obj.obj \]※3
        $(TP1LIB) $(SYSLIB) $(SQLSRVOBJ)
注※1

libdam.libは,TP1/FS/Direct Accessを使用する場合だけ指定してください。

注※2

libtam.libは,TP1/FS/Table Accessを使用する場合だけ指定してください。

注※3

TP1/FS/Direct AccessまたはTP1/FS/Table Accessを使用する場合には,trnmkobjコマンドでトランザクション制御用オブジェクトを作成するときに,「OpenTP1_DAM」または「OpenTP1_TAM」を追加してください。

(6) SQL Serverとの連携時の注意事項