﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>语源科技BlogJava-菩提本无树，明镜亦非台</title><link>http://www.blogjava.net/jncz/</link><description /><language>zh-cn</language><lastBuildDate>Fri, 10 Apr 2026 04:03:21 GMT</lastBuildDate><pubDate>Fri, 10 Apr 2026 04:03:21 GMT</pubDate><ttl>60</ttl><item><title>WAS运行时抛出的两种异常，经过google找到解决方案，记录以备案</title><link>http://www.blogjava.net/jncz/archive/2007/02/04/97846.html</link><dc:creator>jncz</dc:creator><author>jncz</author><pubDate>Sun, 04 Feb 2007 04:23:00 GMT</pubDate><guid>http://www.blogjava.net/jncz/archive/2007/02/04/97846.html</guid><wfw:comment>http://www.blogjava.net/jncz/comments/97846.html</wfw:comment><comments>http://www.blogjava.net/jncz/archive/2007/02/04/97846.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jncz/comments/commentRss/97846.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jncz/services/trackbacks/97846.html</trackback:ping><description><![CDATA[
		<p>
				<a name="N1088A">
						<span class="smalltitle">OracleXAException: XAER_RMERR (Internal XA Error)</span>
				</a>
		</p>
		<p>在第一次运行范例时，您可能会得到以下错误：</p>
		<table border="0" cellpadding="0" cellspacing="0" width="100%">
				<tbody>
						<tr>
								<td class="code-outline">
										<pre class="displaycode">WSRdbDataSour I DSRA8203I: <br /><span class="boldcode">Database product name : Oracle</span><br />WSRdbDataSour I DSRA8204I: Database product version : <br />     Personal Oracle9i Release 9.2.0.1.0 - Production<br />With the Partitioning, OLAP and Oracle Data Mining options<br />JServer Release 9.2.0.1.0 - Production<br />WSRdbDataSour I DSRA8205I: JDBC driver name  : Oracle JDBC driver<br />WSRdbDataSour I DSRA8206I: JDBC driver version  : 9.2.0.1.0<br />WSRdbXaResour E DSRA0304E: <br /><span class="boldcode">XAException occurred</span>. XAException contents and details are:<br />The XA Error is            : -3<br />The XA Error message is    : A resource manager error has occurred in the transaction branch.<br />The Oracle Error code is   : <br /><span class="boldcode">65535</span><br />The Oracle Error message is: <br /><span class="boldcode">Internal XA Error</span><br />The cause is               : null.<br />WSRdbXaResour E DSRA0302E: XAException occurred.  Error code is: <br /><span class="boldcode">XAER_RMERR</span>.  <br />     Exception is: &lt;null&gt;<br />RegisteredRes E WTRN0078E: <br /><span class="boldcode">An attempt by the transaction manager to call start <br />         on a transactional resource has resulted in an error. <br />         The error code was XAER_RMERR.</span> The exception stack trace follows: <br />     oracle.jdbc.xa.<br /><span class="boldcode">OracleXAException</span><br />     at oracle.jdbc.xa.OracleXAResource.checkError(OracleXAResource.java:1157)<br />     at oracle.jdbc.xa.client.OracleXAResource.start(OracleXAResource.java:295)<br />     at com.ibm.ws.rsadapter.spi.WSRdbXaResourceImpl.start(WSRdbXaResourceImpl.java:927)<br />     at com.ibm.ejs.j2c.XATransactionWrapper.start(XATransactionWrapper.java:1267)<br />     at com.ibm.ws.Transaction.JTA.JTAResourceBase.start(JTAResourceBase.java:164)<br />     at com.ibm.ws.Transaction.JTA.RegisteredResources.startRes(RegisteredResources.java:389)<br />     at com.ibm.ws.Transaction.JTA.TransactionImpl.enlistResource(TransactionImpl.java:1903)<br />     at com.ibm.ws.Transaction.JTA.TranManagerSet.enlist(TranManagerSet.java:494)<br />     . . .<br /></pre>
								</td>
						</tr>
				</tbody>
		</table>
		<br />
		<p>该错误是因为事务管理程序不能将事务转换为 XA 事务。Oracle 明确的返回错误 
        <code>XAER_RMERR</code> ，错误代码编号为 65535。 
        <code>ORA-65535</code> 不是一个有效错误代码，并且 
        <code>XAER_RMERR</code>
实质上意味着 XA 发生了某些错误。这说明您的 Oracle 数据库没有被配置为支持 XA 事务。因此，当 WebSphere
Application Server 事务管理程序命令 Oracle 事务管理程序参与这个 XA 事务时，Oracle
拒绝该命令并抛出这个异常。 </p>
		<p>解决方法是运行 Oracle 安装中包含的两个脚本。这很可能需要通过您的 Oracle DBA 来执行，您必须以 
        <code>SYSOPER</code> 或 
        <code>SYSDBA</code> 身份登录到 Oracle，以拥有足够的权限来运行这些脚本。这些脚本是：
      </p>
		<ul>
				<li>directory: 
          <code>&lt;ORACLE_HOME&gt;\javavm\install</code></li>
				<ul>
						<li>file: 
            <code>initxa.sql</code></li>
						<li>file: 
            <code>initjvm.sql</code></li>
				</ul>
		</ul>
		<p>
				<code>initxa.sql</code> 脚本配置 XA 数据库。一旦它成功运行，您的数据库就被配置为 XA。该脚本在您第一次运行的时候可能成功。不幸的是，由于一些数据库的内存空间太小，该脚本也可能无法成功运行。为修改该问题，运行 
        <code>initjvm.sql</code> 脚本。它可能也会运行失败，但是在失败时，该脚本会说明哪个参数需要调整。参数被保存在该文件中：
      </p>
		<ul>
				<li>directory: 
          <code>&lt;ORACLE_HOME&gt;\database</code></li>
				<ul>
						<li>file: 
            <code>init&lt;DATABASE_SID&gt;.ora</code></li>
				</ul>
		</ul>
		<p>这个表说明了有两个参数的值特别需要增大。对于特定的数据库配置可能需要调整不同的参数。</p>
		<p>
				<b>Oracle Initialization Values</b>
		</p>
		<table border="1" cellpadding="5" cellspacing="1">
				<tbody>
						<tr>
								<td>
										<i>Parameter Name</i>
								</td>
								<td>
										<i>Minimum Value</i>
								</td>
						</tr>
						<tr>
								<td>
										<code>java_pool_size</code>
								</td>
								<td>
										<code>12000000</code>
								</td>
						</tr>
						<tr>
								<td>
										<code>shared_pool_size</code>
								</td>
								<td>
										<code>24000000</code>
								</td>
						</tr>
				</tbody>
		</table>
		<p>一旦 
        <code>initjvm.sql</code> 运行成功，则 
        <code>initxa.sql</code> 就应该也可以成功运行。Oracle 数据库需要重新启动，以使修改生效。您可以重新启动 WebSphere Studio 测试服务器并重新尝试运行该范例。
      </p>
		<a name="xa_exception">
		</a>
		<p>
				<a name="N1094E">
						<span class="smalltitle">XAException: XAER_RMERR (xa_recover)</span>
				</a>
		</p>
		<p>您
也许能够很正常的运行该范例，起码在修改了这些问题之后变得正常。您可以开发通过 Oracle 使用 XA
事务的应用程序并正常运行该程序。但是可能有一天您会发现无法启动 WebSphere Application
Server。该问题的发生可能是由于您没有正常的关闭服务器，导致 WebSphere 和/或 Oracle 崩溃。WebSphere
的启动错误类似于以下所示：</p>
		<table border="0" cellpadding="0" cellspacing="0" width="100%">
				<tbody>
						<tr>
								<td class="code-outline">
										<pre class="displaycode">SecurityCompo I SECJ0243I: Security service started successfully<br />SecurityCompo I SECJ0210I: Security enabled false<br />WSRdbXaResour E DSRA0304E: <br /><span class="boldcode">XAException occurred</span>. <br />     XAException contents and details are: The cause is               : null.<br />36185510 WSRdbXaResour E DSRA0302E:  XAException occurred.  <br />     Error code is: <br /><span class="boldcode">XAER_RMERR</span>.  Exception is: &lt;null&gt;<br />XARminst      E WTRN0037W: <br /><span class="boldcode">The transaction service encountered an error <br />     on an xa_recover operation.</span> The resource was J2CXAResourceInfo :<br />cfName = XA Example Data Source<br />configProps = [Deployed Resource Adapter Properties]<br />     OptionC_authDataAlias      java.lang.String             scott<br />     UserName            java.lang.String             <br /><span class="boldcode">scott</span><br />     Password             java.lang.String             ********<br />     TransactionResourceRegistration   java.lang.String             dynamic<br />     InactiveConnectionSupport            java.lang.Boolean         true<br />     secureMode         boolean            true<br />     . . .<br />The error code was XAER_RMERR. The exception stack trace follows: <br />     javax.transaction.xa.XAException<br />     at oracle.jdbc.xa.OracleXAResource.recover(OracleXAResource.java:626)<br />     at com.ibm.ws.rsadapter.spi.WSRdbXaResourceImpl.recover(WSRdbXaResourceImpl.java:672)<br />     at com.ibm.ws.Transaction.JTA.XARminst.recover(XARminst.java:130)<br />     at com.ibm.ws.Transaction.JTA.XARecoveryData.recover(XARecoveryData.java:673)<br />     at com.ibm.ws.Transaction.JTA.RecoveryManager.resync(RecoveryManager.java:1369)<br />     at com.ibm.ws.Transaction.JTA.ResyncThread.run(RecoveryManager.java:1440)<br /><br />ApplicationMg A WSVR0200I: Starting application: IBMUTC<br /></pre>
								</td>
						</tr>
				</tbody>
		</table>
		<br />
		<p>该错误是由于事务管理程序无法执行 XA 恢复操作。Oracle 明确的返回错误 XAER_RMERR。作为最后一个错误， 
        <code>XAER_RMERR</code>
指出了 XA 发生了一些问题。这表明 WebSphere 没有使用 Oracle
正常的关闭连接，可能是由于其中一个服务器没有正常关闭，或者是全都没有正常关闭。因为 WebSphere Application Server
试图重新建立连接，则 Oracle 需要回滚进程中的任何事务，但是使用 WebSphere 登录到数据库的 Oracle 用户（在本范例中是 <code>scott</code> ）不能执行恢复工作。
      </p>
		<p>解决方法是为 Oracle 用户赋予权限以执行恢复操作，特别是访问内部使用的 Oracle 表以管理恢复。在 SQL Plus 中以 
        <code>SYSOPER</code> 或 
        <code>SYSDBA</code> 身份运行下列命令：
      </p>
		<table border="0" cellpadding="0" cellspacing="0" width="100%">
				<tbody>
						<tr>
								<td class="code-outline">
										<pre class="displaycode"> grant select on DBA_PENDING_TRANSACTIONS to PUBLIC </pre>
								</td>
						</tr>
				</tbody>
		</table>
		<br />
		<p>如果您不希望将该权限授予所有的用户，可以仅指定错误中列出的用户（在本范例中是 scott）。然后重新启动数据库，这一次您应该能够成功的重启 WebSphere 服务器。</p>
<img src ="http://www.blogjava.net/jncz/aggbug/97846.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jncz/" target="_blank">jncz</a> 2007-02-04 12:23 <a href="http://www.blogjava.net/jncz/archive/2007/02/04/97846.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>