以下のセクションでは、 DB2 をリソース・マネージャーとして使用するように特定の製品を構成する方法を説明します。 以下のいずれかを使用することができます。
DB2 をリソース・マネージャーとして使用するよう IBM TXSeries CICS を構成する方法については、 お手持ちの IBM TXSeries CICS Administration Guide を参照してください。 TXSeries の資料は、 http://www.transarc.com/Library/documentation/websphere/WAS-EE/en_US/html/ でオンライン表示することができます。
ホストおよび AS/400 データベース・サーバーは、 CICS 調整トランザクションに参加することができます。
以下に示すさまざまな API および構成パラメーターは、 Encina モニターと DB2 ユニバーサル・データベース・サーバーの統合に必要とされるもの、 および (DB2 コネクトを使ってアクセスする場合) DB2 (MVS 版)、DB2 (OS/390 版)、 DB2 (AS/400 版)、または DB2 (VSE および VM 版) と Encina モニターとの統合に 必要とされるものです。 TXSeries の資料は、 http://www.transarc.com/Library/documentation/websphere/WAS-EE/en_US/html/ でオンライン表示することができます。
ホストおよび AS/400 データベース・サーバーは、 Encina 調整トランザクションに参加することができます。
DB2 を構成するには、次のようにします。
DB2 CATALOG DATABASE inventdb AS inventdb AT NODE host1 AUTH SERVER DB2 CATALOG TCPIP NODE host1 REMOTE hostname1 SERVER svcname1
db2 update dbm cfg using tp_mon_name ENCINA
Encina をリソース・マネージャー (RM) ごとに構成するには、管理者は、 リソース・マネージャーをアプリケーション内のトランザクションに登録する前に、 各 DB2 データベースのオープン・ストリング、クローズ・ストリング、 および制御の取り決め (Control Agreement) のスレッドを、リソース・マネージャーとして定義する必要があります。 Enconcole 全画面インターフェース、 または Encina コマンド行インターフェースを使用して構成を実行できます。 次に例を示します。
monadmin create rm inventdb -open "db=inventdb,uid=user1,pwd=password1"
各 DB2 データベースごとに 1 つのリソース・マネージャーがあります。 各リソース・マネージャー構成には、 1 つの rm 名 (「論理 RM 名」) がなければなりません。 状況を単純にするため、rm 名をデータベース名と同じにするとよいでしょう。
xa_open ストリングには、 データベースへの接続を確立するために必要な情報が入っています。 このストリングの内容は、RM によって異なります。 DB2 UDB の xa_open ストリングには、開くデータベースの別名が入っており、 オプションで、接続に関連させるユーザー ID とパスワードが入っています。 ここで定義されるデータベース名は、 すべてのデータベース・アクセスに必要な正規のデータベース・ディレクトリーにも カタログする必要があることに注意してください。 DB2 の xa_open ストリングについては、データベースをリソース・マネージャーとして設定するを参照してください。
DB2 は、xa_close ストリングを使用しません。
制御の取り決めのスレッドは、アプリケーション・エージェント・スレッドが同時に 2 つ以上のトランザクションを扱うことができるかどうかを判別します。 DB2 UDB は、デフォルトの TMXA_SERIALIZE_ALL_OPERATIONS を サポートしていますが、 この場合、トランザクションが完了した後にしかスレッドを再使用できません。
DB2 (OS/390 版)、DB2 (MVS 版)、DB2 (AS/400 版)、 または DB2 (VSE および VM 版) にアクセスする場合は、 DB2 同期点マネージャーを使用する必要があります。 構成の指示については、DB2 コネクト エンタープライズ・エディション (OS/2 および Windows 版) 概説およびインストール を参照してください。
Encina アプリケーションから DB2 データベースを参照するには、次のようにします。
rc = mon_SetSchedulingPolicy (MON_EXCLUSIVE)
DB2 (DB2 ユニバーサル・データベース、ホスト、または AS/400 データベース・サーバー) については、 デフォルト設定の MON_EXCLUSIVE を使用する必要があります。 そのようにすることによって、次のことが保証されます。
注: | ODBC または DB2 コール・レベル・インターフェースを使用している場合は、 マルチスレッド・サポートを使用不可にしなければなりません。 これは、CLI 構成パラメーター DISABLEMULTITHREAD = 1 (マルチスレッドを使用不可にする) を設定することによって行えます。 DB2 ユニバーサル・データベースのデフォルトは、 DISABLEMULTITHREAD = 0 (マルチスレッドを使用可能にする) です。 詳しくは、コール・レベル・インターフェースの手引きおよび解説書 を参照してください。 |
rc = mon_RegisterRmi ( &db2xa_switch, /* xa switch */ "inventdb", /* logical RM name */ &rmiId ); /* internal RM ID */
XA スイッチは、TM が呼び出すことのできる RM の XA ルーチンのアドレスを含んでおり、 RM が提供する機能性も指定します。 DB2 ユニバーサル・データベースの XA スイッチは、db2xa_switch で、 これは DB2 クライアント・ライブラリー (Windows オペレーティング・システム および OS/2 では db2app.dll、 UNIX ベースのシステムでは libdb2) にあります。
論理 RM 名は Encina が使用する名前で、 Encina の下で実行される SQL アプリケーションが使用する実際のデータベース名ではありません。 実際のデータベース名は、Encina RM 登録 API の xa_open ストリングで指定されます。 この例では、 論理 RM 名がデータベース名と同じになるように設定されています。
3 番目のパラメーターは、 この接続を参照するために TM が使用する内部識別子またはハンドルを戻します。
注: | TM-XA インターフェースを介した DB2 のトランザクション処理に Encina を使用する際には、 Encina のネストされたトランザクションが、 現在 DB2 XA インターフェースではサポートされていないことに注意してください。 可能であれば、このようなトランザクションは使用しないでください。 使用を避けられない場合は、 SQL の作業を必ず Encina トランザクション・ファミリーの 1 メンバーだけで行ってください。 |
DB2 をリソース・マネージャーとして使用するよう Tuxedo を構成するには、 以下のステップを実行します。
コンパイラーと DB2 アプリケーション開発クライアントも必要です。 必要ならこれらをインストールします。
# DB2 UDB UDB_XA:db2xa_switch:-L${DB2DIR} /lib -ldb2ここで、 {TUXDIR} は Tuxedo をインストールしたディレクトリー、 {DB2DIR} は DB2 インスタンス・ディレクトリーです。
# DB2 UDB UDB_XA;db2xa_switch;%DB2DIR%\lib\db2api.libここで、%TUXDIR% は Tuxedo をインストールしたディレクトリー、 %DB2DIR% は DB2 インスタンス・ディレクトリーです。
${TUXDIR}/bin/buildtms -r UDB_XA -o ${TUXDIR}/bin/TMS_UDBここで、{TUXDIR} は Tuxedo をインストールしたディレクトリーです。
%TUXDIR%\bin\buildtms -r UDB_XA -o %TUXDIR%\bin\TMS_UDB
${TUXDIR}/bin/buildserver -r UDB_XA -f svcfile.o -s SVC1,SVC2 -o UDBserverここで、{TUXDIR} は Tuxedo をインストールしたディレクトリーです。
%TUXDIR%\bin\buildserver -r UDB_XA -f svcfile.o -s SVC1,SVC2 -o UDBserverここで、%TUXDIR% は Tuxedo をインストールしたディレクトリーです。
UDB_GRP LMID=simp GRPNO=3 TMSNAME=TMS_UDB TMSCOUNT=2 OPENINFO="UDB_XA:db=sample,uid=db2_user,pwd=db2_user_pwd"ここで、TMSNAME パラメーターは以前に作成したトランザクション・モニター・サーバー・プログラムを指定し、 OPENINFO パラメーターはリソース・マネージャー名を指定しています。 これに続けてデータベース名と DB2 ユーザーとパスワードがありますが、これらは認証に使用されます。
以前に構築したアプリケーション・サーバーは、 Tuxedo 構成ファイルの *SERVERS セクション内で参照されています。
tmboot -yコマンドが終了すると、Tuxedo メッセージはサーバーが開始されたことを示します。 さらに、DB2 コマンド LIST APPLICATIONS ALL を出すと、 2 つの接続が表示されます (この場合、 Tuxedo 構成ファイルの UDB グループの TMSCOUNT パラメーターによって指定された UDBCONFIG)。
DB2 UDB V5.2 以降のバージョンを、 Microsoft Transaction Server (MTS) バージョン 2.0 に完全に統合できます。 Windows 32 ビット オペレーティング・システム上で MTS の下で実行されているアプリケーションは、DB2 UDB、ホスト、 および AS/400 サーバーと他の MTS 準拠のリソース・マネージャーとの 2 フェーズ・コミットを調整するために MTS を使用できます。
Microsoft Transaction Server サポートは、自動的に使用可能になります。 tp_mon_name データベース・マネージャー構成パラメーターを MTS に設定できるものの、 これは必要ではなく、無視されます。
注: | 付加的な技術情報が IBM の Web サイトで提供されており、 DB2 MTS サポートのインストールと構成について詳しく知ることができます。 URL を http://www.ibm.com/software/data/db2/library/ に設定し、 キーワード "MTS" で DB2 Universal Database の "Technote" を検索します。 |
MTS サポートでは、DB2 クライアント・アプリケーション (CAE) バージョン 5.2 以降が必要で、 MTS は Hotfix 0772 のバージョン 2.0 以降でなければなりません。
DB2 ODBC ドライバーを Windows 32 ビット オペレーティング・システムにインストールすると、 次のように、新しいキーワードがレジストリーに自動的に追加されます。
HKEY_LOCAL_MACHINE\software\ODBC\odbcinit.ini\IBM DB2 ODBC Driver: Keyword Value Name: CPTimeout Data Type: REG_SZ Value: 60
以下に、MTS のインストールと構成についての考慮事項を要約します。 DB2 の MTS サポートを使用するには、以下のようにする必要があります。
DB2 CLI/ODBC アプリケーションを実行している場合には、 以下の構成キーワード (db2cli.ini ファイルに設定されている) は、 デフォルト値から変更してはなりません。
MTS サポートを利用するために作成される DB2 CLI アプリケーションは、 上記のキーワードに対応する属性値を変更してはなりません。 加えて、アプリケーションは以下の属性のデフォルト値を変更してはなりません。
注: | 付加的な技術情報が IBM の Web サイトで提供されており、 DB2 MTS サポートのインストールと構成について詳しく知ることができます。 URL を http://www.ibm.com/software/data/db2/library/ に設定し、 キーワード "MTS" で DB2 Universal Database の "Technote" を検索します。 |
MTS 調整トランザクションを使用した複数サイト更新用に、 以下のサーバーがサポートされています。
MTS Explorer ツールで、トランザクション・タイムアウト値を設定できます。 詳しくは、 オンラインの MTS Administrator Guide を参照してください。
トランザクションにトランザクション・タイムアウト値 (デフォルト値は 60 秒) 以上の時間がかかる場合は、 MTS は関係するすべてのリソース・マネージャーに非同期に打ち切りを出し、 トランザクション全体が打ち切られます。
DB2 サーバーへの接続については、打ち切りは DB2 ロールバック要求に変換されます。 他のすべてのデータベース要求と同じように、 データベース・サーバー上のデータの保全性を保証するために、 ロールバック要求は接続に基づいてシリアル化されます。
その結果、次のようになります。
接続のプールによって、アプリケーションは接続のプールから接続を使用できるので、 接続を使用するたびに再確立する必要はありません。 接続が作成されてプールに置かれると、 アプリケーションは完全な接続処理を実行せずに、その接続を再使用できます。 接続は、アプリケーションが ODBC データ・ソースから切断されるときにプールされ、 属性が同じである新しい接続に与えられます。
接続のプールは、ODBC ドライバー・マネージャー 2.x 以降の機能です。 MTS と共に出荷された最新の ODBC ドライバー・マネージャー (バージョン 3.5) では、 接続のプールの構成が変更され、 トランザクション MTS COM オブジェクトの ODBC 接続の動作が新しくなりました (同一トランザクションに参加している COM オブジェクト間での ODBC 接続の再使用を参照)。
ODBC ドライバー・マネージャー 3.5 では、接続のプールを活動化させる前に、 ODBC ドライバーは新しいキーワードをレジストリーに登録する必要があります。 このキーワードは次のとおりです。
Key Name: SOFTWARE\ODBC\ODBCINST.INI\IBM DB2 ODBC DRIVER Name: CPTimeout Type: REG_SZ Data: 60
32 ビット Windows オペレーティング・システム用の DB2 ODBC ドライバー バージョン 6 およびそれ以降は、 接続プールを完全にサポートします。 したがって、このキーワードは登録されています。 バージョン 5.2 クライアントでは、 Fix Pack 3 (WR09024) またはそれ以降のバージョンをインストールしなければなりません。
デフォルト値 60 は、 接続が切断されるまで 60 秒間プールされることを意味します。
接続が多い環境では、CPTimeout 値を大きな値にして (Microsoft は 特定の環境について 10 分を推奨しています)、 物理的な接続と切断を多くし過ぎないようにするのがよいでしょう。 なぜなら、物理的な接続と切断が多いと、 システム・メモリーと通信スタック・リソースも含めたシステム・リソースが 大量に使用されるためです。
さらに、複数のプロセッサーがあるマシン上でオブジェクトが 同じトランザクションに必ず同じ接続を使うようにするためには、 1 つのプロセッサーに対する複数のプールのサポートをオフにする必要があります。 これを行うには、以下のレジストリー設定を odbcpool.reg という ファイルにコピーし、それを平文テキスト・ファイルとして保管してから、 コマンド odbcpool.reg を発行します。 これによって、Windows オペレーティング・システムに これらのレジストリー設定がインポートされます。
REGEDIT4 [HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\ODBC Connection Pooling] "NumberOfPools"="1"
このキーワードが 1 に設定されていないと、 MTS は複数の異なるプールに接続をプールする可能性があり、 その場合には同じ接続が再使用されません。
MTS COM オブジェクトが ADO を使用してデータベースにアクセスする場合は、 OLEDB リソースのプールをオフにして、 Microsoft の ODBC 用 OLEDB プロバイダー (MSDASQL) が ODBC の接続プールを 妨害しないようにする必要があります。 この機能は ADO 2.0 では OFF に初期化されていましたが、 ADO 2.1 では ON に初期化されています。 OLEDB リソースのプールをオフにするには、 以下の行を oledb.reg というファイルにコピーし、 それを平文テキスト・ファイルとして保管してから、 コマンド oledb.reg を発行します。 これによって Windows オペレーティング・システムに このレジストリー設定がインポートされます。
REGEDIT4 [HKEY_CLASSES_ROOT\CLSID\{c8b522cb-5cf3-11ce-ade5-00aa0044773d}] @="MSDASQL" "OLEDB_SERVICES"=dword:fffffffc
MTS COM オブジェクトでの ODBC 接続では、接続プールが自動的にオンにされます (COM オブジェクトでトランザクションを行えるかどうかにかかわらず)。
同一のトランザクションに参加している複数の MTS COM オブジェクトについては、 次のような方法で、2 つ以上の COM オブジェクトで接続を再使用できます。
COM1 および COM2 という 2 つの COM オブジェクトがあり、 どちらも同じ ODBC データ・ソースに接続され、 同じトランザクションに参加するとします。
COM1 が接続されて作業を終えると、切断されて接続はプールされます。 しかし、この接続はトランザクションが同じである他の COM オブジェクトが使用するために予約されます。 他のトランザクションでこの接続を使用できるようになるのは、 現在のトランザクションが終了した後です。
COM2 が同じトランザクションで呼び出されると、プールされている接続が与えられます。 MTS は、同じトランザクションに参加している COM オブジェクトにのみ、 接続が与えられるようにします。
他方、COM1 が明示的に切断されない場合は、 トランザクションが終了するまで接続が独占されます。 COM2 が同じトランザクションで呼び出されると、別の接続が獲得されます。 したがって、このトランザクションでは、1 つではなく 2 つの接続が独占されます。
同一のトランザクションに参加している COM オブジェクトの接続機能をこのように再使用することは、 次のような理由により、望ましいものです。
多くの物理的な接続と切断が同時に生じるような作業負荷が大きい環境で、 低い CPTimeout 値が使用される場合は、 TCP/IP スタックにリソース上の制約が生じることがあります。
この問題を解決するには、TCP/IP レジストリー・エントリーを使用します。 これは、 Windows NT Resource Guide, Volume 1 で説明されています。 レジストリー・キー値は、 HKEY_LOCAL_MACHINE-> SYSTEM-> CurrentControlSet-> Services-> TCPIP-> Parameters に保管されています。
デフォルト値と推奨されている値は次のとおりです。
名前 | デフォルト値 | 推奨値 |
---|---|---|
KeepAlive time | 7200000 (2 時間) | 同じ |
KeepAlive interval | 1000 (1 秒) | 10000 (10 秒) |
TcpKeepCnt | 120 (2 分) | 240 (4 分) |
TcpKeepTries | 20 (20 回再試行) | 同じ |
TcpMaxConnectAttempts | 3 | 6 |
TcpMaxConnectRetransmission | 3 | 6 |
TcpMaxDataRetransmission | 5 | 8 |
TcpMaxRetransmissionAttempts | 7 | 10 |
レジストリー値が定義されていない場合は、作成してください。 |
MTS に付属の "BANK" サンプル・プログラムを使用して、 クライアント製品と MTS のセットアップをテストできます。
以下のステップに従ってください。
[ODBC] DRIVER=IBM DB2 ODBC DRIVER UID=your_user_id PWD=your_password DSN=your_database_alias Description=MTS Samples
ここで、各パラメーターは以下のとおりです。
db2 bind @C:\sqllib\bnd\db2cli.lst blocking all grant public
サーバーが DRDA ホスト・サーバーである場合は、 接続先のホスト (OS/390、AS/400、あるいは VSE&VM) に応じて、 ddcsmvs.lst、ddcs400.lst、 または ddcsvm.lst をバインドします。 次に例を示します。
db2 bind @C:\sqllib\bnd\@ddcsmvs.lst blocking all grant public
サーバーが DRDA ホスト・サーバーでない場合は、 次のようにして db2ubind.lst ファイルをバインドします。
db2 bind @C:\sqllib\bnd\@db2ubind.lst blocking all grant public
db2 create table account (accountno int, balance int) db2 insert into account values(1, 1)