====== Umzug einer Datenbank 10g R2 nach 11g inkl. Betriebsystemwechsel ======
Die PreUpgrade Vorgaben im Detail von Oracle zuvor beachten! Besonders die Timezone Problematik!
Aufgabe: Eine Datenbank 10g unter Windows 2003 wird nach Linux umgezogen und auf 11g gehoben
\\
====== 1. Variante: längere Downtime möglich ======
Ablauf:
- Metainformationen des Quellsystems beschaffen / bereitstellen
- Datenbank preUpgrade Script der Ziel Version auf Quellsystem starten und Ergebnisse in der Quelle fixen!
- Kopieren der Datendateien in das neue Zielsystem
- Pfile und Controlfile für neue Umgebung anpassen und erstellen
- Datenbank upgrade durchführen
==== 1. Metadaten der Quelldatenbank ====
\\
Struktur der Datenbank Files anzeigen und merken
rman
rman> connect target /
RMAN> report schema;
Kontrolldatei der Zieldatenbank wird anstelle des Recovery-Katalogs verwendet
Bericht: Datenbankschema
Liste mit permanenten Datendateien
===========================
Dateigr÷▀e (MB) Tablespace RB-Segmente Datendateiname
---- -------- -------------------- ------- ------------------------
1 510 SYSTEM *** C:\ORACLE\ORADATA\PRIM01\SYSTEM01.DBF
2 40 UNDOTBS1 *** C:\ORACLE\ORADATA\PRIM01\UNDOTBS01.DBF
3 280 SYSAUX *** C:\ORACLE\ORADATA\PRIM01\SYSAUX01.DBF
4 170 USERS *** C:\ORACLE\ORADATA\PRIM01\USERS01.DBF
5 440 PMDB_DAT1 *** C:\ORACLE\ORADATA\PRIM01\PMDB_DAT1.DBF
6 510 PMDB_NDX1 *** C:\ORACLE\ORADATA\PRIM01\PMDB_NDX1.DBF
7 250 PMDB_LOB1 *** C:\ORACLE\ORADATA\PRIM01\PMDB_LOB1.DBF
Liste mit temporõren Dateien
=======================
Dateigr÷▀e (MB) Tablespace Max. Gr÷▀e (MB) Name von temp.Datei
---- -------- -------------------- ----------- --------------------
1 56 TEMP 32767 C:\ORACLE\ORADATA\PRIM01\TEMP01.DBF
\\
Textkopie des SPFiles erzeugen\\
sqlplus / as sysdba
SQL> create pfile='c:\temp\initprim01.ora' from spfile;
\\
Textkopie vom Kontrolfile erstellen
sqlplus / as sysdba
SQL> alter database backup controlfile to trace as 'C:\temp\control_prim01.ctl';
==== 2. PreUpgrade Probleme beheben ====
Umkopieren preUpgrade utlu112i Script, das preUpgrade Script MUSS zuvor auf der unter 10g gestarteten DB laufen!\\
Für das Script see "How to Download and Run Oracle's Database Pre-Upgrade Utility (Doc ID 884522.1)"
sqlplus>@utlu112i.sql
ORA-04023: Objekt SYS.STANDARD konnte nicht validiert oder autorisiert werden
=> NICHT auf dem Ziel Datenbank laufen lassen =>> Im Quellsystem muss erst alles gefixt werden!
sqlplus>@utlu112i.sql
**********************************************************************
Miscellaneous Warnings
**********************************************************************
WARNING: --> Database is using a timezone file older than version 11.
.... After the release migration, it is recommended that DBMS_DST package
.... be used to upgrade the 10.2.0.4.0 database timezone version
.... to the latest version which comes with the new release.
=> Timezone Problem muss gelößt werden, sonst startet 11g upgrade nicht!
==== 3. Kopieren der Datendateien ====
* Auf dem Ziel Datenverzeichnis anlegen
* Datenbank sauber schließen sqlplus>shutdown immediate
* per scp alle Datendateien der Datenbank auf den Zielrechner kopierenC:\oracle\oradata\prim01>pscp *.DBF oracle@192.168.178.32:/opt/oracle/oradata/prim01
* Text Kopie des spfile und des Controlfiles auf die Linux Maschine kopieren
==== 4. Pfile und Controlfile für neue Umgebung anpassen und erstellen ====
* Umgebung (Oracle Home, SID etc) setzen bzw. setdb Script einbinden => [[dba:arbeits_umgebung#linux_-_arbeitsumgebung_setzen_und_einrichten|Arbeitsumgebung setzen und einrichten unter Linux]]
* pfile anpassen mit minimalen Parametern für die 11g *.control_files='/opt/oracle/oradata/prim01/control01.ctl','/opt/oracle/oradata/prim01/control02.ctl'
*.db_block_size=8192
*.db_domain=''
*.db_file_multiblock_read_count=16
*.db_name='prim01'
*.db_recovery_file_dest='/opt/oracle/flash_recovery_area'
*.db_recovery_file_dest_size=2147483648
*.job_queue_processes=2
*.nls_language='GERMAN'
*.nls_territory='GERMANY'
*.open_cursors=300
*.pga_aggregate_target=95420416
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.sga_max_size=241172480
*.sga_target=241172480
*.undo_management='AUTO'
*.undo_tablespace='UNDOTBS1'
* prüfen ob alle notwendigen Verzeichnisse vorhanden sind oracle@venus:/opt/oracle$ mkdir flash_recovery_area
* Controlfile Script mit neuen Pfaden aus der Trace Datei von Schritt 1 erstellen (Abschnitt in der Datei mit dem Reset Logs Statement)
==== 5. Datenbank upgrade durchführen ====
- Instance im nomout Status mit geänderter init.ora starten sqlplus / as sysdba
SQL> startup nomount pfile='/home/oracle/initprim01.ora'
- Mit Controlfile Script neue Controlfiles erstellenCREATE CONTROLFILE REUSE DATABASE "PRIM01" RESETLOGS NOARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 292
LOGFILE
GROUP 1 '/opt/oracle/oradata/prim01/REDO01.LOG' SIZE 50M,
GROUP 2 '/opt/oracle/oradata/prim01/REDO02.LOG' SIZE 50M,
GROUP 3 '/opt/oracle/oradata/prim01/REDO03.LOG' SIZE 50M
DATAFILE
'/opt/oracle/oradata/prim01/SYSTEM01.DBF',
'/opt/oracle/oradata/prim01/UNDOTBS01.DBF',
'/opt/oracle/oradata/prim01/SYSAUX01.DBF',
'/opt/oracle/oradata/prim01/USERS01.DBF',
'/opt/oracle/oradata/prim01/PMDB_DAT1.DBF',
'/opt/oracle/oradata/prim01/PMDB_NDX1.DBF',
'/opt/oracle/oradata/prim01/PMDB_LOB1.DBF'
CHARACTER SET UTF8
;
- Datenbank im upgrade Modus starten und Upgrade starten
alter database open resetlogs upgrade;
ALTER TABLESPACE TEMP ADD TEMPFILE '/opt/oracle/oradata/prim01/TEMP01.DBF' SIZE 58720256 REUSE AUTOEXTEND ON NEXT 655360 MAXSIZE 32767M;
- Timezone Problem von Punkt 2 beheben, falls zum Beipiel die 10g gar nicht mehr zur Verfügung steht, utlu112i nach registry$database durchsuchen und per hand anwenden! DIES IST EIN GEFÄHLICHER HACK!!!
sqlplus>ALTER TABLE registry$database ADD (tz_version NUMBER);
sqlplus>UPDATE registry$database set tz_version = 11;
- Upgrade durchführen
sqlplus>@?/rdbms/admin/catupgrd.sql
sqlplus>startup
sqlplus>@?/rdbms/admin/utlu112s.sql
==== Quellen ====
[[http://www.oracle.com/pls/db112/portal.portal_db?selected=14&frame=|Oracle Doku 11g]]