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:
- Verwenden Sie DB-Verbindungspooling, um
Connection
gemeinsam zu nutzen Objekte zwischen Threads. Oder, - 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!