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

Was kann zu intermittierenden ORA-12519-Fehlern (TNS:Kein geeigneter Handler gefunden) führen

Ich weiß nicht, ob dies die Antwort aller sein wird, aber nach einigem Suchen haben wir Folgendes herausgefunden.

Der Fehler wird offensichtlich dadurch verursacht, dass der Listener keine Verbindungen akzeptierte, aber warum sollten wir diesen Fehler erhalten, wenn andere Tests problemlos eine Verbindung herstellen könnten (wir könnten uns auch problemlos über sqlplus verbinden)? Der Schlüssel zu dem Problem war nicht, dass wir keine Verbindung herstellen konnten, sondern dass es zeitweise war

Nach einigen Untersuchungen stellten wir fest, dass während des Klassenaufbaus einige statische Daten erstellt wurden, die Verbindungen für die Lebensdauer der Testklasse offen halten und im Laufe der Zeit neue erstellen würden. Obwohl alle Ressourcen ordnungsgemäß freigegeben wurden, als diese Klasse den Geltungsbereich verließ (natürlich über einen finally{}-Block), gab es während des Laufs einige Fälle, in denen diese Klasse alle verfügbaren Verbindungen verschlang (okay, schlecht Übungswarnung - dies war Komponententestcode, der direkt verbunden war, anstatt einen Pool zu verwenden, sodass das gleiche Problem in der Produktion nicht auftreten konnte).

Die Lösung bestand darin, diese Klasse nicht statisch zu machen und im Klassensetup auszuführen, sondern sie stattdessen in den methodenspezifischen setUp- und tearDown-Methoden zu verwenden.

Wenn Sie also diesen Fehler in Ihren eigenen Apps erhalten, schlagen Sie diesem bösen Jungen einen Profiler und sehen Sie, ob Sie möglicherweise ein Verbindungsleck haben. Hoffe das hilft.