Prüfen ob Oracle-DB hochgefahren ist vor SQL-Befeh

Hallo,

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.

Danke

Mit freundlichen Grüßen
Wilhelm Kaufmann

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!

Gruß

J.

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.

Grüße, Robert

hi!

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.

Grüße, Robert