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