2016-07-29 10 views
0

In einer Anwendung haben wir JDBC verwendet, um eine Verbindung zur Oracle-Datenbank herzustellen. Wir haben beigefügt. Das Problem besteht darin, durch einen Callback/Listener zu identifizieren, dass die Datenbank heruntergefahren wurde.Wie erkennen Oracle-Datenbank-Shutdown in JDBC?

Derzeit haben wir den folgenden Zuhörer angehängt:

Connection eventListener = new ConnectionEventListener() { 
    @Override 
    public void connectionErrorOccurred(ConnectionEvent event){ 
     // log - connection error 
    } 

    @Override 
    public void connectionClosed(ConnectionEvent event) { 
     // log - connection closed 
    } 
} 

Keines dieser Ereignisse ausgelöst werden, wenn die Datenbank heruntergefahren wird.

Die Idee ist, die Datenbank Shutdown zu erkennen und dann die Datenbank starten und haben einen Mechanismus, um die Nutzer zu informieren und die Datenbank entweder Umfrage für (konfigurierbar) oder den Dienst (die Anwendung) aussetzen.

+0

was meinst du?! Wenn die Verbindung fehlgeschlagen ist, dann ist vielleicht db abgeschaltet oder so. –

+0

Es gibt auch eine Möglichkeit, die Sitzung zu beenden, während die Datenbank nicht heruntergefahren wird, wie folgt: alter system kill session ', ' –

Antwort

0

Sie können das Problem nicht richtig angeben. Sie konnten nur eine Verbindung erhalten oder keine Verbindung herstellen, der Grund (keine Verbindung möglich, db shutdown usw.) konnte nicht angegeben werden, Sie erhalten die gleichen Ausnahmen mit all diesen Fällen.

+0

Ich stimme Ihnen zu. Gibt es einen anderen Weg, mit dem wir überprüfen können, ob die Datenbank heruntergefahren ist und nicht, dass etwas mit meiner Verbindung nicht stimmt. Ich verstehe (nach meinem Wissen), dass alles, was ich die Kontrolle habe, auf der Verbindung ist, die ich mit der Datenbank habe. –

+0

@harshchiki, wie ich weiß, gibt es keine Möglichkeit zu definieren, was falsch war. Ich habe versucht, sogar sql plus und zwischengespeicherte Code-Ausnahmen, aber ich habe Gott für mehrere verschiedene Probleme die gleichen Code-Ausnahmen. – quento

1

Ich fürchte, Ihre Anfrage ist nicht vollständig definiert. Im Falle eines RAC-Clusters können Sie beispielsweise die Anwendung so konfigurieren, dass sie auf ONS-Nachrichten reagiert, und Ihre Anwendung kann alle Verbindungen zu einem anderen Datenbankknoten sicher migrieren. Selbst wenn ein Datenbankknoten ausgefallen ist, kann Ihre Anwendung trotzdem reibungslos funktionieren.

Für einen kurzen Überblick über JBOSS-Quellcode gibt es eine Klasse namens Exception Sorter, die verschiedene nützliche Oracle-Fehlercodes auflistet. Für example, aber ich denke, die aktuelle JBOSS'es Code-Basis hat noch längere Liste.

Here ist eine Liste der Fehlercodes, die ich gesammelt habe. Alle Fehlercodes drücken eine Situation aus, in der eine Verbindung zur Datenbank nicht möglich ist (aus irgendeinem Grund).

PS: die DCD (Dead Connection Detection) ist ein anderes Thema.

0

Sie benötigen wahrscheinlich eine Transaktion. Wenn die Abfrage fehlschlägt, erhalten Sie einen Fehler, mit dem Sie die Verbindung überprüfen können.