管理の手引き


ホスト上の未確定トランザクションの回復

トランザクションでアプリケーションがホストまたは AS/400 データベース・サーバーにアクセスした場合には、 未確定トランザクションが回復される方法は多少異なります。

ホストまたは AS/400 データベース・サーバーにアクセスするのに、DB2 コネクトが使用されます。 DB2 コネクトに DB2 同期点マネージャーが構成されている場合、 回復ステップは異なります。

DB2 コネクトに DB2 同期点マネージャーが構成されている場合の回復

ホストまたは AS/400 サーバーにおける未確定トランザクションの回復は、通常、 トランザクション・マネージャー (TM) および DB2 同期点マネージャー (SPM) によって自動的に行われます。 ホストまたは AS/400 サーバーの未確定トランザクションはローカル DB2 のロケーションには資源を保持しませんが、 トランザクションがホストまたは AS/400 サーバーで未確定である間はその位置に資源を保持します。 発見的手法の決定を行う必要があるとホストまたは AS/400 の管理者が判断すると、 ホストまたは AS/400 でトランザクションをコミットするかロールバックするかを決定するために、 管理者はローカル DB2 データベース管理者と連絡をとります (たとえば、電話で)。 これが行われると、LIST DRDA INDOUBT TRANSACTIONS コマンドを使用して、 ローカル DB2 コネクト・インスタンスでのトランザクションの状態を判別することができます。 SNA 通信環境を使用している場合は通常、以下のステップを指針として使用することができます。

  1. 次のようにして、SPM に接続します。

    db2 => connect to db2spm
     
     Database Connection Information
     
     Database product       = SPM0500
     SQL authorization ID   = CRUS
     Local database alias   = DB2SPM
    
  2. LIST DRDA INDOUBT TRANSACTIONS コマンドを出して、 SPM から認識できる未確定トランザクションを表示します。 以下の例は、SPM に認識された 1 つの未確定トランザクションを示します。 db_name がホストまたは AS/400 サーバーのローカル別名です。 partner_lu がホストまたは AS/400 サーバーの完全修飾 LU 名です。 これはホストまたは AS/400 サーバーを最もよく識別できるもので、 ホストまたは AS/400 サーバーの呼び出し側が指定してください。 luwid はトランザクションの固有識別子を提供するもので、 すべてのホストまたは AS/400 サーバーで使用可能です。 今話題にしているトランザクションが表示されている場合には、 uow_status フィールドを用いて、 値が C (コミット) か R (ロールバック) の場合のトランザクションの結果を判別することができます。 WITH PROMPTING パラメーターを指定して LIST DRDA INDOUBT TRANSACTIONS コマンドを出す場合は、 トランザクションのコミット、ロールバック、無視を対話式に行えます。 詳細については、コマンド解説書 を参照してください。

    db2 => list drda indoubt transactions
     DRDA Indoubt Transactions:
     1.db_name: DBAS3    db_alias: DBAS3    role: AR
       uow_status: C  partner_status: I  partner_lu: USIBMSY.SY12DQA
     corr_tok: USIBMST.STB3327L
     luwid: USIBMST.STB3327.305DFDA5DC00.0001
     xid: 53514C2000000017 00000000544D4442 0000000000305DFD A63055E962000000
          00035F
    
  3. partner_lu および luwid の未確定トランザクションが表示されていない場合、 または LIST DRDA INDOUBT TRANSACTIONS コマンドが次のようにして戻る場合は、

    db2 => list drda indoubt transactions
    SQL1251W  No data returned for heuristic query.
    
    トランザクションはロールバックされました。

    生じたとは考えにくいが可能性はある、別の状況が生じている場合もあります。 正しい luwid と partner_lu を指定した未確定トランザクションが表示されても、 uow_status が "I" の場合は、SPM はトランザクションがコミットされるのか、 ロールバックされるのかを認識しません。 この場合、DB2 コネクト・ワークステーションでトランザクションをコミット、 またはロールバックするために、WITH PROMPTING パラメーターを使用する必要があります。 その後、DB2 コネクトが発見的手法の決定に基づいて、 ホストまたは AS/400 サーバーとの再同期を行えるようにします。

DB2 コネクトが DB2 同期点マネージャーを使用しない場合の回復

DB2 コネクト パーソナル・エディションまたは DB2 コネクト エンタープライズ・エディションのいずれかからの複数サイト更新で、 DB2 (OS/390 版) を更新するために TCP/IP 接続性が使用されていて、 DB2 同期点マネージャーが使用されない場合は、このセクションの情報を活用してください。 この状態での未確定トランザクションの回復は、 DB2 同期点マネージャーが関係する未確定トランザクションの回復とは異なります。 この環境で未確定トランザクションが発生すると、 その問題の検出元に従い、クライアント、データベース・サーバー、 またはトランザクション・マネージャー (TM) データベース (あるいはそれらの複数の組み合わせ) でアラート項目が生成されます。 アラート項目は、db2alert.log ファイルに保管されます。 アラートについての詳細は、問題判別の手引き を参照してください。

TM および関係するデータベースとその接続すべてが再び使用可能になると、 未確定トランザクションは自動的に再同期化されます。 データベース・サーバーで発見的手法による決定を強制するのではなく、 自動的に再同期が行われるようにする必要があります。 しかし、このようにする場合は、以下のステップをガイドラインとしてください。
注:DB2 同期点マネージャーは関係していないので、 LIST DRDA INDOUBT TRANSACTIONS コマンドは使用できません。

  1. OS/390 ホストで、DISPLAY THREAD TYPE(INDOUBT) コマンドを出します。

    このリストから、発見的手法によって完了させたいトランザクションを識別します。 DISPLAY コマンドの詳細については、 DB2 (OS/390 版) コマンド解説書 を参照してください。 表示される LUWID を、 トランザクション・マネージャー・データベースでの同じ luwid に一致させることができます。

  2. 行うことに基づいて、 RECOVER THREAD(<LUWID>) ACTION(ABORT|COMMIT) コマンドを出します

    RECOVER コマンドの詳細については、 DB2 (OS/390 版) コマンド解説書 を参照してください。


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