Was intermittierende ORA-12519 verursachen können: Fehler (TNS keine entsprechenden Handler gefunden)

StackOverflow https://stackoverflow.com/questions/205160

Frage

Wir laufen unsere JUnit 4 Test-Suite gegen Weblogic 9 vor einer Oracle-Datenbank 10 (unter Verwendung von Hudson als Continuous-Integration-Server) und gelegentlich werden wir einen ORA-12519 Absturz bei der Skript-Teardown erhalten. Allerdings ist der Fehler sehr intermittierenden:

  • Es geschieht in der Regel für die gleiche Klasse Test
  • Es ist nicht immer für die gleichen Testfälle passieren (manchmal sind sie passieren)
  • Es passiert nicht für die gleiche Anzahl von Testfällen (überall von 3-9)
  • Manchmal ist es nicht passieren, alles geht

Während ich nicht garantieren kann dies nicht lokal geschehen (wenn sie gegen die gleiche Datenbank ausgeführt wird, natürlich), ich habe die gleiche Suite der Klasse läuft mehrmals ohne Probleme.

Irgendwelche Ideen?

War es hilfreich?

Lösung

Sie wissen nicht, ob diese Antwort der jeder sein, aber nach einiger Graben, hier ist, was wir kamen mit.

Der Fehler wird offensichtlich durch die Tatsache, dass die Zuhörer Verbindungen nicht akzeptieren, aber warum sollten wir diesen Fehler erhalten, wenn andere Tests fein anschließen könnten (wir auch kein Problem durch sqlplus verbinden könnten)? Der Schlüssel zum Problem war nicht, dass wir keine Verbindung herstellen können, aber das war es intermittierende

Nach einigen Untersuchungen stellten wir fest, dass es einige statischen Daten waren während der Klasse Setup erstellt, die offenen Verbindungen für das Leben der Testklasse halten würde, neue zu schaffen, wie es ging. Nun, auch wenn alle Ressourcen ordnungsgemäß freigegeben wurden, wenn diese Klasse den Gültigkeitsbereich ging (über einen finally {} -Block, natürlich), gab es einige Fälle während des Laufes, wenn diese Klasse alle verfügbaren Verbindungen schlucken würde (okay, schlecht Praxis alert - dies war Unit-Test-Code, der direkt eher verbunden als einen Pool verwenden, so das gleiche Problem konnte nicht in der Produktion geschehen)

.

Das Update war nicht die Klasse statisch zu machen und in der Klasse Setup ausführen, aber es stattdessen in den pro-Methode Methoden Auf- und Abbau verwenden.

Also, wenn Sie diesen Fehler in Ihren eigenen Anwendungen erhalten, einen Profiler auf diesen bösen Buben schlagen und sehen, ob Sie eine Verbindung Leck haben könnten. Hoffe, das hilft.

Andere Tipps

Eine andere Lösung, die ich zu einem ähnlichen Fehler gefunden haben, aber die gleiche Fehlermeldung ist die Anzahl der Service-Handler gefunden zu erhöhen. (My Instanz dieser Fehler durch zu viele Verbindungen in den Weblogic Portal-Verbindungspools verursacht wurde.)

  • Ausführen SQL*Plus und melden Sie sich als SYSTEM. Sie sollten wissen, welches Passwort Sie während der Installation von Oracle DB XE verwendet haben.
  • Führen Sie den Befehl alter system set processes=150 scope=spfile; in SQL * Plus
  • SEHR WICHTIG:. Starten Sie die Datenbank

Von hier:

  

http: // www.atpeaz.com/index.php/2010/fixing-the-ora-12519-tnsno-appropriate-service-handler-found-error/

Ich hatte auch das gleiche Problem, ich für die Antworten vielen Orten gesucht. Ich habe viele ähnliche Antworten die Anzahl der Prozess / Service-Handler zu ändern. Aber ich dachte, was ist, wenn ich vergessen, es zurückzusetzen?

Dann habe ich versucht Thread.sleep() Methode nach jedem meiner connection.close(); verwendet wird.

Ich weiß nicht, wie, aber es ist zumindest für mich arbeiten.

Wenn jemand es versuchen will und herauszufinden, wie es funktioniert, dann bitte gehen Sie weiter. Ich würde es auch gerne wissen, wie ich ein Anfänger in der Programmierung Welt bin.

Ich hatte das ähnliche Problem. Es geschah jedes Mal, wenn ich eine Packung Datenbank (Frühjahr JDBC) Tests mit SpringJUnit4ClassRunner laufen, so beschloss ich, das Problem @DirtiesContext Anmerkung für jeden Test, um zu bereinigen des Anwendungskontext setzen und lassen Sie alle Ressourcen damit jeder Test mit einem neuen initialisiert laufen konnte der Anwendungskontext.

ich dieses Problem in einem Unit-Test hatte, die eine Menge von Verbindungen mit dem DB über einen Verbindungspool geöffnet und dann „gestoppt“ den Verbindungspool (ManagedDataSource tatsächlich) am Ende des jeden Tests die Verbindungen zu lösen. Ich lief immer aus Verbindungen an einem gewissen Punkt in der Reihe von Tests.

eine Thread.sleep (500) in der Teardown () meine Tests hinzugefügt und dies das Problem behoben. Ich denke, dass das, was geschieht, dass die Verbindung Pool stop () gibt die aktiven Verbindungen in einem anderen Thread, so dass, wenn der Haupt-Thread läuft weiter den Cleanup-Thread (s) prüft bekam so weit hinten, dass die Oracle-Server aus Verbindungen liefen. Hinzufügen des Schlaf ermöglicht die Hintergrund-Threads, die zusammengefassten Verbindungen zu lösen.

Das ist viel weniger ein Problem in der realen Welt, da der DB-Server viel größer ist, und es ist eine gesunde Mischung aus Operationen (nicht nur endlos DB connect / disconnect-Operationen).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top