Your SlideShare is downloading. ×
0
WebLogic Server勉強会@東京LT
XAER_NOTA : The XID is not validエラーの対処法
ソフトウェアサービス本部 ミドルウェアサポート部
山田 貴裕
2014/2/26

Copyright (c)201...
はじめに

• 発表する内容は個人の見解であり、所属する組織の公式な見解
ではありません。
• 資料の内容は正確を期するよう注意しておりますが、妥当性や
正確性について保証するものではありません。
• 環境
– 基本的にWebLogic Ser...
分散トランザクションを利用しているときによくある状況

• JTAタイムアウトは、デフォルトで30秒だが、アプリケーション要件
により、これを延ばしたい
– ドメイン→構成→JTA→タイムアウト

• アプリケーションレベルでオーバーライドする...
このようなエラーが発生することがある
java.sql.SQLException: Unexpected exception while enlisting XAConnection java.sql.SQLException: XA erro...
エラー発生時のシーケンス例

Application

WLS
(TM)

tx.begin

tx.commit

XA Driver
(RM)

Oracle DB
(Resource)

Other
RM

Other
Resource
...
解決策

• Oracle XA Driverのタイムアウト(デフォルト:60秒)を延ばす
– XAデータソースの[XAトランザクション・タイムアウトの設定]を有効化
AND [XAトランザクション・タイムアウト]を適切に設定し、再起動
• サ...
補足

• WLS8.1のマニュアルには記載あり
WebLogic Server FAQ 集→FAQ : WebLogic JDBC
http://otndnld.oracle.co.jp/document/products/wls/docs8...
まとめ

• WLSの設定やアプリケーションでJTAタイムアウトを延ばす場合は、
以下のタイムアウトも併せて延ばすこと
– XAリソースマネージャ (例: Oracle JDBC XA Driver)
– 実際のリソース (例: Oracle ...
参考資料

• UserTransaction (Java EE 6 )
– http://docs.oracle.com/javaee/6/api/javax/transaction/UserTransaction.html

• XARes...
Copyright (c)2014 ITOCHU Techno-Solutions Corporation
Upcoming SlideShare
Loading in...5
×

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

1,452

Published on

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

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

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

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,452
On Slideshare
0
From Embeds
0
Number of Embeds
6
Actions
Shares
0
Downloads
9
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

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

  1. 1. WebLogic Server勉強会@東京LT XAER_NOTA : The XID is not validエラーの対処法 ソフトウェアサービス本部 ミドルウェアサポート部 山田 貴裕 2014/2/26 Copyright (c)2014 ITOCHU Techno-Solutions Corporation
  2. 2. はじめに • 発表する内容は個人の見解であり、所属する組織の公式な見解 ではありません。 • 資料の内容は正確を期するよう注意しておりますが、妥当性や 正確性について保証するものではありません。 • 環境 – 基本的にWebLogic Server (WLS) のバージョンには依存しません。 • WLS 8.1 ~ WLS 12c – Oracle DB 10g~12c • 他のバージョンやDBでも発生する可能性はありますが、未確認です。 2 Copyright (c)2014 ITOCHU Techno-Solutions Corporation
  3. 3. 分散トランザクションを利用しているときによくある状況 • JTAタイムアウトは、デフォルトで30秒だが、アプリケーション要件 により、これを延ばしたい – ドメイン→構成→JTA→タイムアウト • アプリケーションレベルでオーバーライドすることも可能 – weblogic-ejb-jar.xmlのtrans-timeout-seconds – javax.transaction.UserTransactionのsetTransactionTimeoutメソッド 3 Copyright (c)2014 ITOCHU Techno-Solutions Corporation
  4. 4. このようなエラーが発生することがある 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
  5. 5. エラー発生時のシーケンス例 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
  6. 6. 解決策 • 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
  7. 7. 補足 • 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
  8. 8. まとめ • 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
  9. 9. 参考資料 • 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
  10. 10. Copyright (c)2014 ITOCHU Techno-Solutions Corporation
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×