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