Oracle 数据源的数据访问问题
使用故障诊断技巧以帮助访问 Oracle 数据源。
尝试访问基于 Oracle 的数据源时,遇到的是哪些错误?
- 指定了无效的 Oracle URL
- “DSRA0080E: 数据存储器适配器接收到异常。请参阅原始异常消息:ORA-00600”
- DSRA8100E: 无法从数据源获取 {0}。异常:请参阅 linkedException 以了解更多信息。
- “当尝试检索错误文本时出错”
- 使用 Oracle OCI 驱动程序作为 JDBC 提供程序时发生类装入器错误
- 连接到 Oracle 数据源时产生“java.lang.UnsatisfiedLinkError:”
- 引用 Oracle 类或连接到 Oracle 数据源时发生错误
- WSVR0016W: Oracle JDBC 瘦驱动程序的类路径条目具有无效变量
- 事务恢复失败(限于 XA 数据源)
- 应用程序服务器在注册 Oracle JDBC Diagnosability MBean 时,在 SystemOut.log 文件中收到错误
指定了无效的 Oracle URL
此错误可能是由在目标数据源的 URL 属性中错误地指定了 URL 所导致。
在管理控制台中检查数据源对象的 URL 属性,以确保其正确。
- 对于瘦驱动程序:jdbc:oracle:thin:@//hostname:1521/myDatabase
- 对于胖 (OCI) 驱动程序:jdbc:oracle:oci:@tnsname1
“DSRA0080E: 数据存储器适配器接收到异常。请参阅原始异常消息:ORA-00600”
此异常的可能原因是使用的 Oracle JDBC 驱动程序的版本比 Oracle 数据库旧。可能在 WebSphere® Application Server 上配置了多个版本的 Oracle 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 提供程序时,必须指定存储本机库的路径。如果未指定本机库路径,那么当您首次尝试使用此提供程序进行连接时,将发生类装入器错误。
要纠正此问题,请在管理控制台中单击本机库路径字段中指定指向本机库的路径。
,选择 Oracle OCI 驱动程序,然后在连接到 Oracle 数据源时产生“java.lang.UnsatisfiedLinkError:”
如果数据源产生 UnsatisfiedLinkError 错误,并且整个异常表明此问题与 Oracle 模块相关,那么可能是未设置或未正确设置环境变量 LIBPATH。
- 检查运行 WebSphere Application Server 的用户概要文件,以验证 LIBPATH 环境变量是否包括 Oracle 库。
使用 domain_region_libpath 环境变量(例如 control_region_libpath、server_region_libpath 或 adjunct_region_libpath)来配置 Java LIBPATH (java.library.path) 属性。请参阅有关更改 BBOM0001I 消息中所引用变量的值的主题,获取有关如何设置 region LIBPATH 变量的指示信息。
引用 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 定义的环境变量时,发生此错误。
验证此问题是否为管理控制台问题。转至ORACLE_JDBC_DRIVER_PATH.
以验证是否已定义变量要纠正此问题,单击新建并定义此变量。例如,名称:ORACLE_JDBC_DRIVER_PATH,值:c:\oracle\jdbc\lib。使用的值是对操作系统中包含 ojdbc6.jar 文件(或用于启用 Oracle 跟踪的 ojdbc6_g.jar 文件)的目录进行命名的值。
事务恢复失败(限于 XA 数据源)
问题
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 事务服务等服务才能具有执行事务恢复的特殊许可权。
解决方案
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 文件中收到错误
E Error while registering Oracle JDBC Diagnosability MBean.
javax.management.MalformedObjectNameException: Invalid character '' in value part of property
此错误在首次连接到 Oracle 数据库期间发生,因为 MBean 的诊断未正确初始化。