+

Search Tips   |   Advanced Search

Data access problems - Oracle data source


This article provides troubleshooting tips for accessing Oracle data sources.

To determine the exact version of an Oracle JDBC driver...

$ java -jar ojdbc6.jar
Oracle 11.2.0.1.0 JDBC 4.0 compiled with JDK6

 

What kind of error do you see when you try to access the Oracle-based data source?

 

An invalid Oracle URL is specified

This error might be caused by an incorrectly specified URL on the URL property of the target data source.

Examine the URL property for the data source object in the admin console. For the 8i OCI driver, verify that oci8 is used in the URL. For the 9i OCI driver, we can use either oci8 or oci. Examples of Oracle URLs:

 

"DSRA0080E: An exception was received by the data store adapter. See original exception message: ORA-00600" when connecting to or using an Oracle data source

A possible reason for this exception is that the version of the Oracle JDBC driver being used is older than the Oracle database. It is possible that more than one version of the Oracle JDBC driver is configured on the WAS.

Examine the version of the JDBC driver. Sometimes we can determine the version by looking at the class path to determine what directory the driver is in.

If we cannot determine the version this way, use the following program to determine the version. Before running the program, set the class path to the location of the JDBC driver files.

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());
         }
     }

If the driver and the database are at different versions, replace the JDBC driver with the correct version. If multiple drivers are configured, remove any that occur at the incorrect level.

 

DSRA8100E: Unable to get a {0} from the DataSource. Explanation: See the linkedException for more information.

When using an oracle thin driver, Oracle creates a "java.sql.SQLException: invalid arguments in call" error if no user name or password is specified when getting a connection. If we see this error while running WAS, the alias is not set.

To remove the exception, define the alias on the data source.

 

"Error while trying to retrieve text for error" error when connecting to an Oracle data source

The most likely cause of this error is that the Oracle 8i OCI driver is being used with an ORACLE_HOME property that is either not set or is set incorrectly.

To correct the error, examine the user profile that WAS is running under to verify that the $ORACLE_HOME environment variable is set correctly.

 

"java.lang.UnsatisfiedLinkError:" connecting to an Oracle data source

The environment variable LIBPATH might not be set or is set incorrectly, if the data source creates an UnsatisfiedLinkError error, and the full exception indicates that the problem is related to an Oracle module, as in the following examples. Example of invalid an LIBPATH for the 8i driver:

Exception in thread "main" java.lang.UnsatisfiedLinkError:
/usr/WebSphere/AppServer/java/jre/bin/libocijdbc8.so:   load ENOENT on shared library(s)
/usr/WebSphere/AppServer/java/jre/bin/libocijdbc8.so libclntsh.a

Example of an invalid LIBPATH for the 9i driver:

Exception in thread "main" java.lang.UnsatisfiedLinkError: no ocijdbc9  (libocijdbc9.a or .so) in java.library.path at java.lang.ClassLoader.loadLibrary(ClassLoader.java(Compiled Code)) at java.lang.Runtime.loadLibrary0(Runtime.java:780)

To correct the problem:

  1. Examine the user profile under which the WAS is running to verify that the LIBPATH environment variable includes Oracle libraries. Scan for the lobocijdbc8.so file to find the right directory.

 

java.lang.NullPointerException referencing 8i classes, or " internal error: oracle.jdbc.oci8. OCIEnv" connecting to an Oracle data source

The problem might be that the 9i OCI driver is being used on an AIX 32-bit machine, the LIBPATH is set correctly, but the ORACLE_HOME environment variable is not set or is set incorrectly. You can encounter an exception similar to either of the following when the application attempts to connect to an Oracle data source: Exception example for the java.lang.NullPointerException:

Exception in thread "main" java.lang.NullPointerException at oracle.jdbc.oci8.OCIDBAccess.check_error(OCIDBAccess.java:1743) at oracle.jdbc.oci8.OCIEnv.getEnvHandle(OCIEnv.java:69) at oracle.jdbc.oci8.OCIDBAccess.logon(OCIDBAccess.java:452) at oracle.jdbc.driver.OracleConnection. <init>(OracleConnection.java:287)

Exception example for the java.sql.SQLException:

Exception in thread "main" java.sql.SQLException: internal error: oracle.jdbc.oci8. OCIEnv@568b1d21 at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:184) at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:226) at oracle.jdbc.oci8.OCIEnv.getEnvHandle(OCIEnv.java:79)

To correct the problem, examine the user profile that WAS is running under to verify that it has the $ORACLE_HOME environment variable set correctly, and that the $LIBPATH includes $ORACLE_HOME/lib.

 

WSVR0016W: Classpath entry for the Oracle JDBC Thin Driver has an invalid variable

This error occurs when there is no environment variable defined for the property, ORACLE_JDBC_DRIVER_PATH.

Verify this problem in the admin console. Go to Environment > Manage WebSphere Variables to verify whether the variable ORACLE_JDBC_DRIVER_PATH is defined.

To correct the problem, click New and define the variable. For example, name : ORACLE_JDBC_DRIVER_PATH , value : c:\oracle\jdbc\lib. Use a value that names the directory in the operating system that contains the ojdbc6.jar file (or the ojdbc14_g.jar file to enable Oracle trace).

 

Transaction recovery failure (for XA data sources)

Problem When WAS attempts to recover Oracle database transactions, the transaction service issues the following exception:

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)

Cause

Oracle requires services such as the WAS transaction service to have special permissions for performing transaction recoveries.

Solution As user SYS, run the following commands on the Oracle 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 is a user ID in the appserver that is authorized to perform transaction recovery for the XA data source. If we have not authorized any user IDs to perform transaction recovery, the appserver will use the login alias for the data source as the user ID.

This problem is mentioned under Oracle bug: 3979190. Run the preceding commands solves the problem.



Related concepts


welc6toptroubleshooting.html

 

Related tasks


Develop data access applications
Example: Using IBM extended APIs to share connections between CMP beans and BMP beans

 

Related


Data access problems
Data access problems - DB2 database
Data access problems - Microsoft SQL Server data source
Data access problems - Apache Derby database
Data access problems - Sybase data source
Extensions to data access APIs