Oracle Sicherung im Cold-Fail-Over CLuster mit SCAN-Listener

Alle Fragen rund um die Sicherungsklienten.
Antworten
Marcel81
Beiträge: 11
Registriert: 08.07.2014, 08:59

Oracle Sicherung im Cold-Fail-Over CLuster mit SCAN-Listener

Beitrag von Marcel81 » 08.07.2014, 09:41

Hallo zusammen,

ich möchte hier nur darlegen, wie ich ein kleineres Problem mit der OracleExtension im Sep und einen Oracle Cold-Fail-Over Cluster gelöst habe. Vielleicht ist es ja für jemanden hilfreich. Habe dies auch bei Installation an den Sep Support geschickt.

Wir haben ein Oracle Cold-Fail-Over Cluster im Betrieb (11.2.0.4).
Die Clients greifen per SCAN-Listener auf die DB's zu. Dieser ist als Alias im DNS mit 3 IP's hinterlegt. Wichitg: kein RAC!!! Im Falle eines RAC-Clusters laufen auf jeden Node die Instanzen der DB und sollte daher kein Problem sein. Habe ich aber noch nicht getestet.

Nun kann es passieren, dass beim Backup das Script auf den falschen Knoten gestartet wird.

Beispiel:
Instanz ORA1 läuft auf Node1
Backup Script bekommt aber vom DNS als virtuelle IP, die IP zurück geliefert, welche gerade auf Node2 läuft. Nun startet da das Script und kann sich folglich nicht an der DB anmelden:
Error: ORA-01034: ORACLE not available

Für Oracle Anwendungen und Clientzugriffe spielt das keine Rolle, da die Verbindung per OracleNet passiert.

Abhilfe:
- auf SEPServer SQLplus installiert.
- Befehlstermin zum eigentlichen Sichern der DB angelegt
Beispiel:
/opt/oracle/product/11.2.0.4/db/sob/sbc_oracle_rman.sh -b -l full_arch -o delete -T ORA1 -C <SesamServer> -j ORA1 -m Pool-FG-Oracle
- Befehlstermin zum Starten eines Scriptes auf SEPSesam Server
Beispiel:
/root/sob/start_backup_db.sh ORA1
- TNSnames auf SEPSesam Server mit allen Zielen hinterlegt

Script liest aktuellen Host der DB aus und modifiziert das eigentliche BackupScript auf diesen Knoten um und startet das Backup.
Das Backup im Sep wird dann zum Beispiel durch den Befehlstermin:

Inhalt Script:

Code: Alles auswählen

#!/bin/sh
# name: start_backup_db.sh
# author: .......MARCEL
# -----------------------------------------------------------------
# get hostname for specified SID
# -----------------------------------------------------------------
usage ()
{
        echo "./start_backup_db.sh <Instance> | [optional<arch>]"
}
export BASE_DIR=/root/sob
export LD_LIBRARY_PATH=/opt/oracle/instantclient_11_2
export TNS_ADMIN=/opt/oracle
alias sqlplus='/opt/oracle/instantclient_11_2/sqlplus'
if [ -z "$1" ];
then
        echo "Keinen DB angegeben!"
        echo "Script wird beendet!"
        usage
        exit 1
fi
ORACLE_SID=$1
mode=""
if [[ "$2" == "arch" ]];
then
        mode="_arch"
fi
sqlplus dbsnmp/<Password eintragen!!!>@$ORACLE_SID <<+END+
set heading off
set feedback off
spool $BASE_DIR/hostname_$ORACLE_SID.txt
select host_name from v\$instance;
+END+
hostname=`cat $BASE_DIR/hostname_$ORACLE_SID.txt | grep -v SQL | grep -v ^$ | sed 's/^[ \t]*//;s/[ \t]*$//'`
hostname=`echo $hostname | awk -F. '{print $1}'`
sm_cmd modify command $ORACLE_SID$mode -c $hostname -u oracle
sm_cmd start command $ORACLE_SID$mode
Viele Grüße,

Marcel

Antworten