ich will von einem Oracle-Client (Windows-Rechner)über sql auf zwei Oracle-Server (UNIX-Rechner) zugreifen.
Nur wenn der erste Rechner nicht verfügbar ist (z.B.: wegen Datensicherung usw. Kriterium wäre das die Oracle-Prozesse nicht verfügbar sind) soll auf den zweiten Oracle-Server zugegriffen werden.
Mit welchem Oracle-Client-Tool kann dieses Problem angepackt werden. Der erste Versuch war mit plus33.exe die Meldung zu protokollieren, die Protokollierungsdatei auf Strings wie „Fehler“ zu suchen und davon den weiteren Ablauf zu starten. Leider ist das so, dass dieser Zugriff immer wieder die Anmeldung versucht und die Batch-Datei nicht abarbeitetet
werden kann.
Hi,
eine Möglichkeit wäre, mit sqlplus irgend etwas abzufragen, das nur existiert, wenn die Datenbank hochgefahren ist.
Du könntest z.B. die Spalte Name der View v$database abfragen (braucht dba-Privileg).
Ein möglicher Skript sähe so aus:
rem Test.sql
whenever sqlerror exit 1;
connect system/manager@meinserver
select name from v$database;
exit 0;
Der Skript tut nichts anderes als eine 0 im Normalfall zurückzugeben. Beim Fehler allerdings gibt es eine 1.
Das kannst Du mit einer Batchdatei abprüfen:
rem test.cmd
@echo off
plus80 /nolog @c:\temp\test.sql \> nul
if errorlevel 1 goto fehler
echo Jetzt wird ein Backup gestartet!
echo backup...
rem hier steht irgend ein Aufruf, um ein Backup zu starten
echo Backup ist fertig!
goto ende
> fehler
echo Bakup wird nicht gestartet, da Server tot.
> ende
Achtung, ich interpretiere hier jeden Fehler so, als wäre der Server tot. Das muß verfeinert werden!
Eine andere Möglichkeit wäre es, es einfach darauf ankommen zu lassen, also einmal einen Befehl auszuführen, wenn der Server gerade beim hochfahren ist gibts einen Fehler (weiss den ORA-Code leider nicht auswendig) und wenn er gar nicht da ist, gibts natürlich auch einen Fehler.
Dann kannst du einfach die Verbindung auswechseln und das nochmal probieren.
Damit könntest du es in deinem Code ohne irgendwelche externen Skripte lösen.
Eine andere Möglichkeit wäre es, es einfach darauf ankommen zu
lassen, also einmal einen Befehl auszuführen, wenn der Server
gerade beim hochfahren ist gibts einen Fehler (weiss den
ORA-Code leider nicht auswendig) und wenn er gar nicht da ist,
gibts natürlich auch einen Fehler.
wollt ich auch grad vorschlagen: einfach irgendwas probieren, wenn’s einen fehler gibt -> db tot … ich mach solche prüfungen meistens jedoch nur auf db-links mit einem select count(*) auf irgendeine kleine tabelle (count(*) weil’s meist eine parametertabelle mit einer zeile ist) …
aber auch die jose harvey’schen scripts sind - vor allem bei batch-läufen - empfehlenswert …
grüße,
tomh
Dann kannst du einfach die Verbindung auswechseln und das
nochmal probieren.
Damit könntest du es in deinem Code ohne irgendwelche externen
Skripte lösen.