====== 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