对于成功测试的数据源( * abc ),在Websphere 8.5.5中每分钟获得以下错误。 Sysout Log完全填满以下错误。如何解决?
创建XA连接和资源时出错com.ibm.ws.exception.WsException: E:无法从DataSource获取XAConnection *** abc 。 SQL状态:72000 SQL代码:1017 - - * - 引起:java.sql.SQLException:ORA-01017:用户名/密码无效;登录被拒绝 ** E:SQL状态= 72000,错误代码= 1,017 ......还有34个
答案 0 :(得分:1)
一个好的猜测是,您有一个涉及Oracle的不确定事务,恢复管理器每分钟尝试一次XA恢复,但由于XA恢复需要超出通常需要的额外权限而无法执行此操作连接到数据库(这就是您的测试连接有效的原因)。如果这是原因,您可以通过为数据源指定XA恢复路径的用户/密码来解决此问题,该用户/密码已被授予在oracle中执行XA恢复的权限。这是一个knowledge center document的链接,描述了如何在WebSphere Application Server Liberty中的dataSource上为此配置recoveryAuthDataRef。如果您正在使用传统的WebSphere Application Server,请参阅此knowledge center document标题为" XA恢复的身份验证别名"的部分。
答案 1 :(得分:1)
您的问题是由环境中的一个或多个不确定事务导致恢复失败。以下是此问题及其修复的可能原因。
场景1 :" XA恢复的身份验证别名"在数据源配置中(在您的情况下,最有可能看到错误)
解决方案:使用正确的用户名和密码确保正确的J2C身份验证别名密码,被选中用于XA恢复的"认证别名" &安培; "组件管理的认证别名"在数据源配置中。如果不正确,请更新凭据,保存然后重新启动nodeagent(如果是WAS ND)和JVM
有关详细信息,请参阅:http://www-01.ibm.com/support/docview.wss?uid=swg21260425
场景2 :为" XA恢复的身份验证别名配置的用户"没有足够的特权来执行恢复 解决方案:WAS配置可能正确,但为XA恢复配置的数据库用户没有足够的权限来执行恢复。这可以通过在数据库中以 SYS 用户身份运行以下命令来解决,其中<' user'>是在数据源认证别名中配置的数据库用户。
grant select on pending_trans$ to <'user'>;
grant select on dba_2pc_pending to <'user'>;
grant select on dba_pending_transactions to <'user'>;
grant execute on dbms_system to <'user'>; (If using Oracle 10.2.0.3 or lower JDBC driver)
grant execute on dbms_xa to <'user'>; (If using Oracle 10.2.0.4 or higher JDBC driver)
有关详细信息,请参阅:http://www-01.ibm.com/support/docview.wss?uid=swg21196663
场景3 :由于某些问题,websphere tranlog中的待处理交易无法恢复。
解决方案:在这种情况下,JVM可以在恢复模式下启动,如下所示 - 这将有助于恢复事务并重新启动服务器。
#Stop the JVM
profileRoot/bin/stopServer.(bat|sh) serverName
#Start the JVM in recovery mode, The server will stop after performing transaction recovery
profileRoot/bin/startServer.(bat|sh) serverName -recovery
#Start the JVM
profileRoot/bin/startServer.(bat|sh) serverName
如果这仍然无法解决问题,则会有更多&#39;残酷修复&#39; (不推荐,可能导致环境不一致强>)。
1. Stop the server
2. Delete the <'servername'> folder inside profileRoot/tranlog/<'cellname'>/<'nodename'> directory
3. Start the server
希望这有帮助!