JDBC Oracle Thin-Client-Failover auf Zweite DB
Ich habe gelesen, dass kann ich einrichten einer JDBC-thin-client-Verbindungszeichenfolge so, dass mein Java-Programm wird versuchen, eine Verbindung zur ersten Datenbank erst dann, wenn es ein problem gibt, es wird versucht, eine Verbindung zu der zweiten Datenbank.
Aber dies geschieht nicht in der Praxis.
Wenn ich verwenden Sie die folgende Zeichenfolge:
jdbc:oracle:thin:@(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS =
(PROTOCOL = TCP)
(HOST = site1)
(PORT = 1521)
)
(ADDRESS =
(PROTOCOL = TCP)
(HOST = site2)
(PORT = 1521)
)
)
(FAILOVER=ON)
(FAILOVER_MODE=
(TYPE=SELECT)
(METHOD=BASIC)
(RETRIES=20)
(DELAY=3)
)
(LOAD_BALANCE = OFF)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = MYDB)
)
)
Jetzt weiß ich, dass site1
down ist und site2
ist. Wenn ich angeben site2
ersten in meiner Liste, dann bekomme ich eine Verbindung (so wie ich es erwarten würde, wenn ich nur versucht, die Verbindung zu site2
). Aber wenn ich site1
ersten bekomme ich die gleiche Fehlermeldung wie wenn ich versuchte, eine direkte Verbindung zu site1
- das ist:
java.util.concurrent.ExecutionException:
java.lang.RuntimeException:
java.sql.SQLException:
ORA-01033: ORACLE initialization or shutdown in progress
Macht die Oracle-thin-client erfordern, die erste Datenbank zu arbeiten, die auf eine Verbindung und nur failover, wenn etwas schief geht während der Verbindung? Was ich will, ist für die Anwendung, um zu versuchen, den nächsten server, wenn die Verbindung zum ersten server ausfällt (was ich tun konnte, mit try { ... } catch { ... }
Anwendung der Logik vorziehen würde, aber die Fahrer kümmern sich um die details für mich).
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihre mit der gleichen service_name als dein SID.
Auch wenn Sie den Dienst beenden, MYDB, es immer zu finden, weil es von der SID.
primären Datenbank in den mount-Modus, das erklärt die Fehlermeldung, die Sie erhalten.
Erstellen Sie eine neue service_name (außer Ihr SID) und auf "verbinden", dass servicename
Zum Beispiel: service_name = MYDB_CLIENT
Versuchen, diese, nach einigen Stunden der Fehlersuche stieß auf eine Probe, die ich geändert und es funktioniert wie ein Edelstein.
Check-out die Das Connection-Management-Strategien für die empfohlene Verbindungs-URL. Ein Beispiel finden Sie unten.