在was上执行Oracle语句,WAS运行时抛出的两种异常,经过google找到解决方案,记录以备案...

在第一次运行范例时,您可能会得到以下错误:

WSRdbDataSour I DSRA8203I:

Database product name : Oracle

WSRdbDataSour I DSRA8204I: Database product version :

Personal Oracle9i Release 9.2.0.1.0 - Production

With the Partitioning, OLAP and Oracle Data Mining options

JServer Release 9.2.0.1.0 - Production

WSRdbDataSour I DSRA8205I: JDBC driver name  : Oracle JDBC driver

WSRdbDataSour I DSRA8206I: JDBC driver version  : 9.2.0.1.0

WSRdbXaResour E DSRA0304E:

XAException occurred. XAException contents and details are:

The XA Error is            : -3

The XA Error message is    : A resource manager error has occurred in the transaction branch.

The Oracle Error code is   :

65535

The Oracle Error message is:

Internal XA Error

The cause is               : null.

WSRdbXaResour E DSRA0302E: XAException occurred.  Error code is:

XAER_RMERR.

Exception is:

RegisteredRes E WTRN0078E:

An attempt by the transaction manager to call start

on a transactional resource has resulted in an error.

The error code was XAER_RMERR. The exception stack trace follows:

oracle.jdbc.xa.

OracleXAException

at oracle.jdbc.xa.OracleXAResource.checkError(OracleXAResource.java:1157)

at oracle.jdbc.xa.client.OracleXAResource.start(OracleXAResource.java:295)

at com.ibm.ws.rsadapter.spi.WSRdbXaResourceImpl.start(WSRdbXaResourceImpl.java:927)

at com.ibm.ejs.j2c.XATransactionWrapper.start(XATransactionWrapper.java:1267)

at com.ibm.ws.Transaction.JTA.JTAResourceBase.start(JTAResourceBase.java:164)

at com.ibm.ws.Transaction.JTA.RegisteredResources.startRes(RegisteredResources.java:389)

at com.ibm.ws.Transaction.JTA.TransactionImpl.enlistResource(TransactionImpl.java:1903)

at com.ibm.ws.Transaction.JTA.TranManagerSet.enlist(TranManagerSet.java:494)

. . .

该错误是因为事务管理程序不能将事务转换为 XA 事务。Oracle 明确的返回错误 XAER_RMERR ,错误代码编号为 65535。 ORA-65535 不是一个有效错误代码,并且 XAER_RMERR 实质上意味着 XA 发生了某些错误。这说明您的 Oracle 数据库没有被配置为支持 XA 事务。因此,当 WebSphere Application Server 事务管理程序命令 Oracle 事务管理程序参与这个 XA 事务时,Oracle 拒绝该命令并抛出这个异常。

解决方法是运行 Oracle 安装中包含的两个脚本。这很可能需要通过您的 Oracle DBA 来执行,您必须以 SYSOPER 或 SYSDBA 身份登录到 Oracle,以拥有足够的权限来运行这些脚本。这些脚本是:

directory: \javavm\install

file: initxa.sql

file: initjvm.sql

initxa.sql 脚本配置 XA 数据库。一旦它成功运行,您的数据库就被配置为 XA。该脚本在您第一次运行的时候可能成功。不幸的是,由于一些数据库的内存空间太小,该脚本也可能无法成功运行。为修改该问题,运行 initjvm.sql 脚本。它可能也会运行失败,但是在失败时,该脚本会说明哪个参数需要调整。参数被保存在该文件中:

directory: \database

file: init.ora

这个表说明了有两个参数的值特别需要增大。对于特定的数据库配置可能需要调整不同的参数。

Oracle Initialization Values

Parameter Name

Minimum Value

java_pool_size

12000000

shared_pool_size

24000000

一旦 initjvm.sql 运行成功,则 initxa.sql 就应该也可以成功运行。Oracle 数据库需要重新启动,以使修改生效。您可以重新启动 WebSphere Studio 测试服务器并重新尝试运行该范例。

您也许能够很正常的运行该范例,起码在修改了这些问题之后变得正常。您可以开发通过 Oracle 使用 XA 事务的应用程序并正常运行该程序。但是可能有一天您会发现无法启动 WebSphere Application Server。该问题的发生可能是由于您没有正常的关闭服务器,导致 WebSphere 和/或 Oracle 崩溃。WebSphere 的启动错误类似于以下所示:

SecurityCompo I SECJ0243I: Security service started successfully

SecurityCompo I SECJ0210I: Security enabled false

WSRdbXaResour E DSRA0304E:

XAException occurred.

XAException contents and details are: The cause is               : null.

36185510 WSRdbXaResour E DSRA0302E:  XAException occurred.

Error code is:

XAER_RMERR.  Exception is:

XARminst      E WTRN0037W:

The transaction service encountered an error

on an xa_recover operation. The resource was J2CXAResourceInfo :

cfName = XA Example Data Source

configProps = [Deployed Resource Adapter Properties]

OptionC_authDataAlias      java.lang.String             scott

UserName            java.lang.String

scott

Password             java.lang.String             ********

TransactionResourceRegistration  java.lang.String             dynamic

InactiveConnectionSupport            java.lang.Boolean         true

secureMode         boolean            true

. . .

The error code was XAER_RMERR. The exception stack trace follows:

javax.transaction.xa.XAException

at oracle.jdbc.xa.OracleXAResource.recover(OracleXAResource.java:626)

at com.ibm.ws.rsadapter.spi.WSRdbXaResourceImpl.recover(WSRdbXaResourceImpl.java:672)

at com.ibm.ws.Transaction.JTA.XARminst.recover(XARminst.java:130)

at com.ibm.ws.Transaction.JTA.XARecoveryData.recover(XARecoveryData.java:673)

at com.ibm.ws.Transaction.JTA.RecoveryManager.resync(RecoveryManager.java:1369)

at com.ibm.ws.Transaction.JTA.ResyncThread.run(RecoveryManager.java:1440)

ApplicationMg A WSVR0200I: Starting application: IBMUTC

该错误是由于事务管理程序无法执行 XA 恢复操作。Oracle 明确的返回错误 XAER_RMERR。作为最后一个错误, XAER_RMERR 指出了 XA 发生了一些问题。这表明 WebSphere 没有使用 Oracle 正常的关闭连接,可能是由于其中一个服务器没有正常关闭,或者是全都没有正常关闭。因为 WebSphere Application Server 试图重新建立连接,则 Oracle 需要回滚进程中的任何事务,但是使用 WebSphere 登录到数据库的 Oracle 用户(在本范例中是 scott )不能执行恢复工作。

解决方法是为 Oracle 用户赋予权限以执行恢复操作,特别是访问内部使用的 Oracle 表以管理恢复。在 SQL Plus 中以 SYSOPER 或 SYSDBA 身份运行下列命令:

grant select on DBA_PENDING_TRANSACTIONS to PUBLIC

如果您不希望将该权限授予所有的用户,可以仅指定错误中列出的用户(在本范例中是 scott)。然后重新启动数据库,这一次您应该能够成功的重启 WebSphere 服务器。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值