Inhaltsverzeichnis
Rac 9i auf OCFS auf RAC 10g unter ASM migrieren
Aufgabe:
Migration eines 6 Knoten RAC 9.2.0.8 / OCFS Cluster (Quelle) unter win2003 32bit ⇒ auf ⇒ 3 Knoten RAC 10gR2 10.2.0.3 / ASM (Ziel) unter win2003 64bit
Quell DB wird mit RMAN gesichert und aus diesem Backup wieder auf dem Ziel 10gR2 Cluster hergestellt und migriert.
Dabei wird zusätzlich das Dateisystem für die Datendateien von OCFS auf ASM gewechselt.
Ablauf in der Übersicht:
- RMAN Backup auf Cluster 9i
- 10g Cluster inkl DB Software Installation und Patch 29 auf den neuen drei Knoten
- Kopieren Backup und letzte Archivelogs von der Quelle
- Restore in der 10g Umgebung inkl. Wiederherstellung auf dem ASM Laufwerken
- Migration der Datenbank auf 10g
- Anpassen der Datenbank
Vorbereitungen im Quellsystem
Auf dem Quellsystem muss das Backup mit RMAN für Datendateien/Controlfile/Archivelogs sauber erstellt werden.
Auf Quellsystem 9i:
1. Tablespaces System auf mindestens 50% freien Platz optimieren
2. Controlfile Trace als Vorlage für neuen Controlfile in Zielsystem 10g erzeugen
sqlplus>ALTER database backup controlfile TO trace AS 'd:\scripts\controlfileV3.txt'
Aus dem Controlfile Trace das create Controlfile Kommmando kopieren und auf die neuen Pfade anpassen. Mit diesem Befehl wird später im ZIEL ein neuer Controlfile angelegt.
Befehl für das Hinzufügen der Redologs für den Knoten zwei und drei kopieren und Script mit passenden Pfaden erstellen.
3. Restore Script Vorlage auf Quellsystem erstellen (mit Pfaden des Zielsystems!)
Diese Informationen werden dann später für das RMAN Backup benötigt um Tipp Arbeit zu sparen
SET lines 140 SET pages 500 spool d:\setnewname.txt SELECT 'set newname for datafile ' || file# || ' to ''+ORADATA/' || SUBSTR(name, 25, LENGTH(name)) ||''';' FROM v$datafile; spool off
Vorbereitungen im Zielsystem
1. Wenn es schon eine Datenbank (aus vorherigen Tests) für die neuen Ziel Software Version vom Produktionsystem V5 gibt, dies zuvor wieder löschen:
- command line: srvctl stop database –d ZIEL
- initZIEL.ora auf die initZIEL.ora.restore ändern. (Clustermodus aus, jobs aus etc.)
- Node1 – connect as sysdba using sqlplus
- startup mount restrict
- select host_name from v$instance: → wirklich die richtige DB?
- drop database
- control01.ctl bleibt i.d.R. übrig:
- set oracle_home=d:\oracle\1020\asm
- set oracle_sid=+ASM1
- asmcmd rm oradata/control01.ctl
Restore 9i in 10g Cluster
Das Backup der Quelle nach F:\backup auf Node1 kopieren inkl. Kopien der Read Only Tablespaces!
Kopieren aller Archive Logs auf F:\backup\archs (von allen 6 Knoten)
Anpassung D:\oracle\admin\ZIEL\pfile\initZIEL.ora auf Node1
init.ora:
#-- damit keine jobs das Upgrade stören job_qeue_processes=0 aq_tm_processes=0 # Archivelog Destination setzen log_archive_dest_1='LOCATION=F:\backup\archs REOPEN=120'\\ # _no_recovery_through_resetlogs=true
RMAN starten
rman rman>connect target / rman>startup nomount pfile='D:\oracle\admin\ZIEL\pfile\initZIEL.ora' rman>restore controlfile from ’f:\backup\name…..’ --hier das aktuellste controlfile nach dem backup nehmen
Prüfung über asmcmd
set oracle_home=d:\oracle\1020\asm set oracle_sid=+ASM1 asmcmd ls ORADATA/control01.ctl amscmd ls ORAREDO/control02.ctl
Tip: Alertlog in zweiten Fenster gnutail mit d:\scripts\gnu\tail –f d:\oracle\admin\ZIEL1\bdump\alert_Ziel1.log überwachen
Controlfile Informationen aktualisieren – nicht bekannte RMAN Backups löschen:
rman rman>CONNECT target / rman>ALTER database mount; rman>crosscheck backup; rman>DELETE expired backup;
Katalogisieren des vorhandenen Backups:
rman>catalog START WITH ’f:\backup’;
Den Restore Befehl um den set newname Block ergänzen (siehe zuvor erzeugtes Script unter Vorbereitung auf der Quelle)
Restore starten im RMAN
rman>run { SET newname FOR datafile 1 TO '+ORADATA/SYSTEM01.DBF'; SET newname FOR datafile 2 TO '+ORADATA/UNDOTBS01.DBF'; SET newname FOR datafile 3 TO '+ORADATA/TOOLS01.DBF'; SET newname FOR datafile 4 TO '+ORADATA/FINDATA01.DBF'; SET newname FOR datafile 5 TO '+ORADATA/FININDX01.DBF'; SET newname FOR datafile 6 TO '+ORADATA/LOGDATA01.DBF'; .... -- ZUVOR! set newname Spool für das Erstellen des Rename Befehls verwenden und einfügen .... SET newname FOR datafile 162 TO '+ORADATA/FININDX23.DBF'; SET newname FOR datafile 163 TO '+ORADATA/FININDX24.DBF'; allocate channel dev0 TYPE disk; allocate channel dev1 TYPE disk; allocate channel dev2 TYPE disk; allocate channel dev3 TYPE disk; allocate channel dev4 TYPE disk; restore database CHECK readonly; switch datafile ALL; recover database; }
Controlfile neu anlegen, damit später weitere Archive eingespielt werden können und die Rodo Log Gruppen richtig angelegt werden
Dazu die zuvor auf dem Quellsystem aus dem Trace des Orginal Controlfiles das passende Kommando erzeugen und anpassen
rman>EXIT sqlplus / AS sysdba sqlplus>shutdown IMMEDIATE sqlplus>startup nomount sqlplus>CREATE CONTROLFILE REUSE DATABASE "ZIEL" RESETLOGS ARCHIVELOG MAXLOGFILES 200 MAXLOGMEMBERS 3 MAXDATAFILES 200 MAXINSTANCES 8 MAXLOGHISTORY 9075 LOGFILE GROUP 1 ( '+ORADATA/REDO1_01.RDO', '+ORAREDO/REDO1_01.RDO' ) SIZE 200M, GROUP 2 ( '+ORADATA/REDO1_02.RDO', '+ORAREDO/REDO1_02.RDO' .... -- um alle Redolog Gruppen ergänzen .... GROUP 10 ( '+ORADATA/REDO1_10.RDO', '+ORAREDO/REDO1_10.RDO' ) SIZE 200M DATAFILE '+ORADATA/SYSTEM01.DBF', '+ORADATA/UNDOTBS01.DBF', '+ORADATA/TOOLS01.DBF', '+ORADATA/FINDATA01.DBF', ..... -- um alle Datendateien ergänzen ..... '+ORADATA/FININDX25.DBF', '+ORADATA/LOGDATA26.DBF', '+ORADATA/FINDATA12.DBF', '+ORADATA/FININDX26.DBF' CHARACTER SET UTF8 ;
Umschaltzeitpunkt von alter Produktion Quelle auf neue Produktion ZIEL
Die letzte Archivelogs von der Quell Datenbank bzw. alten Produktion holen und einspielen, dazu:
- finale archive logs erzeugen
- keiner ist angemeldet
- kein job läuft (alter system set job_queue_processes=0 auf Quelle)
- alle Knoten mit immediate runterfahren
- startup restrict auf einem Knoten
- create synonym checktable for ZIEL.resort;
- alter system archive log all;
- alter system archive log current;
Nun die restlichen Archivelogs von Quelle V3 zum Ziel V5 kopieren
Restliche Archive Logs einspielen – mit Catalog Befehl und RMAN
Auf Node1 als sysdba anmelden
RMAN> catalog START WITH ’f:\archlogs’; RMAN> recover database;
oder zur Not
sqlplus> RECOVER DATABASE USING BACKUP CONTROLFILE UNTIL CANCEL;
Achtung: wenn weitere Archive Logs benötigt werden, dann einspielen
Die Redo Log Groupe für Thread 2 und 3 mit vorbereiteten Script neu anlegen
-- Create log files for threads other than thread one. ALTER DATABASE ADD LOGFILE THREAD 2 GROUP 11 ( '+ORADATA/REDO2_01.RDO', '+ORAREDO/REDO2_01.RDO' ) SIZE 200M REUSE, ..... -- um alle Redolog Gruppen ergänzen .... GROUP 20 ( '+ORADATA/REDO2_10.RDO', '+ORAREDO/REDO2_10.RDO' ) SIZE 200M REUSE; ALTER DATABASE ADD LOGFILE THREAD 3 GROUP 21 ( '+ORADATA/REDO3_01.RDO', '+ORAREDO/REDO3_01.RDO' ) SIZE 200M REUSE, .... -- um alle Redolog Gruppen ergänzen .... GROUP 30 ( '+ORADATA/REDO3_10.RDO', '+ORAREDO/REDO3_10.RDO' ) SIZE 200M REUSE;
Achtung: Datenbank nicht mit „alter database open“ öffnen.
Datenbank für das Upgrade öffenen:
sqlplus>ALTER database OPEN resetlogs migrate;
Thread 2 und 3 des Cluster enablen
sqlplus>ALTER database enable thread 2; sqlplus>ALTER database enable thread 3;
Die alten threads 4 - 6 löschen
sqlplus>ALTER database disable thread 4; sqlplus>ALTER database disable thread 5; sqlplus>ALTER database disable thread 6;
Datendatei, die zuvor im Read Only Modus war, umbennen. (Spezifisch für diese Installation!)
sqlplus>SELECT name FROM v$datafile; -- Auf Datei(en) MISSINGxxx prüfen -- Files in read-only tablespaces umbennen sqlplus>ALTER DATABASE RENAME FILE 'MISSING00046' TO '+ORADATA/sys_read01.dbf'; -- prüfen ob alle Tablespaces online sind falls nicht sqlplus>ALTER tablespace SYS_READ online;
Tempfile für den Temp Tablespace anlegen
sqlplus>ALTER tablespace tempseg add tempfile '+ORADATA/TEMPSEG01.DBF' size 8192M reuse;
DB Upgrade von 9i auf 10g
Um die DB von der Version 9i auf die 10g upzugraden, sind die folgenden Schritte notwendig:
Archive Log Destination online auf das neue Storage ändern und in der initZIEL.ora eintragen.
sqlplus>ALTER system SET log_archive_dest_1='LOCATION=+ORARECO REOPEN=120' scope=memory; -- testen sqlplus>ALTER system archive LOG CURRENT;
Das Alertlog kontrollieren auf korrektes Archivieren
Den 10g sysaux Tablespace anlegen
sqlplus>create tablespace SYSAUX datafile '+ORADATA/SYSAUX01.DBF' size 1024M reuse extent management local ;
Prüfen ob alle Tablespace komplett und online sind.
Oracle Upgrade Script starten
sqlplus / asysdba sqlplus>spool d:\upgrade_1020.LOG sqlplus>@D:\oracle\1020\database\RDBMS\ADMIN\catupgrd.SQL
Nach dem Upgrade das spool File auf Fehler kontrollieren.
Objekte der Datenbank für 64bit behandeln
sqlplus>@?\rdbms\admin\utlirp
Security Patch aktualiseren - run catcpu
- Datenbank stoppen und sqlplus beenden
- in das Verzeichnis des Bundle Patches wechseln d:\oracle\1020\database\bundle\patch29
- startup DB normal
- run database upgrade to 10.2.0.3 P29
- DB Recompilieren / durchstarten
- Views aus Security Patch P29 neu aufbauen
sqlplus>shutdown IMMEDIATE sqlplus>EXIT cd d:\oracle\1020\database\bundle\patch29 sqlplus / a sysdba sqlplus>startup sqlplus>@catcpu
Alle ungültigen Objekte der Datenbank übersetzen
zwei mal laufen lassen!
sqlplus>@?\rdbms\admin\utlrp
Datenbank herunterfahren und wieder im normal mode starten.
sqlplus>shutdown IMMEDIATE sqlplus>startup sqlplus>@?\rdbms\admin\utlrp.SQL
Die Ausgaben utlrp.sql prüfen, falls ungültige Objekte exisiteren, versuchen diese Problem zu beheben.
Mit folgender Abfrage auf ungültige Objekte prüfen:
sqlplus>SELECT object_name, object_type, owner FROM dba_objects WHERE status=’INVALID’;
Datenbank stoppen und neustarten im migrate mode
sqlplus>shutdown IMMEDIATE sqlplus>startup migrate sqlplus>EXIT; cd /d D:\oracle\1020\database\BUNDLE\view_recompile sqlplus / AS sysdba sqlplus>@view_recompile_jan2008cpu.SQL
Datenbank stoppen und neustarten
Das utlrp.sql script laufen lassen.
sqlplus>@?\rdbms\admin\utlrp sqlplus> SELECT object_name, object_type, owner FROM dba_objects WHERE status=’INVALID’; -- prüfen und ungültiges beseitigen
Dual Tabelle prüfen
Falls die Dual Tabelle in einen read Only Tablespace lag (Produktspezifisch!) wieder in den System Tablespace verschieben
sqlplus>ALTER TABLE dual move tablespace system; sqlplus>DROP tablespace sys_read including contents AND datafiles;
Installation von OLAP (10 – 15min) bei Bedarf bzw. weitere Optionen je nach eingeesetzter Software
Wichtig! Zuvor mit sqlplus neu anmelden!
sqlplus>CONNECT AS SYSDBA sqlplus>SET echo ON sqlplus>spool d:\olap.LOG sqlplus>@d:\oracle\1020\database\olap\admin\olap.SQL sysaux tempseg sqlplus>spool off
Prüfen ob der User OLAPSYS exisitiert:
sqlplus>SELECT * FROM all_users;
Tablespaces auf unlimited setzen
Spool Script zum Erzeugen des Kommandos:
SET pages SET lines 100 spool d:\autoextent.SQL SELECT 'alter database datafile ''' || file_name || ''' autoextend on next 500m maxsize 30G;' FROM dba_data_files WHERE tablespace_name NOT LIKE 'SYS%' AND tablespace_name NOT LIKE 'UNDO%'; spool off -- Spool starten @d:\autoextent.SQL
Tablespaces prüfen
init.ora auf produktive Parmeter setzen Clustermodus wieder einschalten
#Jobs starten job_qeue_processes=64 aq_tm_processes=2 # Archivelog Destination setzen log_archive_dest_1='LOCATION=+ORARECO REOPEN=120' cluster_database=TRUE #auskommentieren/löschen ! #_no_recovery_through_resetlogs=TRUE
Init.ora auf alle Knoten verteilen
Datenbank auf Node 1 mit sqlplus stoppen und gesamtes Cluster mit „srvctl start database -d ZIEL“ starten.
Nacharbeiten:
- Oracle 10g Cluster Views nachinstallieren: @?/rdbms/admin/catclust.sql
- Datenbank Systemstatistiken erzeugen (siehe ⇒ Statistiken anlegen und überwachen
- Undo Tablespace 4-6 offline setzen und löschen
- sqlplus>alter tablespace undotbs4 offline;
- sqlplus>drop tablespace undotbs4 including contents and datafiles;
- usw.
- RMAN aufräumen und Backup neu einrichten/prüfen
- Perfstat User droppen und neu anlagen
(Vielen Dank an Anja Giesecke )