Oracle
 sql >> Datenbank >  >> RDS >> Oracle

java.sql.SQLException:Listener lehnte die Verbindung mit folgendem Fehler ab:ORA-12519, TNS:kein geeigneter Service-Handler gefunden

Ihre Multithread-Anwendung öffnet zu viele Verbindungen/Sitzungen. Daher bricht der Listener ab und blockiert neue Verbindungen für eine Weile.

Überprüfen Sie zuerst Ihre DB-Ressourcennutzung:

SELECT * FROM v$resource_limit WHERE resource_name IN ('processes','sessions');

Überprüfen Sie, ob Ihre MAX_UTILIZATION für Ihre Prozesse oder Sitzungen zu nahe an LIMIT_VALUE herankommt. Wenn ja, sollten Sie entweder:

  1. Verwenden Sie DB-Verbindungspooling, um Connection gemeinsam zu nutzen Objekte zwischen Threads. Oder,
  2. Erhöhen Sie die Anzahl der Prozesse/Sitzungen, die Oracle gleichzeitig bedienen kann.

Eigentlich sollte Connection Pooling (#1) immer gemacht werden. Andernfalls kann eine Anwendung nicht hochskaliert werden. Prüfen Sie Apache Commons DBCP für Details. Öffnen Sie für #2 eine neue SQL*Plus-Sitzung als SYSTEM und führen Sie Folgendes aus:

ALTER system SET processes=<n-as-per-number-of-threads> scope=spfile;

um die Backend-Parallelität zu erhöhen. Starten Sie dann die Datenbank neu. WICHTIG!