Probleme beim Datenzugriff
Die Diagnosetools von WebSphere Application Server stellen Services bereit, die Sie bei der Behebung von Problemen in der Datenbankverbindung unterstützen. Außerdem werden auf der IBM® Website flexible Suchfunktionen bereitgestellt, mit denen Sie nach dokumentierten Lösungen für datenbankspezifische Verbindungsprobleme suchen können.
Mit den folgenden Schritten können Sie Konnektivitätsprobleme schnell eingrenzen.
- Suchen Sie in den Protokolldateien des Anwendungsservers nach Hinweisen.
Weitere Informationen finden Sie im Artikel "Fehlerprotokoll konfigurieren".
Weitere Informationen finden Sie im Artikel "JVM-Protokolle anzeigen". Standardmäßig sind diese Dateien Stammverzeichnis_des_Anwendungsservers/Servername/SystemErr.log und SystemOut.log.
Anmerkung: Dieser Artikel referenziert eine oder mehrere Protokolldateien des Anwendungsservers. Alternativ dazu wird empfohlen, den Server so zu konfigurieren, dass er die HPEL-Protokoll- und -Traceinfrastruktur (High Performance Extensible Logging) verwendet und nicht die Dateien SystemOut.log , SystemErr.log, trace.log und activity.log auf verteilten oder IBM i-Systemen. Sie können HPEL auch in Verbindung mit Ihren nativen z/OS-Protokolleinrichtungen verwenden. Wenn Sie HPEL verwenden, können Sie mit dem Befehlszeilentool LogViewer im Verzeichnis "bin" des Serverprofils auf alle Ihre Protokoll- und Tracedaten zugreifen. Weitere Informationen zur Verwendung von HPEL finden Sie in der Dokumentation zum Einsatz von HPEL für die Fehlerbehebung in Anwendungen. - Vergewissern Sie sich, dass die Eigenschaft für die Helper-Klasse der Datenquelle ordnungsgemäß definiert und im Klassenpfad von WebSphere Application Server enthalten ist. Unerwartete Fehler bzw. unerklärliches Verhalten kann auf den fehlenden bzw. ungültigen Namen einer Helper-Klasse zurückzuführen sein. Wenn WebSphere Application Server die angegebene Klasse nicht laden kann, verwendet er eine Helper-Standardklasse, die mit Ihrem Datenbankmanager möglicherweise nicht ordnungsgemäß funktioniert.
- Vergewissern Sie sich, dass der JNDI-Name (Java™ Naming and Directory Interface) der Datenquelle mit dem Namen übereinstimmt, den der Client verwendet, wenn er versucht, auf die Datenquelle zuzugreifen. Wenn Fehlernachrichten anzeigen, dass das Problem auf die Benennung zurückzuführen ist, z. B. ein Verweis auf den Namensserver oder Namensservice, oder Fehler-IDs enthalten, die mit NMSV beginnen, lesen Sie die Artikel "Fehler bei der Benennung" und "Fehler des Namensservice beheben" zu.
- Aktivieren Sie die Traceerstellung für den Ressourcenadapter mit der Tracespezifikation "RRA=all=enabled". Befolgen Sie die Anweisungen, anhand derer Sie einen Speicherauszug der Traceausgabe erstellen und diese Ausgabe durchsuchen können, um die Fehlerursache einzugrenzen. Weitere Informationen finden Sie im Artikel zum Aktivieren der Traceerstellung.
Eine umfassende Liste datenbankspezifischer Tipps zur Fehlerbehebung finden Sie auf der Produktunterstützungsseite für WebSphere Application Server. (Sie finden den Link am Ende dieses Artikels.) Geben Sie im Feld "Search Support" den Namen eines Datenbanklieferanten zusammen mit Ihren Suchbegriffen ein. Wählen Sie Solve a problem aus, und klicken Sie anschließend auf Search.
Referenzinformationen zur Unterstützung finden Sie im Artikel zur Hilfe bei der Fehlerbehebung von IBM in diesem Information Center.
Derzeit enthält dieses Information Center nur eine begrenzte Anzahl von Fehlerbehebungstipps für die folgenden Datenbanken:
Allgemeine Fehler beim Datenzugriff
- Ausnahme vom Typ "IllegalConnectionUseException" tritt ein
- WTRN0062E: Es wurde versucht, mehrere einphasige Ressourcen in einer globalen Transaktion zu verwenden. Dieser Vorgang ist ungültig.
- ConnectionWaitTimeoutException.
- com.ibm.websphere.ce.cm.StaleConnectionException: [IBM][CLI Driver] SQL1013N The database alias name or database name "NULL" could not be found. SQLSTATE=42705
- java.sql.SQLException: java.lang.UnsatisfiedLinkError:
- "J2CA0030E: Die Methode enlist hat java.lang.IllegalStateException abgefangen" innerhalb der Fehlers "WTRN0063E: Es wurde versucht, eine einphasige Ressource mit zweiphasigen Ressourcen zu registrieren. Dieser Vorgang ist ungültig." beim Versuch, eine Transaktion auszuführen.
- Ausnahme "java.lang.UnsatisfiedLinkError:xaConnect" beim Versuch, eine Datenbankoperation durchzuführen.
- Beim Versuch, eine Datenbankoperation auszuführen, wurde der Fehler "J2CA0114W: Es wurde kein Aliasname für containergesteuerter Authentifizierung für die Verbindungsfactory oder Datenquelle Datenquelle gefunden" angezeigt
- Es wird ein Fehler ausgelöst, wenn Sie den Befehl "ws_ant" verwenden, um auf HP-Plattformen eine Datenbankanpassung an Structured Query Language in Java (SQLJ) durchzuführen.
- Mit CMP (Container-Managed Persistence, über Container realisierte Transaktionspersistenz) kann die definierte Datenbankzugriffsfunktion nicht abgerufen werden.
IllegalConnectionUseException
Eine mögliche Ursache für diesen Fehler ist, dass eine Verbindung, die von einer WAS40-Datenquelle abgerufen wurde, für mehrere Threads verwendet wird. Dieser Umstand stellt eine Verletzung des J2EE-1.3-Programmiermodells dar und löst, wenn er auf dem Server ermittelt wird, eine Ausnahme aus. Dieser Fehler tritt auf bei Benutzern, die über Servlets oder BMP-Enterprise-Beans (Bean-Managed Persistence) auf eine Datenquelle zugreifen.
Überprüfen Sie zur Bestätigung dieses Problems den Code für gemeinsame Benutzung von Verbindungen. Wenn die Empfehlungen des Programmiermodells nicht befolgt werden, kann der Code "versehentlich" die gemeinsame Benutzung aktivieren. Dies kann z. B. der Fall sein, wenn der Code die Verbindung in der Instanzvariable eines Servlets speichert und die Verbindung für mehrere Threads gleichzeitig verwendet wird.
WTRN0062E: Es wurde versucht, mehrere einphasige Ressourcen in einer globalen Transaktion zu verwenden.
- Es wurde versucht, eine einphasige Verbindung gemeinsam zu nutzen, aber die getConnection-Aufrufe verwenden nicht alle dieselben Verbindungseigenschaften, wie z. B. AccessIntent.
- Es wurde versucht, mehrere Verbindungen, die nicht gemeinsam benutzt werden können, in eine globale Transaktion einzubeziehen, wenn die Datenquelle keine XA-Ressource ist.
- Es wurde versucht, eine einphasige Ressource in eine globale Transaktion
einzubeziehen, obwohl eine XA-Ressource oder eine andere einphasige Ressource bereits in
diese globale Transaktion einbezogen wurde. Die folgenden Informationen können Ihnen möglicherweise
helfen festzustellen, warum die Fehlerbedingung eintritt:
- Wenn Sie eine Nicht-XA-Datenquelle verwenden und die gemeinsame Nutzung einer Verbindung erwarten, setzen Sie alle relevanten Ressourcenreferenzen (resource-ref) auf gemeinsam nutzbar (shareable). Wenn Sie keine Ressourcenreferenz verwenden, werden standardmäßig nicht gemeinsam nutzbare Verbindungen verwendet.
- Ihre Verbindung wird nicht gemeinsam genutzt, wenn Sie nicht in allen Verbindungsanforderungen dieselben Verbindungseigenschaften, wie z. B. IsolationLevel oder AccessIntent, verwenden.
- Ihre Verbindungen werden unter Umständen nicht gemeinsam genutzt, wenn Sie CMP-Beans verwenden, die möglicherweise unterschiedliche AccessIntent-Einstellungen verwenden. Weitere Informationen zu CMP-Beans, die eine Verbindung mit Nicht-CMP-Komponenten gemeinsam nutzen, finden Sie in der Dokumentation zu den Erweiterungen für Datenzugriffs-APIs.
- Prüfen Sie, welche Daten der Clientcode mit seinen getConnection-Anforderungen übergibt, und vergewissern Sie sich, dass die Anforderungen untereinander konsistent sind.
- Überprüfen Sie den Umfang der gemeinsamen Nutzung der Verbindungen in der Ressourcenbindung mit einem
Assembliertool. Weitere Informationen finden Sie im Artikel "Assembliertools".
- Wenn Sie einen nicht gemeinsam nutzbaren Verbindungsbereich ausführen, vergewissern Sie sich, dass die Datenquelle eine XA-Datenquelle ist.
- Wenn Sie einen gemeinsam benutzbaren Verbindungsbereich verwenden, vergewissern Sie sich, das alle Verbindungseigenschaften, wie z. B. AccessIntent und andere Eigenschaften (z. B. userid), gemeinsam benutzt werden können.
- Überprüfen Sie die Implementierungsklasse des JDBC-Providers in der Anzeige "JDBC-Ressource verwalten" der Administrationskonsole, um sicherzustellen, dass diese Klasse XA-Transaktionen unterstützt.
ConnectionWaitTimeoutException beim Zugriff auf eine Datenquelle oder einen Ressourcenadapter
- Die maximale Anzahl der Verbindungen für einen bestimmten Pool ist auf "Niedrig" eingestellt. Die Nachfrage nach der gemeinsamen Benutzung von Verbindungen ist größer als der konfigurierte Maximalwert für den Verbindungspool. Ein Hinweis darauf, dass ein zu niedriger Wert die Ursache des Problems ist, liegt vor, wenn Sie diese Ausnahmen regelmäßig empfangen, die CPU-Auslastung jedoch nicht hoch ist. Ist dies der Fall, sind zu wenige Verbindungen verfügbar, um die Threads auf dem Server auszulasten.
- Die Wartezeit für die Verbindung ist zu niedrig. Die aktuelle Nachfrage nach Verbindungen ist so hoch, dass manchmal kurzzeitig keine Verbindung verfügbar ist. Wenn der Wert der Wartezeit für die Verbindung zu niedrig ist, überschreiten Sie möglicherweise ein Zeitlimit, kurz bevor ein Benutzer eine Verbindung in den Pool zurückgibt. Durch Anpassung der Wartezeit können Sie dieses Problem lösen. Ein Hinweis darauf, dass ein zu niedriger Wert die Ursache des Problems ist, liegt vor, wenn Sie über einen längeren Zeitraum nahezu die Maximalanzahl der Verbindungen verwenden und diese Fehlernachricht regelmäßig empfangen.
- Sie schließen einige Verbindungen nicht, oder Sie geben die Verbindungen langsam in den Pool zurück. Das kann leicht geschehen, wenn Sie bei Verwendung nicht gemeinsam benutzbarer Verbindungen vergessen, die Verbindungen zu schließen, oder wenn Sie die Verbindungen erst lange, nachdem Sie sie benutzt haben, schließen und dadurch verhindern, dass sie zur erneuten Verwendung in den Pool zurückgegeben werden. Der Pool wird schnell geleert, und alle Anwendungen empfangen Ausnahmen des Typs "ConnectionWaitTimeoutException". Ein Hinweis darauf, dass nicht geschlossene Verbindungen die Ursache des Problems sind, liegt vor, wenn Sie nicht genügend Verbindungen im Verbindungspool haben und Sie diesen Fehler bei den meisten Anforderungen empfangen.
- Sie verursachen mehr Arbeitslast, als der Server oder das Back-End-System Ressourcen zur Verarbeitung bereitstellen kann. In diesem Fall müssen Sie angeben, von welchen Ressourcen Sie eine größere Menge benötigen und Konfigurationen oder Hardware an die geänderte Bedarfssituationen anpassen. Ein Hinweis darauf, dass dies die Ursache des Problems ist, liegt vor, wenn der Anwendungsserver oder der Datenbankserverprozessor zu nahezu 100 % ausgelastet ist.
- Legen Sie fest, dass eine Anwendung weniger Verbindungen benutzen soll.
- Schließen Sie die Verbindungen ordnungsgemäß.
- Ändern Sie die Pooleinstellungen von MaxConnections oder ConnectionWaitTimeout.
- Passen Sie die Ressourcen und deren Konfigurationen an.
com.ibm.websphere.ce.cm.StaleConnectionException: [IBM][CLI Driver] SQL1013N The database alias name or database name "NULL" could not be found
com.ibm.websphere.ce.cm.StaleConnectionException: [IBM][CLI Driver] SQL1013N The database alias name or database name "NULL" could not be found. SQLSTATE=42705. Dieser Fehler tritt auf, wenn eine Datenquelle zwar definiert, das Attribut databaseName und der entsprechende Wert jedoch nicht den angepassten Eigenschaften hinzugefügt wurden.
- Klicken Sie in der Administrationskonsole auf .
- Wählen Sie den JDBC-Provider aus, der die fehlerhafte Datenquelle unterstützt.
- Wählen Sie Datenquellen und anschließend die fehlerhafte Datenquelle aus.
- Klicken Sie unter Weitere Eigenschaften auf Angepasste Eigenschaften.
- Wählen Sie die Eigenschaft databaseName aus, oder fügen eine Eigenschaft, falls nicht vorhanden, hinzu, und geben Sie den tatsächlichen Datenbanknamen als Wert ein.
- Klicken Sie auf Anwenden oder OK, und wählen Sie dann in der Aktionsleiste die Option Speichern aus.
- Versuchen Sie erneut, auf die Datenquelle zuzugreifen.
java.sql.SQLException: java.lang.UnsatisfiedLinkError
Dieser Fehler zeigt an, dass das Verzeichnis, das die Binärbibliotheken zur Unterstützung einer Datenbank enthält, nicht in der Umgebungsvariable LIBPATH der Umgebung, in der WebSphere Application Server gestartet wird, enthalten sind.
Der Pfad, der die Bibliotheken des DBM-Herstellers enthält, variiert je nach DBM. Eine Möglichkeit, die Binärbibliotheken zu finden, besteht darin, nach der fehlenden Bibliothek, die in der Fehlernachricht angegeben ist, zu suchen. Anschließend kann in der Variable LIBPATH das fehlende Verzeichnis angegeben werden. Sie können das Verzeichnis entweder in der .profile-Datei des Accounts, mit dem WebSphere Application Server gestartet wird, angeben oder eine Anweisung in einer .sh-Datei hinzufügen, die dann das Programm startServer ausführt.
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.
Fehler J2CA0030E in Fehler WTRN0063E eingeschlossen
Beim Versuch, eine Transaktion auszuführen, ist der Fehler "J2CA0030E: Die Methode enlist hat java.lang.IllegalStateException abgefangen" im Fehler "WTRN0063E: Es wurde versucht, eine einphasige Ressource mit zweiphasigen Ressourcen zu registrieren. Dieser Vorgang ist ungültig." eingeschlossen. Dieser Fehler kann auftreten, wenn die Unterstützung für den letzten Teilnehmer (Last Participant Support, LPS) nicht vorhanden oder inaktiviert ist. Die Unterstützung für den letzten Teilnehmer ermöglicht das Auflisten einer einphasigen und einer zweiphasigen Ressource in derselben Transaktion.
- WebSphere Application Server Programming Model Extensions (PME) ist installiert. PME ist im Produkt Application Server Integration Server enthalten.
- Die Option Additional Integration Server Extensions wird bei der Installation von PME aktiviert. Wenn Sie eine typische Installation durchführen, ist diese Option standardmäßig aktiviert. Wenn Sie eine angepasste Installation durchführen, können Sie diese Funktion inaktivieren und auf diese Weise die Unterstützung für den letzten Teilnehmer inaktivieren.
- Die Anwendung, die die einphasige Ressource auflistet, wurde mit der aktivierten Option Risiko heuristischer Verfahren akzeptieren implementiert. Diese Implementierung wird mit einem Assembliertool durchgeführt.
Ausnahme "java.lang.UnsatisfiedLinkError:xaConnect" beim Versuch, eine Datenbankoperation durchzuführen
- Die häufigsten Ursachen sind folgende: Der JDBC-Treiber, der die Konnektivität zur Datenbank unterstützt, wurde nicht angegeben, es wurde eine falsche Version des
Treibers angegeben, oder die nativen Bibliotheken, die den Treiber unterstützen, sind im Systempfad enthalten.
- Zur Behebung dieses Fehlers auf einer Windows-Plattform
müssen Sie sicherstellen, dass die JAR-Datei des JDBC-Treibers in der Umgebungsvariablen PATH des Systems enthalten ist.
- Wenn Sie DB2 verwenden,
vergewissern Sie sich, dass zumindest das DB2-Clientprodukt
auf dem WebSphere-Host installiert ist.
- In DB2 Version 7.2 und früher ist die Datei, in der das Clientprodukt in WebSphere Application Server installiert ist, db2java.zip. Vergewissern Sie sich, dass das Programm usejdbc2.bat nach der Datenbankinstallation und nach jedem Upgrade des Datenbankprodukts ausgeführt wird.
- In DB2 Version 8.1 und höher wird empfohlen,
bei der Definition eines
JDBC-Providers
unter WebSphere Application Server
den JDBC-Providertreiber für DB2 Universal zu verwenden. Die Treiberdatei ist db2jcc.jar. Wenn Sie die Option "Typ 2"
(Standard) verwenden, muss zumindest das DB2-Clientprodukt
auf dem WebSphere Application Server-Host installiert sein. Bei Auswahl der Option "Typ 4" muss der DB2-Client
nicht installiert sein, aber die Datei db2jcc.jar muss weiterhin vorhanden sein.
Wenn Sie die Position der Treiberdatei angeben, wird empfohlen, sofern möglich Pfad- und Dateinamen der DB2-Zielinstallation anzugeben, anstatt die Datei in ein lokales Verzeichnis zu kopieren. Andernfalls könnten Probleme auftreten, wenn die DB2-Zielinstallation aktualisiert wird und der von WebSphere Application Server verwendete Treiber nicht.
- Wenn Sie DB2 verwenden,
vergewissern Sie sich, dass zumindest das DB2-Clientprodukt
auf dem WebSphere-Host installiert ist.
- Unter Betriebssystemen wie AIX oder Linux müssen Sie sicherstellen, dass
alle erforderlichen nativen Bibliotheken für die Unterstützung des Datenbankclients Ihres Datenbankprodukts in der Umgebungsvariablen LD_LIBRARY_PATH
im Profil des Accounts angegeben sind, unter dem WebSphere Application Server ausgeführt wird. Wenn Sie mit DB2 arbeiten, ist die native Bibliothek "libdb2jdbc.so". Die beste Methode, um sicherzustellen, dass WebSphere ordnungsgemäß auf diese Bibliothek zugreift, ist der Aufruf des Scripts "db2profile", das mit DB2 im Script .profile des Accounts (z. B. "root") bereitgestellt wird, unter dem WebSphere ausgeführt wird.
- Wenn Sie mit DB2 Version 7.2 oder früher arbeiten, stellen Sie sicher, dass das Script usejdbc2, das mit DB2 bereitgestellt wird, aus dem Profil des Accounts aufgerufen wird, unter dem WebSphere Application Server gestartet wird.
- Wenn Sie mit DB2 Version 8.1 oder höher arbeiten, lesen Sie die vorherigen Anweisungen für das Betriebssystem Windows.
- Zur Behebung dieses Fehlers auf einer Windows-Plattform
müssen Sie sicherstellen, dass die JAR-Datei des JDBC-Treibers in der Umgebungsvariablen PATH des Systems enthalten ist.
- Wenn DB2 als Datenbankmanager verwendet wird,
haben Sie möglicherweise die Option zum Erstellen einer 64-Bit-Instanz ausgewählt. Manchmal werden 64-Bit-Konfigurationen nicht unterstützt. Sollten Sie diese Option ausgewählt haben, entfernen Sie die Datenbankinstanz, und erstellen Sie eine neue Instanz mit der
32-Bit-Standardeinstellung.
Wenn Sie den Universal JDBC T2 Driver verwenden, unterstützt WebSphere Application Server die Interaktion mit einem 64-Bit-DB2-UDB-Server, aber nur über einen 32-Bit-DB2-UDB-Client. Die Umgebung von WebSphere Application Server (CLASSPATH usw.) muss den 32-Bit-Clientcode verwenden, um eine ordnungsgemäße Funktionsweise sicherzustellen.
Mit einem JDBC-Treiber für Universal des Typs 4 benötigen Sie den 32-Bit-DB2-Client nicht. Sie müssen nur den Klassenpfad so konfigurieren, dass die Datei "db2jcc.jar" und die zugehörigen Lizenzdateien für die Umgebung von WebSphere Application Server enthalten sind.
Anmerkung: Allgemeine Hilfe zum Konfigurieren von JDBC-Treibern und Datenquellen in WebSphere Application Server finden Sie im Artikel "In Anwendungen auf Daten zugreifen".
Beim Versuch, eine Datenbankoperation auszuführen, wurde der Fehler "J2CA0114W: Es wurde kein Aliasname für die containergesteuerte Authentifizierung für die Verbindungsfactory oder Datenquelle Datenquelle gefunden" angezeigt
Dieser Fehler kann in der Datei SystemOut.log auftreten, wenn Sie nach der Erstellung der Datenquelle mit dem JACL-Script eine Anwendung ausführen, um auf eine Datenquelle zuzugreifen.
$AdminConfig create MappingModule $cmpConnectorFactory "{mappingConfigAlias
DefaultPrincipalMapping} {authDataAlias $authDataAlias}
Fügen Sie die fehlende Zeile zum JACL-Script hinzu, und führen Sie das Script erneut aus. Ein Beispiel-JACL-Script finden Sie im Artikel "Beispiel: Mit der JMX-API und dem Scripting-Tool einen JDBC-Provider und eine Datenquelle erstellen".
Ein Fehler tritt auf, wenn Sie den Befehl "ws_ant" verwenden, um die Datenbankanpassung für SQLJ auf HP-Plattformen durchzuführen
[java] [ibm][db2][jcc][sqlj]
[java] [ibm][db2][jcc][sqlj] Begin customization
[java] [ibm][db2][jcc][sqlj] encoding not supported!!
Dieser Fehler kann auftreten, wenn die Datenbanken mit dem Standardzeichensatz von HP erstellt wurden. Der JCC-Treiber (Java Common Client) ist bei der Konvertierung von Codepages
vom Software Development Kit abhängig. Das mit diesem Produkt bereitgestellte SDK unterstützt die HP-Standard-Codepage jedoch nicht.export LANG=en_US.iso88591
Aktuelle technische Hinweise zu DB2 finden Sie auf der IBM Support Site
zur Software für das Informationsmanagement.Mit CMP (Container-Managed Persistence, über Container realisierte Transaktionspersistenz) kann die definierte Datenbankzugriffsfunktion nicht abgerufen werden
Wenn WebSphere Application Server bestimmten generierten Code, auf den in der Datenbank der Verbindungsfactory zugegriffen wird, zwischenspeichert und Änderungen in der JAR-Datei die Neugenerierung des Datenbankzugriffs erfordern, werden die Änderungen erst aktiv, wenn Sie den Server stoppen und erneut starten.
- Es wird eine angepasste Finder-Methode zur Enterprise-Bean hinzugefügt. Es wird eine Ausnahme vom Typ NullPointerException erstellt.
- Es wird eine angepasste Finder-Methode in der Enterprise-Bean aktualisiert. Die neue SQL-Anweisung wird nicht ausgeführt.
- Die Schemazuordnung wird geändert. Die neue SQL-Anweisung wird nicht ausgeführt.
Zusammenfassend gesagt, wenn Sie eine angepasste Finder-Methode zu einer Enterprise-Bean hinzufügen oder eine Enterprise-Bean mit einer angepassten Finder-Methode aktualisieren, müssen Sie den Server stoppen und anschließend erneut starten.