Inhaltsverzeichnis

Oracle 12c / 11g RAC - Backup und Recovery Überlegungen

Das Cluster an sich ist recht robust gegenüber dem Verlust von den wichtigsten Cluster Platten.

Allerdings sollte die Umgebung zu vor so aufgebaut werden, das möglichst wenig passiert, wenn eine der Platten mit wichtigen Cluster Dateien verloren geht.

Auf einer ganz anderen Seite steht der Verlust der gesamten Installation / Konfiguration eines Clusters Knoten, z.b. durch einen defekt der internen Platten. Hier führt das schnell zu einer Neuinstallation eines Clusters!

demnächst mehr

Zu Oracle ASM und Disk Handling siehe auch Oracle ASM 12c - Oracle Disk Groups über zwei Storages verteilen - Ein Oracle Cluster für zwei Brandabschnitte verteilen


Härtung der Gesamtumgebung

Wichtige Grundregeln:


Sicherung der Gesamtumgebung

Die wichtigsten Dateien für das Cluster für die eine tägliche Sicherung sind:

Zusätzlich sind folgende Dateien für den Neuaufbau eines ganzen Cluster Knotens hilfreich:

OCR Files

Werden automatisch alle 4 h auf einem der Cluster Knoten unter „$GRID_HOME/cdata/<cluster_name>/*.ocr“ abgelegt

Vorhandene Backups anzeigen:

$GRID_HOME/bin/ocrconfig -showbackuploc
The Oracle Cluster Registry backup location is [/opt/12.1.0.2/grid/cdata/]
 
$GRID_HOME/bin/ocrconfig -showbackup
 
..
$GRID_HOME/bin/ocrconfig -showbackup
 
...
racdb01     2016/09/14 19:38:22     /opt/12.1.0.2/grid/cdata/racdbcluster/backup00.ocr     2960019305
racdb02     2016/09/06 06:22:00     /opt/12.1.0.2/grid/cdata/racdbcluster/backup01.ocr     2960019305
...

Backup manuell anlegen:

$GRID_HOME/bin/ocrconfig -manualbackup

Das kann zum Beispiel in die regelmäßige Backup Strategie mit aufgenommen werden.

ASM PWD File
#get the ASM PWD NAME
ASM_PWD_NAME=`${ORACLE_HOME}/bin/asmcmd pwget --asm`
echo "-- Info : save PWD file from ASM => ${ASM_PWD_NAME}"
${ORACLE_HOME}/bin/asmcmd pwcopy --asm ${ASM_PWD_NAME} ${BACKUP_DEST}/${ORACLE_DBNAME}/orapw${ORACLE_DBNAME}_${DAY_OF_WEEK}
ASM Spfile

Zum Beispiel mit einem Trace:

..
# Run Script TO generate Copy OF pfile
#
${ORACLE_HOME}/bin/sqlplus / AS sysasm << EOScipt
CREATE pfile='${BACKUP_DEST}/${ORACLE_DBNAME}/init_${ORACLE_DBNAME}_${DAY_OF_WEEK}.ora' FROM spfile;
exit;
EOScipt
..
ASM Diskgroup Metadata
#Save Disk and Directroy Configuration
#
rm  ${BACKUP_DEST}/${ORACLE_DBNAME}/asm_configuration${ORACLE_SID}_${DAY_OF_WEEK}.trc
 
${ORACLE_HOME}/bin/asmcmd md_backup -b ${BACKUP_DEST}/${ORACLE_DBNAME}/asm_configuration${ORACLE_SID}_${DAY_OF_WEEK}.trc
ASM San Konfiguration
# save the lun configuration of the node1
#
echo "----=== Layout of ASM to physikal disks ===---"  >  ${BACKUP_DEST}/${ORACLE_DBNAME}/asmdisks_lun_config_${ORACLE_DBNAME}_${DAY_OF_WEEK}.log
echo " "  >>  ${BACKUP_DEST}/${ORACLE_DBNAME}/asmdisks_lun_config_${ORACLE_DBNAME}_${DAY_OF_WEEK}.log 
 
ls -la /dev/oracleasm/disks/* >>  ${BACKUP_DEST}/${ORACLE_DBNAME}/asmdisks_lun_config_${ORACLE_DBNAME}_${DAY_OF_WEEK}.log
 
echo "---=== ASM to OS Disk Layout ===---" >>  ${BACKUP_DEST}/${ORACLE_DBNAME}/asmdisks_lun_config_${ORACLE_DBNAME}_${DAY_OF_WEEK}.log
 
# Get the Oracle ASM to os disk mapping
for DISK in `ls -m1 /dev/oracleasm/disks/`
do
 majorminor=`sudo /usr/sbin/oracleasm querydisk -d $DISK | awk '{print $10 $11}' | tr -d '[]' | tr ',' ' ' `
 major=`echo $majorminor | awk '{print $1}'`
 minor=`echo $majorminor | awk '{print $2}'`
 device=`ls -l /dev | awk '{print $5 " "  $6 "- "  $10}' |  grep "$major, $minor-" | awk '{print $3}'`
 echo "Oracle ASM Disk Device: $DISK	=>  OS device: /dev/$device     with id $majorminor"  >>  ${BACKUP_DEST}/${ORACLE_DBNAME}/asmdisks_lun_config_${ORACLE_DBNAME}_${DAY_OF_WEEK}.log 
done
Script Library für den Backup des Clusters

Im ganzen finden Sie die obigen Skript Stücke in der Datei ⇒ backupASM.sh und backupGRID.sh.


Szenario - Verlust aller VOT Files

Gehen alle VOT Files verloren, zum Beispiel weil alle VOT Files auf Platten nur in einem Storage liegen, müssen diese nur neu aufgebaut werden, ein Einspielen eines Backups ist nicht notwendig.

Ablauf:

TestCase

Was passiert nun?

Auszug aus dem CRS Log:

2016-09-14 21:02:49.154 [OCSSD(3302)]CRS-1606: The number of voting files available, 0, is less than the minimum number of voting files required, 2, resulting in CSSD termination to ensure data integrity; details at (:CSSNM00018:) in /opt/oracle/diag/crs/racdb01/crs/trace/ocssd.trc

Cluster reparieren als user root:

 
export GRID_HOME=/opt/12.1.0.2/grid
 
# Auf beiden Knoten den Cluster Stack sauber stoppen
 
# Knoten 2 stoppen => 
$GRID_HOME/bin/crsctl stop crs -f
 
# Nacheinander stoppen! Beim gleichzeitigen stoppen blockiert sich das nur gegenseitig und dauert länger!
 
# Knoten 1 stoppen => 
$GRID_HOME/bin/crsctl stop crs -f
# 
 
# Das Stoppen des Clusters kann recht lange dauern .....
# > 10min!
# prüfen ob auch alles gestoppt ist:
ps uafx | grep grid
 
# Nur Knoten 1 exclusive und ohne geöffnete VOT Files öffnen:
#
$GRID_HOME/bin/crsctl start crs -excl
 
# Vot Files prüfen:
$GRID_HOME/bin/crsctl query css votedisk
 
Located 0 voting disk(s).
 
 
# Nun eine neue Diskgroup erstellen oder eine zuvor erzeugte Ersatzgruppe verwenden
 
# In unseren Fall nun unsere Storage wieder aktivieren!
 
# Nach der Reparatur diese wieder neu Initialisieren
$GRID_HOME/bin/crsctl replace votedisk +VOT
 
Successful addition of voting disk 9f63300a40f44fd2bfe26ff318c4191b.
Successful addition of voting disk 7305b25c1dbc4fadbfff9946032f512d.
Successful addition of voting disk dec881078ce14f34bfcb1f595f27d54d.
Successfully replaced voting disk group with +VOT.
 
# Vot Files prüfen:
$GRID_HOME/bin/crsctl query css votedisk
 
# ---------------
 
# Cluster auf Knoten 1 wieder stoppen
$GRID_HOME/bin/crsctl stop crs
 
# Etwas warten, damit sich auch wirklich alles beendet hat
ps uafx | grep grid
 
 
# Cluster wieder starten
$GRID_HOME/bin/crsctl start crs
 
# Etwas Geduld haben 
 
# Prüfen ob auch alles wieder oben ist, 
$GRID_HOME/bin/crsctl stat res -t -init
 
$GRID_HOME/bin/crsctl check cluster
 
# Bei Bedarf zur Not dann manuell neu starten
$GRID_HOME/bin/crsctl start res ora.crsd -init
 
# Zweiten knoten nun auch wieder starten
$GRID_HOME/bin/crsctl start crs
 
$GRID_HOME/bin/crs_stat -t -v
 
# Nun alle Platten sorgfältig prüfen und bei Bedarf alles wieder online setzen

Aus diesem Test Folgt: Die eigentlichen VOT Files werden nicht gesichert, sondern können bei Bedarf neu erstellt werden


Szenario - Verlust aller OCR Files

Eigentlich sollte es nicht vorkommen das alle OCR Files „verloren“ gehen, es lassen sich bis zu 5 unterschiedliche ASM Gruppen dafür definieren.

Sollte es aber doch vorkommen, muss ein Backup der Datei existieren, zum Glück wird die OCR Datei automatisch von Cluster Stack nach alle 4 h auf einen der beteiligten Knoten unter „$GRID_HOME/cdata/<cluster_name>/*.ocr“ historisiert gesichert.

Hier die neuste Datei auf allen Knoten suchen und verwenden.

Der Restore wird mit „$GRID_HOME/bin/ocrconfig -restore backup00.ocr“ nach der Reperatur der orginal Location durchgeführt.

Ablauf:

Test Case

Vorhandene Backups anzeigen:

$GRID_HOME/bin/ocrconfig -showbackuploc
The Oracle Cluster Registry backup location is [/opt/12.1.0.2/grid/cdata/]
 
$GRID_HOME/bin/ocrconfig -showbackup
 
..
$GRID_HOME/bin/ocrconfig -showbackup
 
...
racdb01     2016/09/14 19:38:22     /opt/12.1.0.2/grid/cdata/racdbcluster/backup00.ocr     2960019305
racdb02     2016/09/06 06:22:00     /opt/12.1.0.2/grid/cdata/racdbcluster/backup01.ocr     2960019305
...

Backup manuell anlegen:

$GRID_HOME/bin/ocrconfig -manualbackup

Das kann zum Beispiel in die regelmäßige Backup Strategie mit aufgenommen werden.



Label einer Platte geht verloren

Nach einer Störung im Storage verschwindet plötzlich eine Platte und ist nicht mehr in Oracle ASM sichbar.

Suchen:

#als root
oracleasm scandisks
oracleasm listdisks

Disk ist nicht mehr in der Liste enthalten

Über Device ID etc, prüfen das die Platte auch richtig da ist.

Prüfen:

oracleasm querydisk /dev/sdc1
Device "/dev/sdc1" defines a device with no label

Kopf mit od uslesen:

-- Kopf auslesen
od -c -N 120  /dev/sdc1
0000000 001 202 001 002  \0  \0  \0  \0 001  \0  \0 200   ] 304 345 251
0000020   W 362  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0
0000040   O   R   C   L   D   I   S   K  \0  \0  \0  \0  \0  \0  \0  \0
0000060  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0
0000100  \0  \0 020  \f 001  \0 002 003   A   C   F   S   _   0   0   0
0000120   1  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0
0000140  \0  \0  \0  \0  \0  \0  \0  \0   A   C   F   S  \0  \0  \0  \0
0000160  \0  \0  \0  \0  \0  \0  \0  \0
0000170

Mit kfed den Plattenkopf auslesen lassen:

 $GRID_HOME/bin/kfed read /dev/sdc1 | grep name
 
kfdhdb.dskname:               ACFS_0001 ; 0x028: length=9
kfdhdb.grpname:                    ACFS ; 0x048: length=4
kfdhdb.fgname:                 STORAGE2 ; 0x068: length=8
kfdhdb.capname:                         ; 0x088: length=0

⇒ das ist die Platte die wir vermissen

Pürfen ob die Platte eine logischen Fehler hat:

 $GRID_HOME/bin/kfed read /dev/sdc1 
 
# Ausgabe auf Fehler wie 
# Pürfen
KFED-00322: Invalid content encountered during block traversal:
KFED-00322: file not found; arguments:
..
 
 
# Reperatur falls notwendig
 $GRID_HOME/bin/kfed repair /dev/sdc1

Auch nach der Reperatur düfte das Label nicht wieder lesbar sein:

oracleasm querydisk /dev/sdc1
Device "/dev/sdc1" defines a device with no label
Gefährlich für die Datenintegrität, genau prüfen das alles auch passt !

Neu setzen

oracleasm renamedisk -f /dev/sdc1 ACFS01_02
 
Writing disk header: done
Instantiating disk "ACFS01_02": done
 
 
oracleasm querydisk /dev/sdc1
Device "/dev/sdc1" is marked an ASM disk with the label "ACFS01_02"
 
 
od -c -N 120  /dev/sdc1
 
..
0000040   O   R   C   L   D   I   S   K   A   C   F   S   0   1   _   0
..
 
 
oracleasm listdisks
 
#auf zweiten Knoten erkennen lassen
oracleasm scandisks

Platte wieder einbinden:

ALTER diskgroup ACFS online disks IN failgroup STORAGE2;

prüfen ob der Diskgroup name jetzt auch wirklich noch vorhanden ist:

od -c -N 120  /dev/sdc1
 
..
0000040   O   R   C   L   D   I   S   K   A   C   F   S   0   1   _   0
..

Problem DISK_REPAIR_TIME Attribute Expired

als sys as syasm

SYS@+ASM2-tng1db02>ALTER diskgroup RECO01 online disks IN failgroup STORAGE2;
ALTER diskgroup RECO01 online disks IN failgroup STORAGE2
*
ERROR at line 1:
ORA-15032: NOT ALL alterations performed
ORA-15281: NOT ALL specified disks were brought ONLINE
ORA-15284: ASM TERMINATED ALTER DISKGROUP ONLINE

Im Alert file der ASM Instance:

SQL> alter diskgroup RECO01 online disks in failgroup STORAGE2
NOTE: cache closing disk 9 of grp 3: (not open) _DROPPED_0009_RECO01
NOTE: cache closing disk 16 of grp 3: (not open) _DROPPED_0016_RECO01
NOTE: cache closing disk 17 of grp 3: (not open) _DROPPED_0017_RECO01
NOTE: cache closing disk 18 of grp 3: (not open) _DROPPED_0018_RECO01
NOTE: cache closing disk 19 of grp 3: (not open) _DROPPED_0019_RECO01
NOTE: cache closing disk 20 of grp 3: (not open) _DROPPED_0020_RECO01
NOTE: cache closing disk 21 of grp 3: (not open) _DROPPED_0021_RECO01
NOTE: GroupBlock outside rolling migration privileged region
NOTE: initiating resync of disk group 3 disks
_DROPPED_0009_RECO01 (9)
_DROPPED_0016_RECO01 (16)
_DROPPED_0017_RECO01 (17)
_DROPPED_0018_RECO01 (18)
_DROPPED_0019_RECO01 (19)
_DROPPED_0020_RECO01 (20)
_DROPPED_0021_RECO01 (21)
WARNING: Disk 9 in group 3: state 0x6 mode 0x1 cannot be onlined
WARNING: Disk 16 in group 3: state 0x6 mode 0x1 cannot be onlined
WARNING: Disk 17 in group 3: state 0x6 mode 0x1 cannot be onlined
WARNING: Disk 18 in group 3: state 0x6 mode 0x1 cannot be onlined
WARNING: Disk 19 in group 3: state 0x6 mode 0x1 cannot be onlined
WARNING: Disk 20 in group 3: state 0x6 mode 0x1 cannot be onlined
WARNING: Disk 21 in group 3: state 0x6 mode 0x1 cannot be onlined
NOTE: failed resync of disk group 3 disks
NOTE: all disks already online or none could be onlined in disk group 3 disks
ORA-15032: not all alterations performed
ORA-15281: not all specified disks were brought ONLINE
ORA-15284: ASM terminated ALTER DISKGROUP ONLINE
ERROR: alter diskgroup RECO01 online disks in failgroup STORAGE2

Lösung:

Platten neu mit dem Force Flag hinzufügen:

ALTER diskgroup REDO01 ADD failgroup STORAGE2 disk '/dev/oracleasm/disks/REDO0_S2' name REDO0S2 force;

siehe auch:


ASM SPFile geht verloren

Geht das SPFIle verloren, startet zwar die ASM Instance aber es fehlen wichtige Informationen und es werden keine Platten mehr gemounted. Damit sind auch alle OCR Disks nicht verfügbar, das Cluster startet nicht.

Es ist sehr hilfreich nun ein Backup des SPfile zur Hand zu haben, fehlt auch dies hilft ein Blick in den ASM Alert.log in der Hoffnung das dort noch die Informationen vom letzten Start Vorgang zu finden sind.

Using parameter settings in server-side spfile +VOT/racdbcluster/ASMPARAMETERFILE/registry.253.875025183
System parameters with non-default values:
  large_pool_size          = 12M
  remote_login_passwordfile= "EXCLUSIVE"
  asm_diskstring           = "/dev/oracleasm/disks/*"
  asm_diskstring           = "/opt/oracle/VOTNFSDISK/vote_nfs_disk01"
  asm_diskgroups           = "DATA"
  asm_diskgroups           = "FRA"
  asm_diskgroups           = "REDOA"
  asm_diskgroups           = "REDOB"
  asm_diskgroups           = "ACFS"
  asm_diskgroups           = "VOT"
  asm_diskgroups           = "VOTSPARE"
  asm_diskgroups           = "VOTSPARE_S2"
  asm_power_limit          = 1

Quellen

Netz:

Support Portal

DOAG:

siehe auch Quellen unter ⇒ Oracle ASM 12c - Oracle Disk Groups über zwei Storages verteilen - Ein Oracle Cluster für zwei Brandabschnitte verteilen