Datenzugriffsprobleme bei Oracle-Datenquellen
Dieser Artikel enthält Tipps zur Fehlerbehebung beim Zugriff auf Oracle-Datenquellen.
Welcher Fehler wird beim Zugriff auf die Oracle-gestützte Datenquelle angezeigt?
- Ungültiger Oracle-URL angegeben
- "DSRA0080E: Vom Data Store Adapter wurde eine Ausnahme empfangen. Ziehen Sie die ursprüngliche Ausnahmenachricht zu Rate: ORA-00600"
- DSRA8100E: {0} kann nicht aus der Datenquelle abgerufen werden. Erläuterung: Nähere Informationen finden Sie in der linkedException.
- "Error while trying to retrieve text for error"
- Bei der Verwendung eines Oracle-OCI-Treibers als JDBC-Treiber treten Fehler beim Klassenladeprogramm auf
- "java.lang.UnsatisfiedLinkError:" beim Herstellen einer Verbindung zu einer Oracle-Datenquelle
- Beim Versuch, eine Verbindung zu einer Oracle-Datenquelle herzustellen oder Oracle-Klassen zu referenzieren, treten Fehler auf
- WSVR0016W: Der Klassenpfadeintrag für den Oracle JDBC Thin Driver enthält eine ungültige Variable
- Fehler bei der Transaktionswiederherstellung (für XA-Datenquellen)
- Der Anwendungsserver empfängt einen Fehler in der Datei "SystemOut.log", wenn er die Oracle JDBC Diagnosability MBean registriert.
Ungültiger Oracle-URL angegeben
Dieser Fehler kann durch einen falsch angegebenen URL in der Eigenschaft "URL" der Zieldatenquelle ausgelöst werden.
Überprüfen Sie die Eigenschaft "URL" für das Datenquellenobjekt in der Administrationskonsole, um sicherzustellen, dass sie richtig ist.
- Für Thin Driver: jdbc:oracle:thin:@//hostname:1521/myDatabase
- Für Thick Driver (OCI): jdbc:oracle:oci:@tnsname1
"DSRA0080E: Vom Data Store Adapter wurde eine Ausnahme empfangen. Ziehen Sie die ursprüngliche Ausnahmenachricht zu Rate: ORA-00600"
Eine mögliche Ursache für diese Ausnahme ist, dass die Version des verwendeten Oracle-JDBC-Treibers älter ist als die Oracle-Datenbank. Möglicherweise wurden mehrere Versionen des Oracle-JDBC-Treibers in WebSphere Application Server konfiguriert.
Überprüfen Sie die Version des JDBC-Treibers. Sie können die Version über den Klassenpfad ermitteln, d. h., Sie können feststellen, in welchem Verzeichnis der Treiber sich befindet.
import java.sql.*;
import oracle.jdbc.driver.*;
class JDBCVersion
{
public static void main (String args[])
throws SQLException
{
// Den Oracle-JDBC-Treiber laden
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
// Eine Verbindung zur Datenbank abrufen
Connection conn = DriverManager.getConnection
("jdbc:oracle:thin:@appaloosa:1521:app1","sys","change_on_install");
// DatabaseMetaData-Objekt für Oracle erstellen
DatabaseMetaData meta = conn.getMetaData();
// Treiberinformationen abrufen:
System.out.println("JDBC driver version is " + meta.getDriverVersion());
}
}
Sollten Treiber und Datenbank unterschiedliche Versionen haben, ersetzen Sie den JDBC-Treiber durch die richtige Version. Wenn mehrere Treiber konfiguriert sind, entfernen Sie mit der falschen Version.
DSRA8100E: {0} kann nicht aus der Datenquelle abgerufen werden. Erläuterung: Nähere Informationen finden Sie in der linkedException.
Bei Verwendung eines Oracle Thin Driver löst Oracle die Ausnahme java.sql.SQLException: invalid arguments in call aus, wenn beim Abrufen einer Verbindung kein Benutzername bzw. kein Kennwort angegeben wurde. Wird der Fehler beim Ausführen von WebSphere Application Server ausgelöst, wurde der Aliasname nicht festgelegt.
Zum Entfernen der Ausnahme definieren Sie den Aliasnamen für die Datenquelle.
"Error while trying to retrieve text for error"
Die wahrscheinliche Fehlerursache ist, dass der OCI-Treiber für Oracle verwendet wird und die Eigenschaft ORACLE_HOME nicht oder falsch definiert wurde.
Überprüfen Sie das Benutzerprofil, unter dem WebSphere Application Server ausgeführt wird, und vergewissern Sie sich, dass die Umgebungsvariable $ORACLE_HOME ordnungsgemäß gesetzt ist.
Bei der Verwendung eines Oracle-OCI-Treibers als JDBC-Treiber treten Fehler beim Klassenladeprogramm auf
Wenn Sie einen Oracle-OCI-Treiber als JDBC-Provider konfigurieren, müssen Sie den Pfad angeben, in dem die nativen Bibliotheken gespeichert sind. Geben Sie keinen nativen Bibliothekspfad an, treten Fehler im Klassenladeprogramm auf, wenn Sie das erste Mal versuchen, eine Verbindung herzustellen.
Zum Beheben dieses Problems klicken Sie in der Administrationskonsole auf Pfad der nativen Bibliothek an.
, wählen Sie den Oracle-OCI-Treiber aus, und geben Sie anschließend den Pfad zu den nativen Bibliotheken im Feld"java.lang.UnsatisfiedLinkError:" beim Herstellen einer Verbindung zu einer Oracle-Datenquelle
Es könnte sein, dass die Umgebungsvariable LIBPATH nicht oder falsch gesetzt ist, wenn Ihre Datenquelle einen UnsatisfiedLinkError auslöst und die vollständige Ausnahme auf einen Fehler in einem Oracle-Modul hinweist.
- Überprüfen Sie das Benutzerprofil, unter dem WebSphere Application Server ausgeführt wird, und vergewissern Sie sich, dass die Umgebungsvariable LIBPATH die Oracle-Bibliotheken enthält.
Konfigurieren Sie die Java-Eigenschaft LIBPATH (java.library.path) mit der Variablen "Domäne_region_libpath environment", z. B. control_region_libpath, server_region_libpath oder adjunct_region_libpath. Anweisungen zum Festlegen der LIBPATH-Variablen für die Region finden Sie im Artikel zum Ändern der Variablen, die in BBOM0001I-Nachrichten referenziert werden.
Beim Versuch, eine Verbindung zu einer Oracle-Datenquelle herzustellen oder Oracle-Klassen zu referenzieren, treten Fehler auf
Fehler vom Typ "java.lang.NullPointerException" beim Referenzieren von Oracle-Klassen oder Fehler vom Typ "internal error: oracle.jdbc.oci. OCIEnv" bei Verbindungsherstellung zu einer Oracle-Datenbank
Die Fehlerursache könnte sein, dass der OCI-Treiber auf einer AIX-Maschine verwendet wird und die Variable LIBPATH richtig, die Umgebungsvariable ORACLE_HOME jedoch nicht richtig oder gar nicht gesetzt ist. Möglicherweise wird eine Ausnahme wie die folgende angezeigt, wenn Ihre Anwendung versucht, eine Verbindung zu einer Oracle-Datenquelle herzustellen:
Überprüfen Sie das Benutzerprofil, unter dem WebSphere Application Server ausgeführt wird, und vergewissern Sie sich, dass die Umgebungsvariable $ORACLE_HOME ordnungsgemäß gesetzt ist und dass $LIBPATH die Angabe $ORACLE_HOME/lib enthält.
WSVR0016W: Der Klassenpfadeintrag für den Oracle JDBC Thin Driver enthält eine ungültige Variable
Dieser Fehler tritt auf, wenn keine Umgebungsvariable für die Eigenschaft ORACLE_JDBC_DRIVER_PATH definiert ist.
Untersuchen Sie den Fehler in der Administrationskonsole. Klicken Sie auf ORACLE_JDBC_DRIVER_PATH definiert ist.
, um zu prüfen, ob die VariableZur Behebung des Problems klicken Sie auf Neu und definieren die Variable. Nennen Sie die Variable beispielsweise ORACLE_JDBC_DRIVER_PATH und weisen Sie ihr den Wert c:\oracle\jdbc\lib zu. Verwenden Sie einen Wert, der auf das Verzeichnis im Betriebssystem zeigt, in dem die Datei ojdbc6.jar (oder die Datei ojdbc6_g.jar für den Oracle-Trace) enthalten ist.
Fehler bei der Transaktionswiederherstellung (für XA-Datenquellen)
Problem
WTRN0037W: Der Transaktionsservice hat einen Fehler in einer Operation xa_recover festgestellt.
Die Ressource ist com.ibm.ws.rsadapter.spi.WSRdbXaResourceImpl@1114a62.
Der Fehlercode ist XAER_RMERR. Traceinformationen zur Ausnahme folgen:
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)
Ursache
Oracle erfordert Services wie den Transaktionsservice von WebSphere Application Server, um die Sonderberechtigungen für die Ausführung der Transaktionswiederherstellung zu erhalten.
Lösung
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 <Benutzer>;
Benutzer
steht für eine Benutzer-ID im Anwendungsserver, die berechtigt ist, die Transaktionswiederherstellung
für die XA-Datenquelle durchzuführen. Wenn Sie keine Benutzer-IDs für die Durchführung der Transaktionswiederherstellung berechtigt haben, verwendet der Anwendungsserver
den Anmeldealias für die Datenquelle als Benutzer-ID.Dieses Problem wird im Oracle-Programmfehler 3979190 erwähnt. Durch die Ausführung dieser Befehls wird das Problem gelöst.
Der Anwendungsserver empfängt einen Fehler in der Datei "SystemOut.log", wenn er die Oracle JDBC Diagnosability MBean registriert.
E Error while registering Oracle JDBC Diagnosability MBean. javax.management.MalformedObjectNameException: Invalid character '' in value part of property
Dieser Fehler tritt während der einleitenden Verbindung zu einer Oracle-Datenbank auf, weil die Diagnose für die MBean nicht ordnungsgemäß initialisiert wird.