Inhaltsverzeichnis
Restore einer RAC Datenbank (Oracle Managed File OMF im Einsatz ) in einer Single ASM Umgebung mit geänderten Diskgroup Namen
Aufgabe: Produktionsdatenban RAC 10g (GPI) auf eine ASM Single Umgebung 10g (SPAREDB) restoren um im Fehlerfall eine Ersatzumgebung zur Verfügung zuhaben. Die Quelldatenbank ist eine RAC 10g DB mit OMF.
- Backup RAC Umgebung erstellen
- Letze Archive sichern und aktuelles Controlfile sichern
- Trace vom SPFile als Vorlage für die Restore init.ora erstellen
- Trace vom Controlfile als Vorlage für das Neuanlegen des Controlfiles erzeugen
- Spool aus v$datafile für die Namen der Datendateien
- Backup auf ASM Umgebung (SPAREDB) kopieren
- Restore init.ora auf SPAREDB erstellen
- Verzeichnisse auf der ASM Disk anlegen
- Instance mit nomount starten
- Controlfiles zurücksichern
- Instance stoppen
- Mit asmcmd die neuen Controlfile Namen ermitteln
- Restore init.ora auf neue Controlfile Namen anpassen
- Instance im Mount modus starten
- Rman Datenbank mit „set NewName“ zurücksichern
- Instance stoppen und mit nomount starten
- Mit asmcmd die Name der neuen Datendateien ermitteln
- Create Controlfile Script anlegen
- Backups mit Rman erneut katalogisieren und Datenbank recovern
- Marker in RAC DB setzen
- Backup der Archive der RAC Datenbank und kopieren auf SPAREDB
- Archive mit Rman erneut katalogisieren und Datenbank recovern
- Logfiles vom Thread 2 wieder anlegen
- Datenbank mit Reset Logs öffnen
- Temp File anlegen
- Thread 2 disablen, bei Bedarf Logs löschen
- Spfile erzeugen
Backup RAC Umgebung erstellen
RAC Umgebung GPIDB Backup der RAC Umgebung erstellen, Backup auf Disk sichern
Letze Archive sichern und aktuelles Controlfile sichern
RAC Umgebung GPIDB Letzte Archive holen
connect target / SQL "alter system archive log current"; backup archivelog ALL tag "ARCHIVE_DISK" NOT BACKED UP 1 TIMES format '/export/home/oracle/GPI/backup-nfs/archive_%U'; backup current controlfile format '/export/home/oracle/GPI/backup-nfs/controlfile_aktuell.ora'; exit
Trace vom SPFile als Vorlage für die Restore init.ora erstellen
RAC Umgebung GPIDB
sqlplus / AS sysdba CREATE pfile='/export/home/oracle/initGPI.ora' FROM spfile;
Trace vom Controlfile als Vorlage für das Neuanlegen des Controlfiles erzeugen
RAC Umgebung GPIDB Mit dieser Vorlage wird später auf der SPAREDB das Create Controlfile Script erzeugt.
sqlplus / AS sysdba ALTER DATABASE backup controlfile TO trace AS '/export/home/oracle/controlfile_trace_GPI.ora';
Spool aus v$datafile für die Namen der Datendateien
RAC Umgebung GPIDB
SELECT name FROM v$datafile;
Backup auf ASM Umgebung (SPAREDB) kopieren
RAC Umgebung GPIDB
Per scp oder NFS Mount die Daten auf die SPARE Maschine kopieren.
Restore init.ora auf SPAREDB erstellen
ASM Umgebung SPAREDB
Die initGPI.ora anpassen und die neue OMF Location (db_create_file_dest) einstellen!
vi initGPI.ora # wichtigeste anzupassende Parameter *.cluster_database=false *.db_recovery_file_dest='+GPI' *.db_create_file_dest='+GPI'
Verzeichnisse auf der ASM Disk und im Betriebsystem anlegen
ASM Umgebung SPAREDB
Im Betriebssystem die Verzeichnisse für das Log der DB anlegen:
# User oracle mkdir -p /opt/oracle/admin/GPI/bdump mkdir -p /opt/oracle/admin/GPI/adump mkdir -p /opt/oracle/admin/GPI/cdump mkdir -p /opt/oracle/admin/GPI/udump
In der ASM Umgebung auf der ASM Platte die Verzeichnisse anlegen:
# ASM Umgebung asmcmd cd +GPI mkir GPI cd GPI mkdir controlfile mkdir datafile mkdir onlinelog
Instance mit nomount starten
ASM Umgebung SPAREDB
# Umgebung GPI DB im 10g Home setzen sqlplus / as sysdba startup nomount pfile='/export/home/oracle/initGPI.ora'; exit
Controlfiles zurücksichern
ASM Umgebung SPAREDB
# GPI DB Umgebung rman connect target / restore controlfile to '+GPI/gpi/controlfile/current.277.801931859' from '/ora_backup/control_aktuell.ora'; restore controlfile to '+GPI/gpi/controlfile/current.390.801931869' from '/ora_backup/control_aktuell.ora';
Instance stoppen
ASM Umgebung SPAREDB
# Umgebung GPI DB im 10g Home setzen sqlplus / as sysdba shutdown immediate exit
Mit asmcmd die neuen Controlfile Namen ermitteln
ASM Umgebung SPAREDB
# ASM Umgbung setzen asmcmd ls +GPI/gpi/controlfile current.277.802113799 current.390.802113791
Restore init.ora auf neue Controlfile Namen anpassen
ASM Umgebung SPAREDB
vi initGPI.ora
Instance im Mount modus starten
ASM Umgebung SPAREDB
# GPI 10g Umgebung sqlplus / as sysdba startup mount pfile='/export/home/oracle/initGPI.ora'; select name from v$controlfile; +GPI/gpi/controlfile/current.277.801931859 +GPI/gpi/controlfile/current.390.801931869 exit
Rman Datenbank mit "set NewName" zurücksichern
ASM Umgebung SPAREDB
rman connect target / catalog start with '/ora_backup/'; # alte Backup einträge bereinigen run { crosscheck backup; crosscheck archivelog all; delete noprompt EXPIRED archivelog all; delete noprompt EXPIRED backup; } # restore mit set newname run { SET newname FOR datafile 1 to '+GPI'; SET newname FOR datafile 2 to '+GPI'; SET newname FOR datafile 3 to '+GPI'; SET newname FOR datafile 4 to '+GPI'; SET newname FOR datafile 5 to '+GPI'; SET newname FOR datafile 6 to '+GPI'; SET newname FOR datafile 7 to '+GPI'; SET newname FOR datafile 8 to '+GPI'; SET newname FOR datafile 9 to '+GPI'; SET newname FOR datafile 10 to '+GPI'; SET newname FOR datafile 11 to '+GPI/gpi/datafile/test_tbs_manuel.dbs'; restore database; }
Instance stoppen und mit nomount starten
ASM Umgebung SPAREDB
sqlplus / AS sysdba startup nomount pfile='/export/home/oracle/initGPIIP.ora'; exit
Mit asmcmd die name der neuen Datendateien ermitteln
ASM Umgebung SPAREDB
# Umgebung auf ASM Home asmca ASMCMD> ls -l +GPIHM/GPIIP/datafile DATAFILE UNPROT COARSE DEC 15 17:00:00 Y SYSAUX.289.802114031 DATAFILE UNPROT COARSE DEC 15 17:00:00 Y SYSTEM.257.802114031 DATAFILE UNPROT COARSE DEC 15 17:00:00 Y TSY.260.802114365 DATAFILE UNPROT COARSE DEC 15 17:00:00 Y UNDOTBS1.324.802114223 DATAFILE UNPROT COARSE DEC 15 17:00:00 Y UNDOTBS2.393.802114269 DATAFILE UNPROT COARSE DEC 15 17:00:00 Y USERS.286.802114281
Namen merken.
Create Controlfile Script anlegen
ASM Umgebung SPAREDB
Mit den Namen aus der obigen Liste und der Vorlage aus dem Controlfile Trace der Datenbank
Ein creCreate Script für das Controlfile erstellen:
CREATE CONTROLFILE REUSE DATABASE "GPIIP" RESETLOGS ARCHIVELOG MAXLOGFILES 192 MAXLOGMEMBERS 3 MAXDATAFILES 1024 MAXINSTANCES 32 MAXLOGHISTORY 1168 LOGFILE GROUP 1 ( '+GPI/gpi/onlinelog/group_1.262.671385803', '+GPI/gpi/onlinelog/group_1.263.671385805', '+GPI/gpi/onlinelog/group_1.neu.ora' ) SIZE 251200K, GROUP 2 ( '+GPI/gpi/onlinelog/group_2.264.671385807', '+GPI/gpi/onlinelog/group_2.265.671385809' ) SIZE 251200K DATAFILE '+GPI/gpi/datafile/SYSTEM.257.802114031', '+GPI/gpi/datafile/UNDOTBS1.324.802114223', '+GPI/gpi/datafile/SYSAUX.289.802114031', '+GPI/gpi/datafile/USERS.286.802114281', '+GPI/gpi/datafile/UNDOTBS2.393.802114269', '+GPI/gpi/datafile/PDB.285.802114345', '+GPI/gpi/datafile/OLA.296.802114345', '+GPI/gpi/datafile/rip_test.03' CHARACTER SET UTF8 ;
Controlfile über das obige Script anlegen:
sqlplus / AS sysdba @makeGPICtrl.sql
Backups mit Rman erneut katalogisieren und Datenbank recovern
ASM Umgebung SPAREDB
rman connect target / catalog start with '/ora_backup/'; recover database; # bis zum letzen Archive
Marker in RAC DB setzen und Letze Archive erzeugen
RAC Umgebung GPIDB
In der Quell Datenbank in Object anlegen um später im Ziel zu prüfen ob auch alle Daten bis zu diesem Zeitpunkt auch da sind.
# DB Umgebung sqlplus / as sysdba create synonym system.LAST_ARCHIV_BEFORE_SHUTDOWN from dual; alter system archive log current; # auf zweiten Knoten anmelden # besser eins zu viel als einz zu wenig .-) connect sys@gpi2 as sysdba alter system archive log current;
Backup der Archive der RAC Datenbank und kopieren auf SPAREDB
RAC Umgebung GPIDB
rman connect target / SQL "alter system archive log current"; backup archivelog ALL tag "ARCHIVE_DISK" NOT BACKED UP 1 TIMES format '/export/home/oracle/GPI/backup-nfs/new_archive_%U'; exit # die neuen Backups auf die Spare Maschine kopieren scp new* oracle@gpi:ora_backup/
Archive mit Rman erneut katalogisieren und Datenbank recovern
ASM Umgebung SPAREDB
rman connect target / catalog start with '/ora_backup/' recover database
Logfiles vom Thread 2 wieder anlegen
ASM Umgebung SPAREDB
sqlplus / AS sysdba ALTER DATABASE ADD LOGFILE THREAD 2 GROUP 3 SIZE 251200K , GROUP 4 SIZE 251200K ;
Datenbank mit Reset Logs öffnen
ASM Umgebung SPAREDB
sqlplus / AS sysdba ALTER DATABASE OPEN RESETLOGS;
Temp File anlegen
ASM Umgebung SPAREDB
ALTER TABLESPACE TEMP ADD TEMPFILE SIZE 3070M AUTOEXTEND ON NEXT 655360 MAXSIZE 32767M;
Thread 2 disablen, bei Bedarf logs löschen
ASM Umgebung SPAREDB
ALTER DATABASE DISABLE THREAD 2; SELECT GROUP# FROM v$log WHERE thread#=2; GROUP# ---------- 3 4 ALTER SYSTEM CHECKPOINT; ALTER SYSTEM ARCHIVE LOG ALL; ALTER DATABASE DROP LOGFILE GROUP 3; ALTER DATABASE DROP LOGFILE GROUP 4;
Spfile erzeugen
ASM Umgebung SPAREDB
CREATE spfile FROM pfile='/export/home/oracle/initGPI.ora'; startup force