Oracle 数据源的数据访问问题

使用故障诊断技巧以帮助访问 Oracle 数据源。

指定了无效的 Oracle URL

此错误可能是由在目标数据源的 URL 属性中错误地指定了 URL 所导致。

在管理控制台中检查数据源对象的 URL 属性,以确保其正确。

Oracle URL 的示例:
  • 对于瘦驱动程序:jdbc:oracle:thin:@//hostname:1521/myDatabase
  • 对于胖 (OCI) 驱动程序:jdbc:oracle:oci:@tnsname1

“DSRA0080E: 数据存储器适配器接收到异常。请参阅原始异常消息:ORA-00600”

此异常的可能原因是使用的 Oracle JDBC 驱动程序的版本比 Oracle 数据库旧。可能在 WebSphere® Application Server 上配置了多个版本的 Oracle JDBC 驱动程序。

检查 JDBC 驱动程序的版本 。有时可以通过查看类路径确定驱动程序所在的目录来确定版本。

如果无法用此方法确定版本,可以使用以下程序来确定该版本。运行程序前,将类路径设置为 JDBC 驱动程序文件的位置。
import java.sql.*;
     import oracle.jdbc.driver.*;
     class JDBCVersion
     {
         public static void main (String args[])
         throws SQLException
         {
             // Load the Oracle JDBC driver
             DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
             // Get a connection to a database
             Connection conn = DriverManager.getConnection
             ("jdbc:oracle:thin:@appaloosa:1521:app1","sys","change_on_install");
             // Create Oracle DatabaseMetaData object
             DatabaseMetaData meta = conn.getMetaData();
             // gets driver info:
             System.out.println("JDBC driver version is"  + meta.getDriverVersion());
         }
     }

如果驱动程序和数据库的版本不同,那么将 JDBC 驱动程序替换为正确的版本。 如果配置了多个驱动程序,那么移除处于不正确级别的任何驱动程序。

DSRA8100E: 无法从数据源获取 {0}。异常:请参阅 linkedException 以了解更多信息。

使用 Oracle 瘦驱动程序时,如果获取连接时未指定用户名或密码,那么 Oracle 产生 java.sql.SQLException:调用中无效的自变量错误。如果在运行 WebSphere Application Server 时遇到此错误,那么说明未设置别名。

要移除异常,在数据源上定义别名。

“当尝试检索错误文本时出错”

此错误可能的原因是在未设置或未正确设置 ORACLE_HOME 属性的情况下使用 Oracle OCI 驱动程序。

要更正此错误,请检查运行 WebSphere Application Server 的用户概要文件,以验证是否正确设 置了 $ORACLE_HOME 环境变量。

使用 Oracle OCI 驱动程序作为 JDBC 提供程序时发生类装入器错误

当您将 Oracle OCI 驱动程序配置为 JDBC 提供程序时,必须指定存储本机库的路径。如果未指定本机库路径,那么当您首次尝试使用此提供程序进行连接时,将发生类装入器错误。

要纠正此问题,请在管理控制台中单击资源 > JDBC > JDBC 提供程序,选择 Oracle OCI 驱动程序,然后在本机库路径字段中指定指向本机库的路径。

引用 Oracle 类或连接到 Oracle 数据源时发生错误

引用 Oracle 类时,接收到 java.lang.NullPointerException 错误;或者连接 Oracle 数据源时,接收到“内部错误:oracle.jdbc.oci.OCIEnv”错误

问题可能是 AIX® 机器上正在使用 OCI 驱动程序,虽然正确设置了 LIBPATH,但未设置或未正确地设置 ORACLE_HOME 环境变量。当应用程序尝试连接到 Oracle 数据源时,会遇到类似于以下任一异常 的异常:

要纠正此问题,请检查运行 WebSphere Application Server 所使用的用户概要文件,以验证其是否正确设置了 $ORACLE_HOME 环境变量,以及 $LIBPATH 是否包含 $ORACLE_HOME/lib

WSVR0016W: Oracle JDBC 瘦驱动程序的类路径条目具有无效变量

当没有为属性 ORACLE_JDBC_DRIVER_PATH 定义的环境变量时,发生此错误。

验证此问题是否为管理控制台问题。转至环境 > 管理 WebSphere 变量以验证是否已定义变量 ORACLE_JDBC_DRIVER_PATH.

要纠正此问题,单击新建并定义此变量。例如,名称:ORACLE_JDBC_DRIVER_PATH,值:c:\oracle\jdbc\lib。使用的值是对操作系统中包含 ojdbc6.jar 文件(或用于启用 Oracle 跟踪的 ojdbc6_g.jar 文件)的目录进行命名的值。

事务恢复失败(限于 XA 数据源)

问题

当 WebSphere Application Server 尝试恢复 Oracle 数据库事务时,事务服务发出以下异常:
WTRN0037W: The transaction service encountered an error on an xa_recover operation. 
The resource was com.ibm.ws.rsadapter.spi.WSRdbXaResourceImpl@1114a62. 
The error code was XAER_RMERR. The exception stack trace follows: 
javax.transaction.xa.XAException
at oracle.jdbc.xa.OracleXAResource.recover(OracleXAResource.java:726)
at com.ibm.ws.rsadapter.spi.WSRdbXaResourceImpl.recover(WSRdbXaResourceImpl.java:954)
at com.ibm.ws.Transaction.JTA.XARminst.recover(XARminst.java:137)
at com.ibm.ws.Transaction.JTA.XARecoveryData.recover(XARecoveryData.java:609)
at com.ibm.ws.Transaction.JTA.PartnerLogTable.recover(PartnerLogTable.java:511)
at com.ibm.ws.Transaction.JTA.RecoveryManager.resync(RecoveryManager.java:1784)
at com.ibm.ws.Transaction.JTA.RecoveryManager.run(RecoveryManager.java:2241)

原因

Oracle 需要 WebSphere Application Server 事务服务等服务才能具有执行事务恢复的特殊许可权。

解决方案

以 SYS 用户的身份在 Oracle 服务器上运行以下命令:
grant select on pending_trans$ to public;
grant select on dba_2pc_pending to public;
grant select on dba_pending_transactions to public;
grant execute on dbms_system to <user>;
User 是应用程序服务器中有权执行 XA 数据源事务恢复的用户标识。如果未授权任何用户标识执行事务恢复,那么应用程序服务器将使用数据源的登录别名作为用户标识。

此问题在 Oracle 错误 3979190 下面提到。运行前面的那些命令可解决问题。

应用程序服务器在注册 Oracle JDBC Diagnosability MBean 时,在 SystemOut.log 文件中收到错误

当 WebSphere Application Server 尝试连接到 Oracle 数据库时,SystemOut.log 文件中显示以下错误:
E Error while registering Oracle JDBC Diagnosability MBean.
javax.management.MalformedObjectNameException: Invalid character '' in value part of property

此错误在首次连接到 Oracle 数据库期间发生,因为 MBean 的诊断未正确初始化。

您可以忽略此错误。但是,您可以应用 Oracle 提供的补丁编号 6362104 以防止将来发生此错误。请与 Oracle 核实您是否已应用了任何其他补丁,因为此补丁可能无法与其他补丁共存。
注: 本主题引用了一个或多个应用程序服务器日志文件。作为另一种建议采用的方法,您可以在分布式系统和 IBM® i 系统上配置服务器以使用高性能可扩展日志记录 (HPEL) 记录和跟踪基础结构,而不使用 SystemOut.logSystemErr.logtrace.logactivity.log 文件。您还可以将 HPEL 与本机 z/OS® 日志记录设施结合使用。如果要使用 HPEL,那么可从服务器概要文件 bin 目录使用 LogViewer 命令行工具来访问所有日志和跟踪信息。有关使用 HPEL 的更多信息,请参阅有关使用 HPEL 对应用程序进行故障诊断的信息。

指示主题类型的图标 参考主题



时间戳记图标 最近一次更新时间: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=rtrb_dsaccess2
文件名:rtrb_dsaccess2.html