Oracle 数据源的数据访问问题

使用故障诊断技巧以帮助访问 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: invalid arguments in call如果获取连接时未指定用户名或密码,那么会发生错误。 如果在运行 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.jdbc.oci。 连接到 Oracle 数据源时发生 OCIEnv 错误

问题可能是 OCI 驱动程序正在 AIX® 机器上使用, 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. 
错误代码为 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 核实您是否已应用了任何其他补丁,因为此补丁可能无法与其他补丁共存。
注: 本主题引用一个或多个应用程序服务器日志文件。 作为建议的替代方法,您可以将服务器配置为使用高性能可扩展日志记录 (HPEL) 日志和跟踪基础结构,而不是在分布式系统和 IBM® i 系统上使用 SystemOut.logSystemErr.logtrace.logactivity.log 文件。 您还可以将 HPEL 与本机 z/OS® 日志记录工具结合使用。 如果您正在使用 HPEL,那么可以从服务器概要文件 bin 目录使用 LogViewer 命令行工具来访问所有日志和跟踪信息。 有关使用 HPEL 的更多信息,请参阅 有关使用 HPEL 对应用程序进行故障诊断的信息。