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!
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
Wichtige Grundregeln:
# Hinzufügen $GRID_HOME/bin/ocrconfig -add +REDOA $GRID_HOME/bin/ocrconfig -add +REDOB # Testen $GRID_HOME/bin/ocrcheck
$GRID_HOME/bin/crsctl query css votedisk
asmcmd pwget --asm
asmcmd spget sql>SHOW parameter spfile
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:
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.
#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}
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 ..
#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
# 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
Im ganzen finden Sie die obigen Skript Stücke in der Datei ⇒ backupASM.sh und backupGRID.sh.
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:
CREATE diskgroup VOTSPARE_S2 failgroup storage21 disk '/dev/oracleasm/disks/VOT4_02' name S2VOT4 SIZE 6143M failgroup storage22 disk '/dev/oracleasm/disks/VOT2_02' name S2VOT2 SIZE 6143M failgroup storage23 disk '/dev/oracleasm/disks/VOT3_02' name S2VOT3 SIZE 6143M; # Attribute setzen ALTER DISKGROUP VOTSPARE_S2 SET ATTRIBUTE 'compatible.asm'='11.2.0.0.0'; ALTER DISKGROUP VOTSPARE_S2 SET ATTRIBUTE 'compatible.rdbms'='11.2.0.0.0'; #Auch auf zweiten Knoten mounten SYS@+ASM2-racdb02>ALTER diskgroup VOTSPARE mount; # VOT auf diesen Bereich umgezogen # export GRID_HOME=/opt/12.1.0.2/grid # Vot Files prüfen: $GRID_HOME/bin/crsctl query css votedisk # VOT Files umziehen $GRID_HOME/bin/crsctl REPLACE votedisk +VOTSPARE_S2 $GRID_HOME/bin/crsctl query css votedisk
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
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:
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.
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
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 ..
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:
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
$GRID_HOME/bin/crsctl stop crs -f
$GRID_HOME/bin/crsctl start crs -excl
ALTER system SET asm_diskstring='/dev/oracleasm/disks/*','/opt/oracle/VOTNFSDISK/vote_nfs_disk01' scope=memory sid='*'; ALTER system SET asm_diskgroups='DATA','FRA','REDOA','REDOB','ACFS','VOT','VOTSPARE','VOTSPARE_S2' scope=memory sid='*';
create spfile='+VOT' from memory;
$GRID_HOME/bin/crsctl stop crs
$GRID_HOME/bin/crsctl start crs
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