XAER_NOTA : The XID is not validエラーの対処法

50 %
50 %
Information about XAER_NOTA : The XID is not validエラーの対処法
Technology
xid

Published on February 27, 2014

Author: OracleMiddleJP

Source: slideshare.net

Description

「XAER_NOTA : The XID is not validエラーの対処法」

「XAER_NOTA : The XID is not valid」は、WebLogic Serverのトランザクションマネージャ(TM)からリソースマネージャ(RM)へのリクエストに対してRMが返すエラーの一つで、何らかの原因でRM上に指定されたトランザクションID(XID)が存在しないことを示しています。ここではこのエラーが発生する代表的なシナリオを説明します。

伊藤忠テクノソリューションズ株式会社
ソフトウェアサービス本部 ミドルウェアサポート部
山田 貴裕 氏

WebLogic Server勉強会@東京LT XAER_NOTA : The XID is not validエラーの対処法 ソフトウェアサービス本部 ミドルウェアサポート部 山田 貴裕 2014/2/26 Copyright (c)2014 ITOCHU Techno-Solutions Corporation

はじめに • 発表する内容は個人の見解であり、所属する組織の公式な見解 ではありません。 • 資料の内容は正確を期するよう注意しておりますが、妥当性や 正確性について保証するものではありません。 • 環境 – 基本的にWebLogic Server (WLS) のバージョンには依存しません。 • WLS 8.1 ~ WLS 12c – Oracle DB 10g~12c • 他のバージョンやDBでも発生する可能性はありますが、未確認です。 2 Copyright (c)2014 ITOCHU Techno-Solutions Corporation

分散トランザクションを利用しているときによくある状況 • JTAタイムアウトは、デフォルトで30秒だが、アプリケーション要件 により、これを延ばしたい – ドメイン→構成→JTA→タイムアウト • アプリケーションレベルでオーバーライドすることも可能 – weblogic-ejb-jar.xmlのtrans-timeout-seconds – javax.transaction.UserTransactionのsetTransactionTimeoutメソッド 3 Copyright (c)2014 ITOCHU Techno-Solutions Corporation

このようなエラーが発生することがある java.sql.SQLException: Unexpected exception while enlisting XAConnection java.sql.SQLException: XA error: XAResource.XAER_NOTA start() failed on resource 'xxxx': XAER_NOTA : The XID is not valid oracle.jdbc.xa.OracleXAException at oracle.jdbc.xa.OracleXAResource.checkError(OracleXAResource.java:1110) at oracle.jdbc.xa.client.OracleXAResource.start(OracleXAResource.java:240) at weblogic.jdbc.jta.DataSource.start(DataSource.java:790) at weblogic.transaction.internal.XAServerResourceInfo.start(XAServerResourceInfo.java:1247) at weblogic.transaction.internal.XAServerResourceInfo.xaStart(XAServerResourceInfo.java:1180) at weblogic.transaction.internal.XAServerResourceInfo.enlist(XAServerResourceInfo.java:300) at weblogic.transaction.internal.ServerTransactionImpl.enlistResource(ServerTransactionImpl.java:561) at weblogic.transaction.internal.ServerTransactionImpl.enlistResource(ServerTransactionImpl.java:488) at weblogic.jdbc.jta.DataSource.enlist(DataSource.java:1673) at weblogic.jdbc.jta.DataSource.refreshXAConnAndEnlist(DataSource.java:1577) at weblogic.jdbc.jta.DataSource.getConnectionInternal(DataSource.java:478) ※例外の詳細やスタックトレースは、バージョンによって異なる可能性あり 「XAER_NOTA : The XID is not valid」は、直接的にはWLSのトランザクションマネージャ(TM) で管理しているトランザクションID(XID)が、リソースマネージャ(RM)や実際のリソース(DBなど) に存在しないことを意味する。 以降では、このエラーが発生する代表的なシナリオを説明する。 4 Copyright (c)2014 ITOCHU Techno-Solutions Corporation

エラー発生時のシーケンス例 Application WLS (TM) tx.begin tx.commit XA Driver (RM) Oracle DB (Resource) Other RM Other Resource xa.start xa.prepare XIDなし XAER_NOTA : The XID is not valid RMやリソース側でタイムアウトになり、XIDが有効でないと判断される場合あり 5 Copyright (c)2014 ITOCHU Techno-Solutions Corporation

解決策 • Oracle XA Driverのタイムアウト(デフォルト:60秒)を延ばす – XAデータソースの[XAトランザクション・タイムアウトの設定]を有効化 AND [XAトランザクション・タイムアウト]を適切に設定し、再起動 • サービス→データ・ソース→{データソース名}→構成→トランザクション 有効化すると、XAResource.start前に XAResource.setTransactionTimeoutを 呼び出す。 上記、[XAトランザクション・タイムアウトの設定]を 有効化した場合にのみ利用される設定値。 JTAタイムアウト以上に延ばすように設定する。 「0」にするとJTA全体のタイムアウトと同じ値を意味する。 • DBにタイムアウトが存在する場合は、更に延ばす – Oracle DBの場合は、distributed_lock_timeout (デフォルト:60秒) 例) alter system set distributed_lock_timeout = 300 scope=spfile; → 要再起動 6 Copyright (c)2014 ITOCHU Techno-Solutions Corporation

補足 • WLS8.1のマニュアルには記載あり WebLogic Server FAQ 集→FAQ : WebLogic JDBC http://otndnld.oracle.co.jp/document/products/wls/docs81/faq/jdbc.html Q. XA 準拠のリソース マネージャに対し複数の更新を行うトランザクション の実行に長時間かかり、リソースの登録、準備、およびロールバック処理 で XAException (errorCode=XAER_NOTA) が発生します。この現象の 原因と回避策を教えてください。 A. Oracle など一部のリソース マネージャは内部タイムアウト メカニズムを 備えており、タイムアウト期限が切れるとトランザクション ブランチに関係 する処理を内部的にロールバックします。その後、WebLogic トランザク ション マネージャがリソースに対してXAResource.start/prepare/rollback 処理を呼び出すと、指定した Xid がリソース マネージャ内に存在しない ため、XAException XAER_NOTA が発生します。 (以降省略: 本資料のシナリオで発生するケース以外についても記載あり) 7 Copyright (c)2014 ITOCHU Techno-Solutions Corporation

まとめ • WLSの設定やアプリケーションでJTAタイムアウトを延ばす場合は、 以下のタイムアウトも併せて延ばすこと – XAリソースマネージャ (例: Oracle JDBC XA Driver) – 実際のリソース (例: Oracle DB) • WLS + Oracle DB で分散トランザクションを利用する場合は、 以下の関係を保つこと JTAタイムアウト ≦ XA Driverタイムアウト < distrubuted_lock_timeout 8 Copyright (c)2014 ITOCHU Techno-Solutions Corporation

参考資料 • UserTransaction (Java EE 6 ) – http://docs.oracle.com/javaee/6/api/javax/transaction/UserTransaction.html • XAResource (Java Platform SE 7 ) – http://docs.oracle.com/javase/jp/7/api/javax/transaction/xa/XAResource.html • Oracle Databaseリファレンス 12c リリース1 (12.1) DISTRIBUTED_LOCK_TIMEOUT – http://docs.oracle.com/cd/E49329_01/server.121/b71292/refrn10050.htm • Constant Field Values (Oracle Database JDBC Java API Reference) OracleXAResource - DEFAULT_XA_TIMEOUT – http://docs.oracle.com/cd/E18283_01/appdev.112/e13995/constantvalues.html#oracle_jdbc_xa_OracleXAResource_DEFAULT_XA_TIMEOUT 9 Copyright (c)2014 ITOCHU Techno-Solutions Corporation

Copyright (c)2014 ITOCHU Techno-Solutions Corporation

Add a comment

Related presentations

Related pages

第44回Oracle WebLogic Server勉強会@東京

-「XAER_NOTA : The XID is not validエラーの対処法 (仮) ... ー「XAER_NOTA : The XID is not validエラーの対処法 (仮) ...
Read more

XAER_NOTA : The XID is not validエラーの対処法 (WebLogic Channel)

XAER_NOTA : The XID is not validエラーの対処法 By Masa Sasaki-Oracle on 3 12, 2014
Read more

XA error: XAER_NOTA : The XID is not valid star ...

XA error: XAER_NOTA : The XID is not valid start() failed on. 745924 Sep 29, 2010 11:14 AM java.sql.SQLException: Unexpected exception while enlisting ...
Read more

Urgent : XAER_NOTA : The XID is not valid | Oracle Community

... Unexpected exception while enlisting XAConnection java.sql.SQLException: XA error: XAER_NOTA : The XID is not valid start() failed on resource ...
Read more

“XAER_NOTA : The XID is not valid” JDBC Error « WebLogic

java.sql.SQLException: XA error: XAER_NOTA : The XID is not valid start() failed on resource ‘weblogic.jdbc.jta.DataSource’: XAER_NOTA : ...
Read more

XAException (Java Platform SE 7 ) - Oracle Help Center

The XID is not valid. static int: ... public static final int XAER_NOTA. The XID is not valid. ... XAException public XAException ...
Read more

はてなブックマーク - IBM Knowledge Center

XAER_NOTA : The XID is not valid ...
Read more