=====Oracle Datenbank 11g 11.2.0.1 auf aktuelleste Release 11.2.0.4 + Patch unter Windows 2008 upgraden===== Vorbereitung: * Software Version und Edition ermitteln ( EE oder SE Edition ) * => siehe zum Beispiel [[dba:se_ee_version_aus_db_binary|Die Oracle Datenbank Edition aus dem Oracle Home Dateien erkennen- Wurde Standard oder Enterprise Edition installiert?]] * Klären ob für die EE Edition auch eine entsprechende Lizenz im Haus zur Verfügung steht und schriftlich bestätigen lassen * Aktuelles Backup der Umgebung erstellen ( Wenn möglich inkl. OS z.b. mit einem Snapshot der VM) * Möglichst alle ungültige Objekt in der Datenbank vor dem Upgrade wieder mal reparieren, Entwicklung / Software Hersteller dazu "einspannen"! * Evlt. unötige Optionen in der Daten entfernen, siehe [[dba:drop_db_options|Optionen in der Datenbank deinstallieren 10g/11g]] Genereller Ablauf: * Download Oracle RDBMS Software 11.2.0.4 + letzter Patch Stand * Installation der Oracle Software in ein neues Oracle Home * Pre Installation Scripts und Vorbereitungen * Downtime Start * Listener in neues Home umziehen * Datenbank in neues Homes umziehen und upgraden * Downtime End ==== Software ==== Über Oracle Support Portal folgende Patche laden: * p13390677 (11.2.0.4 DB Version) für Windows x86 64bit * p6880880 ((MSWIN x86 64 - OPatch Patch Set) * p19651773 (MSWIN x86 64 - WINDOWS DB BUNDLE PATCH 11.2.0.4.10) Über den "View Digest" in der Download Maske den MD5 Hash merken! ==== Software 11.2.0.4 + Patch Installation ==== === Software bereitstellen und auspacken=== Software auf den DB Host kopieren (zum Beispiel nach d:\install ) , MD5 Checksum der zip Archive überprüfen und auspacken. Hier in der Windows Powershell: #MD5 Hash ermitteln [Reflection.Assembly]::LoadWithPartialName("System.Web") [System.Web.Security.FormsAuthentication]::HashPasswordForStoringInConfigFile("p13390677_112040_MSWIN-x86-64_1of7.zip","MD5") C5A0CAB903EF4995C6EB052A43F24787 [System.Web.Security.FormsAuthentication]::HashPasswordForStoringInConfigFile("p13390677_112040_MSWIN-x86-64_2of7.zip","MD5") 20CC44FE26729FC98725DC3D287E2187 [System.Web.Security.FormsAuthentication]::HashPasswordForStoringInConfigFile("p6880880_112000_MSWIN-x86-64.zip","MD5") 53A3DB3FE3A22188A9620DB514A4157B [System.Web.Security.FormsAuthentication]::HashPasswordForStoringInConfigFile("p19651773_112040_MSWIN-x86-64.zip","MD5") 1C9576953D0F62F1B7621B05A600D5BF # Database Software unzip p13390677_112040_MSWIN-x86-64_1of7.zip unzip p13390677_112040_MSWIN-x86-64_1of7.zip #Patch mkdir patch unzip '.\p19651773_112040_MSWIN-x86-64.zip' -d patch # Opatch muss nicht entpacket werden, wird später direkt in das neue Oracle Home ausgepackt === Software installieren und Patchen === Die Software 11.2.0.4 installieren - im aktuellen Fall eine SE Edition - in ein neues Oracle Home wie "D:\oracle\product\11.2.0.4\dbhome_1" . Setup aufrufen und wie gewohnt Software ("Install database software only"!) in der zuvor ermittelten Version installieren, bei einer EE Edition darauf achten auch die entsprechenden Optionen der DB (falls im Einsatz) wieder mit zu installieren. == Umgebungsscripte anpassen== Auch in der Windows Welt sollte die Wartung der Datenbank hauptsächlich über die Command Shell durchgeführt werden. Zum Setzen der dazu notwendigen Umgebungsvariablen empfehle ich die https://orapowershell.codeplex.com/, nach der Software Installation muss hier nun die XML Konfiguration für ein neues Oracle Home angepasst werden. ==OPatch p6880880_112000_MSWIN-x86-64.zip einspielen== Vor einem Patch der neuen Software muss der Patch Installer auf die aktuellste Version aktualisiert werden. Powershell öffnen und Umgebung auf das neue Oracle Home einstellen: # mit der OraPowerShell setdb # oder alternativ manuell set-item -path env:ORACLE_HOME -value D:\oracle\product\11.2.0.4\dbhome_1 echo $ENV:ORACLE_HOME D:\oracle\product\11.2.0.4\dbhome_1 #alte Version pürfen cd $ENV:ORACLE_HOME\OPatch .\opatch version OPatch Version: 11.2.0.3.4 cd d:\install mv $ENV:ORACLE_HOME\OPatch $ENV:ORACLE_HOME\OPatch_OLD unzip .\p6880880_112000_MSWIN-x86-64.zip -d $ENV:ORACLE_HOME # Neue Version überprüfen cd $ENV:ORACLE_HOME\OPatch .\opatch version OPatch Version: 11.2.0.3.6 ==Patch WINDOWS DB BUNDLE PATCH 11.2.0.4.10 - PSU Oktober 2014 - einspielen== Prüfen ob der "Oracle MTS Recovery Service" und der "Distributed Connection Coordinator" ausgeschaltet sind! Mit Opatch den Patch in das neue Software Home einspielen: Powershell Beisiel: # mit der OraPowerShell setdb # oder alternativ manuell set-item -path env:ORACLE_HOME -value D:\oracle\product\11.2.0.4\dbhome_1 D:\install\patch\19651773 # Da opatch.bat noch ein DOS Schell Script ist, besser in der CMD Shell aufrufen cmd.exe /c $ENV:ORACLE_HOME\OPatch\opatch apply #Fragen beantworten Email address/User Name: You have not provided an email address for notification of security issues. Do you wish to remain uninformed of security issues ([Y]es, [N]o) [N]: Y .. Is the local system ready for patching? [y|n] y User Responded with: Y ... OPatch succeeded. cd $ENV:ORACLE_HOME\OPatch .\opatch lsinventory .. Patch 19651773 : applied on Wed Dec 31 11:04:16 UTC 2014 Unique Patch ID: 18139602 Patch description: "WINDOWS DB BUNDLE PATCH 11.2.0.4.10:(19651773)" .. ==== "Alte" Datenbank prüfen und vorbereiten ==== === Auf ungültige Objekte prüfen === In der Datenbank vor dem Upgrade sollten KEINE Datenbank Objekte ungültig sein. So weit wie möglich mit der Entwicklung zusammen aufräumen und reparieren. Auf keinen Fall dürfen aber Objecte des SYS oder SYSTEM Users ungültig sein! Ursachen dafür suchen und fixen! Zur Not den Oracle Support dafür einschalten! SELECT object_name , object_type , owner FROM dba_objects WHERE status='INVALID' / Script siehe auch [[https://orapowershell.codeplex.com/SourceControl/latest#sql/invalid.sql|invalid.sql]] Mit "@?\rdbms\admin\utlrp.sql" ungültige SYS Objekte bei Bedarf neu übersetzen. === Papierkorb leeren === Gelegentlich können alte und eigentlich gelöschte Objekte durch Abhängigkeiten den Upgrade Prozess stark stören, daher Papierkorb auf jeden Fall vor dem Upgrade löschen! purge DBA_RECYCLEBIN; === Statistiken neu aufbauen === Die Performance des Upgrades läßt sich erheblich durch passende Statistiken auf dem Data Dictionary steigern. Neue Statisken anlegen: EXECUTE dbms_stats.gather_dictionary_stats; === PreUpgrade Scripts ausführen und Anweisungen befolgen === Neue DOS/Powershell Session öffnen/ Umgebung auf die "alte" DB setzen und das PreUpgrade Script utlu112i.sql aus der NEUEN Umgebung ausführen. # set the enviroment # setdb with oraPowerShell sqlplus / as sysdba SYS>@D:\oracle\product\11.2.0.4\dbhome_1\RDBMS\ADMIN\utlu112i.sql Besonders auf die Anweisungen in der WARNING Section achten Wie: WARNING: --> Database is using a timezone file older than version 14. .... After the release migration, it is recommended that DBMS_DST package .... be used to upgrade the 11.2.0.1.0 database timezone version .... to the latest version which comes with the new release. === Neue init.ora im neuen Oracle Home anlegen und bei Bedarf anpassen === Auf die Hinweise vom utlu112i.sql zuvor achten und einen eine init.ora mit den angepassten Werte und OHNE "_" Parameter erzeugen # set the enviroment # setdb with oraPowerShell sqlplus / as sysdba SQL>create pfile='D:\oracle\product\11.2.0.4\dbhome_1\database\initVDS.ora' from spfile; Datei öffnen und die Parameter wie "*.compatible='11.2.0.4.0'" anpassen. === Spfile aus der Init.ora im neuen Oracle Home erzeugen === Ein spfile kann auch per SQL*Plus aus einer bestehenden init.ora ohne DB Instance erzeugt werden. # Umgebung auf das Neue Home gesetzt! sqlplus /nolog SYS>create spfile='D:\oracle\product\11.2.0.4\dbhome_1\database\SPFILEVDS.ORA' from pfile='D:\oracle\product\11.2.0.4\dbhome_1\database\initVDS.ora'; File created. Prüfen ob die Datei da auch ist! === Password Files in das neuen Oracle Home kopieren === cp D:\oracle\product\11.2.0\dbhome_1\database\PWDVDS.ora D:\oracle\product\11.2.0.4\dbhome_1\database === Downtime Begin === Monitoring für die DB/Application auf Wartung setzen Nun beginnt die eigentliche Downtime für die produktive Datenbank. Anwendungen wie gewohnt stoppen und DB mit "shutdown immediate" sauber stoppen. sqlplus / as sysdba shutdown immediate === Listener umziehen === * Listener im alten Home stoppen bzw. den Dienst stoppenlsnrctl stop * Listener.ora in das neue Home kopierencp D:\oracle\product\11.2.0\dbhome_1\network\admin\listener.ora D:\oracle\product\11.2.0.4\dbhome_1\network\admin\listener.ora * In Administrativer Powershell Session den alten Service entfernen cmd /c sc delete OracleOraDb11g_home1TNSListener [SC] DeleteService SUCCESS * In Administrativer Powershell Session den neuen Listener starten, damit wird auch der neue Service angelet # Umgebung auf das neue Home setzen # Fehler kann ignoriert werden, bedeutet das der Dienst noch nicht existiert und nun angelegt wird. cd $ENV:ORACLE_HOME/bin ./lsnrctl start Starting tnslsnr: please wait... Failed to open service , error 1060. TNSLSNR for 64-bit Windows: Version 11.2.0.4.0 - Production === Windows Service im neuen Oracle Home anlegen === Alten Service im alten Home löschen und neuen Service anlegen # Umgebung auf das alte Home setzen #zuvor Datenbank stoppen! falls noch nicht gestoppt oradim -SHUTDOWN -SID VDS -SHUTTYPE inst -SHUTMODE immediate # Dienst löschen oradim -DELETE -SID VDS # Umgebung auf das neue Home setzen #Dienst wieder anlegen #aber vorerstmal nicht die Instance gleich mitstarten! oradim -NEW -SID VDS -STARTMODE auto -SHUTMODE immediate -SPFILE === Datenbank aus dem neuen Home im Upgrade Mode starten und Upgrade durchführen === == Upgrade Script @catupgrd.sql == # Umgebung auf das neue Home setzen cd $ENV:ORACLE_HOME/rdbms/admin sqlplus / as sysdba SQL>startup upgrade SQL>spool d:\temp\upgrade_11_2_0_4.log SQL>@catupgrd.sql ... Upgrade Script runs ~30 to 45 minutes .. sqlplus / as sysdba SQL>startup Ungültige Objekte neu übersetzen: SQL>@?/rdbms/admin/utlrp.sql Fixed Object Statisiken neu anlegen ~ 5min SQL>execute dbms_stats.gather_fixed_objects_stats; == Post Upgrade Script catuppst.sql == Dauer ~2min SQL> @?/rdbms/admin/catuppst.sql == Post Upgrade Script utlu121s.sql == SQL> @?/rdbms/admin/utlu112s.sql -- auf ungültige Optionen achten und Ursache über Support Portal suchen und "reparieren" Darauf achten das alle DB Optionen auch gültig sind! **Probleme** Package DRIOPT und Oracle TEXT "INVALID"! Fehlermeldung nach dem Recomplile: "Failed Check for package body DIROPT" ALTER PACKAGE CTXSYS.DRIOPT COMPILE; grant select on SYS.DBA_INDEXES to ctxsys; grant select on SYS.DBA_TRIGGERS to ctxsys; grant select on SYS.DBA_PART_KEY_COLUMNS to ctxsys; grant select on SYS.DBA_SEGMENTS to ctxsys; @?/rdbms/admin/utlrp.sql Support Node: * The STATUS Of Oracle Text In DBA_REGISTRY=INVALID; CTXSYS.DRIOPT Package Body Is INVALID - Compilation Errors = ORA-942 PLS-364: loop index variable 'COL' use is invalid (Doc ID 1499153.1) === Alert.log prüfen === adrci show alert === Auto Start testen === Steht noch genügend Zeit in der Downtime zur Verfügung, kann nun die Maschine neu gestartet werden um auch den Autostart aller Dienste zu prüfen. Vor dem Reboot auch prüfen ob der Service für die Datenbank und den Oracle Listener auf "Automatic" steht und die Registriy Keyes für einen Autostart auch gesetz sind (=> siehe auch [[dba:start_db_windows|Start der Oracle Instance unter Windows]] ). Bei Bedarf DB vor dem Reboot stoppen und Alert log etc. aufräumen. adrci adrci>show homes adrci> set home adric>purge -age 0 Trace Verzeichniss um Diag Home der DB löschen === Downtime beendet === Testen ob die DB im Listener registiert ist und Remote sich die Applikation wieder anmelden kann. Funktioniert alles, kann die Applikation neu gestartet werden. ==== Nacharbeiten==== ===Workload Statistiken neu berechnen bzw. anlegen=== Workload Statisik siehe auch => [[dba:statistiken|Statistiken anlegen und überwachen]] Start während der laufenden Arbeitszeit execute dbms_stats.gather_system_stats('Start'); Stoppen ca. 1h später execute dbms_stats.gather_system_stats('Stop'); column sname format a20 column pname format a20 column pval2 format a20 select sname , pname , pval1 , pval2 from sys.aux_stats$; ===I/O Statistiken neu berechnen bzw. anlegen=== I/O Calibarate ausführen (Ohne i/O Calibrate Informationen wird in der 11.2.0.4 Release Auto DOP nicht mehr vom Optimizer angewandt!) set pagesize 300 set linesize 150 column name format a35 column start_time format a25 column end_time format a25 select * from sys.RESOURCE_IO_CALIBRATE$ / select * from GV$IO_CALIBRATION_STATUS / prompt ... prompt ... Check that all disks are on async IO! prompt ... SELECT count(*) , i.asynch_io FROM v$datafile f , v$iostat_file i WHERE f.file# = i.file_no AND i.filetype_name = 'Data File' group by i.asynch_io / prompt ... prompt ... Check that all disks are on async IO! prompt ... set serveroutput on set timing on set time on -- set the Count of Disk on the count of luns behind the ASM disks -- declare lat integer; iops integer; mbps integer; begin dbms_resource_manager.calibrate_io ( num_physical_disks => 36 -- set this value to your Disk Count! , max_latency => 10 , max_iops => iops , max_mbps => mbps , actual_latency => lat ); dbms_output.put_line('max_iops = ' || iops); dbms_output.put_line('latency = ' || lat); dbms_output.put_line('max_mbps = ' || mbps); end; / set timing off set time off column START_TIME format a21 heading "Start|time" column END_TIME format a21 heading "End|time" column MAX_IOPS format 9999999 heading "Block/s|data block" column MAX_MBPS format 9999999 heading "MB/s|maximum-sized read" column MAX_PMBPS format 9999999 heading "MB/s|largeI/0" column LATENCY format 9999999 heading "Latency|data block read" column NUM_PHYSICAL_DISKS format 999 heading "Disk|Cnt" select to_char(START_TIME,'dd.mm.yyyy hh24:mi') as START_TIME ,to_char(END_TIME,'dd.mm.yyyy hh24:mi') as END_TIME ,MAX_IOPS ,MAX_MBPS ,MAX_PMBPS ,LATENCY ,NUM_PHYSICAL_DISKS from dba_rsrc_io_calibrate / ====Backup Scripte prüfen / anpassen und neues Backup erstellen - Monitorring Scripte prüfen==== Das Backup Script prüfen und bei Bedarf anpassen! Ein neues Backup erstellen! Monitorring Scripte prüfen ==== DATA_PUMP_DIR prüfen ==== Nach einem Upgrade war der DIRECTORY_PATH vom DATA_PUMP_DIR wieder auf den Default gestellt. Prüfen! ====Die alte Software vollständig wieder entfernen==== Ein einfaches Löschen des alten Oracle Homes reicht nicht aus, die Einträge im Oracle Inventory und in der Registry sollten auch entfernt werden. **Achtung:** Falls gestartet zuvor den "Distributed Transaction Coordinator" stoppen, der hält die "oci.dll" im alten Home noch offen! Um zu prüfen ob noch Datein im alten Pfad offen, sind diesen kurzfristig umbenennen, zum beispiel mit einem führenden "_" Dazu steht im Alten Home unter D:\oracle\product\11.2.0\dbhome_1\deinstall ein "deinstall.bat" Script zur Verfügung: #Umgebung auf das alte Home Umgebung setzen cd $ENV:ORACLE_HOME\deinstall ./deinstall.bat In meine Fall musste ich das Script mehr als einmal aufrufen, damit es zum Schluss tatsächlich wie erwartet funktioniert hat. Über Dos Shell aufgerufen, ohne Umgebungs-Settings: # ohne gesetzte Umgebung D:\oracle\product\11.2.0\dbhome_1\deinstall\deinstall.bat # Reste danach noch weglöschen! Dokumentation: * Database Installation Guide - Removing Oracle Database Software -https://docs.oracle.com/cd/E11882_01/install.112/e47798/deinstall.htm#NTDBI2863 * http://oracle-base.com/articles/misc/manual-oracle-uninstall.php#Windows ===== Quellen ===== Oracle: * Database Upgrade Guide 11g R2 * http://docs.oracle.com/cd/E11882_01/server.112/e23633/changes.htm#UPGRD101 Netz: * Mike Dietrich => https://blogs.oracle.com/UPGRADE/entry/welcome_to_the_oracle_database