管理の手引き


DB2 UDB を使用するよう XA トランザクション・マネージャーを構成する

以下のセクションでは、 DB2 をリソース・マネージャーとして使用するように特定の製品を構成する方法を説明します。 以下のいずれかを使用することができます。

IBM TXSeries CICS の構成

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 調整トランザクションに参加することができます。

IBM TXSeries Encina の構成

以下に示すさまざまな 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 を構成するには、次のようにします。

  1. すべてのデータベース名を DB2 データベース・ディレクトリーで定義する必要があります。 データベースがリモート・データベースの場合は、ノード・ディレクトリー入り口も定義する必要があります。 構成を行うには、クライアント構成アシスタント (CCA) または DB2 コマンド行プロセッサー (CLP) を使用できます。 次に例を示します。
       DB2 CATALOG DATABASE inventdb AS inventdb AT NODE host1 AUTH SERVER
       DB2 CATALOG TCPIP NODE host1 REMOTE hostname1 SERVER svcname1
    
  2. DB2 クライアントは、Encina を処理していることを認識している場合は、 内部処理を Encina 用に最適化できます。 これを指定するには、tp_mon_name データベース・マネージャー 構成パラメーターを ENCINA に設定します。 デフォルト動作は、特別な最適化なしです。 tp_mon_name を設定する場合、アプリケーションでは、 作業単位を実行するスレッドもまた、 作業完了の直後にその作業を必ずコミットしなければなりません。 他の作業単位を開始してはなりません。 ご使用の環境がこのようになっていない 場合は、 tp_mon_name 値を必ず NONE にしてください (または、CLP からこの値を NULL に設定します)。 このパラメーターはコントロール・センターまたは CLP から更新できます。 CLP コマンドを以下に示します。
       db2 update dbm cfg using tp_mon_name ENCINA
    

リソース・マネージャーごとの 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 データベースの参照

Encina アプリケーションから DB2 データベースを参照するには、次のようにします。

  1. Encina Scheduling Policy API を使用して、 単一 TP モニター・アプリケーション・プロセスから実行できるアプリケーション・エージェントの数を指定します。 次に例を示します。
       rc = mon_SetSchedulingPolicy (MON_EXCLUSIVE)
    

    DB2 (DB2 ユニバーサル・データベース、ホスト、または AS/400 データベース・サーバー) については、 デフォルト設定の MON_EXCLUSIVE を使用する必要があります。 そのようにすることによって、次のことが保証されます。

    注:ODBC または DB2 コール・レベル・インターフェースを使用している場合は、 マルチスレッド・サポートを使用不可にしなければなりません。 これは、CLI 構成パラメーター DISABLEMULTITHREAD = 1 (マルチスレッドを使用不可にする) を設定することによって行えます。 DB2 ユニバーサル・データベースのデフォルトは、 DISABLEMULTITHREAD = 0 (マルチスレッドを使用可能にする) です。 詳しくは、コール・レベル・インターフェースの手引きおよび解説書 を参照してください。

  2. Encina RM Registration API を使用して、XA スイッチと、 アプリケーション・プロセスで RM を参照する時に Encina が使用する論理 RM 名を提供します。 次に例を示します。
       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 メンバーだけで行ってください。

BEA Tuxedo の構成

DB2 をリソース・マネージャーとして使用するよう Tuxedo を構成するには、 以下のステップを実行します。

  1. Tuxedo の資料で指定されているように Tuxedo をインストールする。 ログ・ファイルと環境変数を含めた、Tuxedo のすべての基本構成を必ず実行してください。

    コンパイラーと DB2 アプリケーション開発クライアントも必要です。 必要ならこれらをインストールします。

  2. Tuxedo サーバー ID で、 Tuxedo に使用させたいデータベースを含むインスタンスを参照するように DB2INSTANCE 環境変数を設定します。 DB2 プログラム・ディレクトリーを含むように PATH 変数を設定します。 Tuxedo サーバー ID で DB2 データベースに接続できることを確認します。
  3. TUXEDOの値でデータベース・マネージャー構成パラメーター tp_mon_name を更新します。
  4. DB2 の定義を Tuxedo リソース・マネージャー定義ファイルに追加します。 以下の例では、UDB_XA は、ローカルに定義される DB2 のリソース・マネージャー名で、 db2xa_switch は、タイプ xa_switch_t の構造体の DB2 定義の名前です。
  5. 次のようにして、DB2 の Tuxedo トランザクション・モニターを構築する。
  6. アプリケーション・サーバーを構築する。 以下の例では、-r オプションはリソース・マネージャー名を指定し、 -f オプション (複数回使用可) はアプリケーション・サービスを含むファイルを指定し、 -s オプションはこのサーバーのアプリケーション・サービス名を指定し、 -o オプションは出力サーバー・ファイル名を指定しています。
  7. DB2 サーバーを参照するように Tuxedo 構成ファイルを設定する。 UDBCONFIG ファイルの *GROUPS セクションに、 次のようなエントリーを追加します。

       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 セクション内で参照されています。

  8. DB2 (OS/390 版)、DB2 (AS/400 版)、 または DB2 (VM および VSE 版) にあるデータに アプリケーションがアクセスする場合は、 DB2 コネクト XA コンセントレーターが必要です。 構成の詳細と制限事項については、DB2 コネクト 使用者の手引き を参照してください。
  9. 次のようにして Tuxedo を開始する。

       tmboot -y
    
    コマンドが終了すると、Tuxedo メッセージはサーバーが開始されたことを示します。 さらに、DB2 コマンド LIST APPLICATIONS ALL を出すと、 2 つの接続が表示されます (この場合、 Tuxedo 構成ファイルの UDB グループの TMSCOUNT パラメーターによって指定された UDBCONFIG)。

Microsoft Transaction Server の構成

DB2 UDB V5.2 以降のバージョンを、 Microsoft Transaction Server (MTS) バージョン 2.0 に完全に統合できます。 Windows 32 ビット オペレーティング・システム上で MTS の下で実行されているアプリケーションは、DB2 UDB、ホスト、 および AS/400 サーバーと他の MTS 準拠のリソース・マネージャーとの 2 フェーズ・コミットを調整するために MTS を使用できます。

DB2 での 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 ソフトウェア前提条件

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 サポートを使用するには、以下のようにする必要があります。

  1. MTS および DB2 クライアントを MTS アプリケーションが実行されている同じマシンにインストールします。
  2. 複数サイト更新でホストまたは AS/400 データベース・サーバーが関係する場合:
    1. ご使用のローカル・マシンまたはリモート・マシンのいずれかに、 DB2 コネクト エンタープライズ・エディション (EE) をインストールします。 DB2 コネクト EE を使用すると、 ホストまたは AS/400 データベース・サーバーは、 複数サイト更新トランザクションに参加できるようになります。
    2. DB2 コネクト EE サーバーが複数サイト更新で使用可能になっていることを 確認してください。 複数サイト更新で DB2 コネクトを使用可能にすることについての詳細は、 ご使用のプラットフォームの DB2 コネクト エンタープライズ・エディション 概説およびインストールを参照してください。

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" を検索します。

インストールの検査

  1. DB2 クライアントと DB2 コネクト EE を、 DB2 UDB、ホスト、または AS/400 サーバーにアクセスするよう構成します。
  2. DB2 CAE マシンから DB2 UDB データベース・サーバーへの接続を検査します。
  3. DB2 コネクト・マシンからホストまたは AS/400 データベース・サーバーへの接続を DB2 CLP で検査して、 いくつかの照会を出します。
  4. DB2 CAE マシンから DB2 コネクト・ゲートウェイを介してホストまたは AS/400 データベース・サーバーに至る接続を検査して、 いくつかの照会を出します。

サポートされている DB2 データベース・サーバー

MTS 調整トランザクションを使用した複数サイト更新用に、 以下のサーバーがサポートされています。

MTS トランザクション・タイムアウトと DB2 接続動作

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 は複数の異なるプールに接続をプールする可能性があり、 その場合には同じ接続が再使用されません。

ADO 2.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

同一トランザクションに参加している COM オブジェクト間での ODBC 接続の再使用

MTS COM オブジェクトでの ODBC 接続では、接続プールが自動的にオンにされます (COM オブジェクトでトランザクションを行えるかどうかにかかわらず)。

同一のトランザクションに参加している複数の MTS COM オブジェクトについては、 次のような方法で、2 つ以上の COM オブジェクトで接続を再使用できます。

COM1 および COM2 という 2 つの COM オブジェクトがあり、 どちらも同じ ODBC データ・ソースに接続され、 同じトランザクションに参加するとします。

COM1 が接続されて作業を終えると、切断されて接続はプールされます。 しかし、この接続はトランザクションが同じである他の COM オブジェクトが使用するために予約されます。 他のトランザクションでこの接続を使用できるようになるのは、 現在のトランザクションが終了した後です。

COM2 が同じトランザクションで呼び出されると、プールされている接続が与えられます。 MTS は、同じトランザクションに参加している COM オブジェクトにのみ、 接続が与えられるようにします。

他方、COM1 が明示的に切断されない場合は、 トランザクションが終了するまで接続が独占されます。 COM2 が同じトランザクションで呼び出されると、別の接続が獲得されます。 したがって、このトランザクションでは、1 つではなく 2 つの接続が独占されます。

同一のトランザクションに参加している COM オブジェクトの接続機能をこのように再使用することは、 次のような理由により、望ましいものです。

TCP/IP 接続の調整

多くの物理的な接続と切断が同時に生じるような作業負荷が大きい環境で、 低い 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" サンプル・アプリケーションを使用した DB2 のテスト

MTS に付属の "BANK" サンプル・プログラムを使用して、 クライアント製品と MTS のセットアップをテストできます。

以下のステップに従ってください。

  1. ファイル \Program Files\Common Files\ODBC\Data Sources\MTSSamples.dsn を、 以下のように変更します。
       [ODBC]
       DRIVER=IBM DB2 ODBC DRIVER
       UID=your_user_id
       PWD=your_password
       DSN=your_database_alias
       Description=MTS Samples
    

    ここで、各パラメーターは以下のとおりです。

  2. コントロール パネルの「ODBC」に移り、 「システム DSN」タブを選択して、 以下のようにデータ・ソースを追加します。
    1. 「IBM ODBC ドライバー (IBM ODBC Driver)」を選択して、 「完了」を選択します。
    2. データベース別名のリストが表示されたら、以前に指定されたものを選択します。
    3. 「OK」を選択します。
  3. DB2 CLP を使用して、 上記のとおりに your_user_id という ID で DB2 データベースに接続します。
    1. 次のように db2cli.lst ファイルをバインドします。
         db2 bind @C:\sqllib\bnd\db2cli.lst blocking all grant public
      
    2. ユーティリティーをバインドします。

      サーバーが DRDA ホスト・サーバーである場合は、 接続先のホスト (OS/390、AS/400、あるいは VSE&VM) に応じて、 ddcsmvs.lstddcs400.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
      
    3. それから、次のようにして MTS サンプル・アプリケーションの サンプル表とサンプル・データを作成します。
         db2 create table account (accountno int, balance int)
         db2 insert into account values(1, 1)
      
  4. DB2 クライアントで、 データベース・マネージャー構成パラメーター tp_mon_name が、 MTS に設定されていることを確認します。
  5. "BANK" アプリケーションを実行します。 「Account」ボタンを選択し、 「Visual C++」オプションを選択してから、 要求を発信します。 他のオプションは SQL Server に固有の SQL を使用するので、機能しません。


[ ページのトップ | 前ページ | 次ページ | 目次 | 索引 ]