5 Stimmen

Weblogic JDBC-Datenquelle gibt "No resources currently available in pool" mit nur 1 aktiven Verbindung

Ich verwende Weblogic JDBC-Datenquelle und meine DB ist Oracle 10g, unten ist die Konfiguration.

Früher funktionierte es einwandfrei, aber plötzlich traten Probleme auf, siehe untenstehende Ausnahme.

Weblogic JDBC datasource,java.sql.SQLException: Kann keine XAConnection erhalten weblogic.common.resourcepool.ResourceLimitException: Keine Ressourcen derzeit verfügbar in Pool

<?xml version="1.0" encoding="UTF-8"?> <jdbc-data-source

xmlns="http://www.bea.com/ns/weblogic/90" xmlns:sec="http://www.bea.com/ns/weblogic/90/security" xmlns:wls="http://www.bea.com/ns/weblogic/90/security/wls" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.bea.com/ns/weblogic/920 http://www.bea.com/ns/weblogic/920.xsd "> XL-Referenz-DS
jdbc:oracle:oci:@abc.COM oracle.jdbc.driver.OracleDriver Benutzer DEV_260908 Kennwort Kennwort dll ocijdbc10 Protokoll oci oracle.jdbc.V8Kompatibel true baseDriverClass oracle.jdbc.driver.OracleDriver
1 100 1 wahr SQL SELECT 1 FROM DUAL

DataJndi OnePhaseCommit

Diese Ausnahme tritt in einer Entwicklungsumgebung auf, in der es nur einen verbundenen Benutzer gibt.

Ich weiß, dass dies mit der maximalen Größe des Pools zusammenhängt, aber ich vermute auch, dass dies an Oracle liegen könnte, vielleicht ist Oracle nicht in der Lage, Verbindungen zu erstellen.

Meine Fragen:

  1. Gibt es einen Debug-/Protokollierungsparameter, um die Datenquellenprotokollierung zu aktivieren, so dass ich die Anzahl der erworbenen, freigegebenen und nicht verwendeten Verbindungen in den Protokollen überprüfen kann?
  2. Wie kann ich das Oracle-Verbindungslimit für einen bestimmten Benutzer überprüfen?

8voto

Alex Poole Punkte 172685

Es hört sich so an, als würde etwas nach und nach Verbindungen verlieren, wie Sie zu vermuten scheinen, und Sie erreichen schließlich die maximale JDBC-Poolgröße. Ich glaube nicht, dass Sie zuerst an die Oracle-Grenzen stoßen, da Sie eine ORA-Ausnahme erhalten würden und auch nicht in der Lage wären, sich direkt mit der Datenbank zu verbinden.

Sie können die Datenquelle so konfigurieren, dass Profilinformationen von der WebLogic-Konsole gesammelt werden; gehen Sie im Menü Domänenstruktur zu Dienste->JDBC->Datenquellen, wählen Sie Ihre Verbindung aus und gehen Sie unter Konfiguration auf die Registerkarte Diagnose. Sie können sich aber auch eine ungefähre Vorstellung von den grundlegenden Statistiken des Pools machen: Gehen Sie zu Umgebung->Server, wählen Sie Ihren Server aus, und sehen Sie sich die Registerkarte JDBC unter Überwachung an. Dort werden die aktiven Verbindungen und die Hochwassermarke angezeigt. Wenn einer der beiden Werte mit der maximalen Poolgröße übereinstimmt, ist das ein ziemlich guter Hinweis darauf, dass Sie ein Leck haben.

Auf der Oracle-Seite können Sie sich die Anzahl der zulässigen Sitzungen mit show parameters sessions sondern müssen auch prüfen show parameters processes was sie weiter einschränken kann (und einige davon werden von internen Prozessen benötigt wie pmon ). Sie können sehen, wie viele offene Verbindungen Sie haben mit etwas wie select count(*) from v$session where username = 'DEV_260908'; . Aufgrund des Fehlers würde ich nicht erwarten, dass dies sehr nahe an den Sitzungs-/Prozessgrenzen liegt, aber es sollte mit der Anzahl der aktiven Verbindungen auf der Konsole übereinstimmen.

0voto

Der Weblogic-Server ist nicht in der Lage, eine Verbindung herzustellen. Dies kann passieren, wenn Sie ein Verbindungsobjekt schließen und versuchen, das gleiche Verbindungsobjekt erneut zu verwenden.

Ich hoffe, es hilft!

0voto

Aktivieren Sie WebLogic ServerTransactionTimeout.

  1. Klicken Sie auf den Namen der Datenquelle:

screenshot

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X