Cet article présente la procédure d'installation du patch 10.2.0.4 64 bits sur une instance Oracle 10.2.0.1 64 bits en environnement Solaris 9 SPARC.
L'instance à migrer s'appelle UBXU1ORA et elle est normalisée. La distribution 10.2.0.1 64 bits est installée dans le répertoire /Software/oracle/app/product/10.2.0.1. Dans ce même répertoire un lien 10.2.0 pointe sur le répertoire 10.2.0.1 pour gérer le cas où plusieurs versions 10g sont nécessaires pour plusieurs instances sur la même machine, le lien 10.2.0 correspondant à la distribution 10g majoritairement utilisée par les instances.
oracle@UBXU1ORA > cd /Software/oracle/app/product oracle@UBXU1ORA > ls -lrt drwxr-xr-x 60 oracle dba 1024 Sep 24 2007 10.2.0.1 lrwxrwxrwx 1 oracle dba 8 Aug 13 15:18 10.2.0 -> 10.2.0.1
(voir l'article "Normalisation d'une instance Oracle en mode archivelog sous Solaris" pour plus de détails sur la norme appliquée).
La variable ORA_VERSION dans le fichier $DBA/etc/UBXU1ORA.inst est fixée à 10.2.0
oracle@UBXU1ORA> cat $DBA/etc/UBXU1ORA.inst ... ORA_VERSION="10.2.0" ...
Le patch 10.2.0.4 64bits pour Solaris SPARC est récupéré à partir du site Metalink. Il se compose d'un fichier zip p6810189_10204_Solaris-64.zip de 1,2 Gb.
Au préalable, vérifier qu'il y a assez de place disponible dans le système de fichiers qui contiendra le futur répertoire de destination de la distribution 10.2.0.4 avec la commande df -k :
shell> df -k /Software/oracle
Toutes les instances et listener Oracle utilisant la distribution 10.2.0.1 sont arrêtées avec les binaires sqlplus et lsnrctl
oracle@UBXU1ORA > sqlplus "/ as sysdba" SQL*Plus: Release 10.2.0.1.0 - Production on Sam. Août 15 21:00:20 2009 Copyright (c) 1982, 2005, Oracle. All rights reserved. Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bit Production With the Partitioning, OLAP and Data Mining options SQL> shutdown immediate; Database closed. Database dismounted. ORACLE instance shut down. SQL> oracle@UBXU1ORA > lsnrctl LSNRCTL for Solaris: Version 10.2.0.1.0 - Production on 15-AOÛT -2009 21:02:57 Copyright (c) 1991, 2005, Oracle. All rights reserved. Welcome to LSNRCTL, type "help" for information. LSNRCTL> stop LISTENER_UBXU1ORA Connecting to (ADDRESS=(PROTOCOL=TCP)(Host=PARDUBX301)(Port=1522)) The command completed successfully
Créer un répertoire orainstall dans un système de fichiers disposant d'assez d'espace ( 3 Gb au moins ) et envoyer par ftp le fichier p6810189_10204_Solaris-64.zip dans ce répertoire orainstall.
Dans cet article, le fichier p6810189_10204_Solaris-64.zip est envoyé par ftp dans le répertoire /tmp/orainstall. Il est ensuite décompressé avec la command unzip.
shell> cd /tmp/orainstall shell> unzip p6810189_10204_Solaris-64.zip
L'installation peut alors démarrer avec le shell runInstaller localisé dans le sous répertoire ./Disk1.
2 méthodes sont possibles : la méthode silencieuse ou la méthode interactive graphique. C'est la deuxième méthode qui est choisie, aussi la variable $DISPLAY est mise à jour pour l'affichage des fenêtres graphiques Xterm :
shell> export DISPLAY=<adresse ip>:0.0
Pour lancer l'installation en mode graphique interactif
oracle@/tmp/orainstall> cd ./Disk1 oracle@/tmp/orainstall> export ORACLE_HOME=/Software/oracle/app/product/10.2.0.1 oracle@/tmp/orainstall> ./runInstaller
Starting Oracle Universal Installer...
Checking installer requirements...
Checking operating system version: must be 5.8, 5.9 or 5.10. Actual 5.9
Passed
Checking Temp space: must be greater than 250 MB. Actual 14036 MB Passed
Checking swap space: must be greater than 500 MB. Actual 29425 MB Passed
Checking monitor: must be configured to display at least 256 colors. Actual 16777216 Passed
All installer requirements met.
Preparing to launch Oracle Universal Installer from /tmp/OraInstall2009-08-14_08-44-50AM. Please wait ...
oracle@UBXU1ORA > Oracle Universal Installer, Version 10.2.0.4.0 Production
Copyright (C) 1999, 2008, Oracle. All rights reserved.
Des contrôles sont réalisés au démarrage de l'installation pour vérifier les prérequis (version OS, espace temporaire disponible etc...).
Toutes les étapes de l'installation graphique ne sont pas décrites car la distribution à installer est assez standard et ne comprend pas de composants spécifiques comme RAC, Réplication, OLAP, Transparent Gateways etc...
Au cours de l'installation, un nom d'installation et le chemin complet de l'installation 10.2.0.1 (/Software/oracle/app/product/10.2.0.1) à patcher sont renseignés :
Name : OraDb10g_home1 Path : /Software/oracle/app/product/10.2.0.1
Au cours de l'installation il faut exécuter 2 scripts en tant que super utilisateur root
/Software/oracle/app/oraInventory/orainstRoot.sh /Software/oracle/app/product/10.2.0.1/root.sh
Le répertoire /Software/oracle/app/product/10.2.0.1 peut alors être renommé en /Software/oracle/app/product/10.2.0.4 et le lien 10.2.0 peut être recréé pour pointer vers le répertoire /Software/oracle/app/product/10.2.0.4.
oracle@UBXU1ORA> cd /Software/oracle/app/product oracle@UBXU1ORA> rm 10.2.0 oracle@UBXU1ORA> mv 10.2.0.1 10.2.0.4 oracle@UBXU1ORA> ln -fs 10.2.0.4 10.2.0 oracle@UBXU1ORA> ls -lrt drwxr-xr-x 60 oracle dba 1024 Sep 24 2007 10.2.0.4 lrwxrwxrwx 1 oracle dba 8 Aug 13 16:20 10.2.0 -> 10.2.0.4
Une analyse préalable est nécessaire avec le script de pré-migration utlu102i.sql. Pour cela l'instance est démarrée en mode UPGRADE et le script $ORACLE_HOME/rdbms/admin/utlu102i.sql est exécuté.
SQL> STARTUP UPGRADE; SQL> spool upgrade_info.log SQL> @?/rdbms/admin/utlu102i.sql SQL> spool off; SQL> exit
Voici la sortie obtenue dans ce cas pratique :
Oracle Database 10.2 Upgrade Information Utility 08-14-2009 08:39:04 . ********************************************************************** Database: ********************************************************************** --> name: UBXU1 --> version: 10.2.0.1.0 --> compatible: 9.2.0 --> blocksize: 8192 . ********************************************************************** Tablespaces: [make adjustments in the current environment] ********************************************************************** --> SYSTEM tablespace is adequate for the upgrade. .... minimum required size: 372 MB --> TEMPO tablespace is adequate for the upgrade. .... minimum required size: 58 MB --> SYSAUX tablespace is adequate for the upgrade. .... minimum required size: 200 MB --> UNDO tablespace is adequate for the upgrade. .... minimum required size: 180 MB . ********************************************************************** Update Parameters: [Update Oracle Database 10.2 init.ora or spfile] ********************************************************************** WARNING: --> "shared_pool_size" needs to be increased to at least 201326592 . ********************************************************************** Renamed Parameters: [Update Oracle Database 10.2 init.ora or spfile] ********************************************************************** -- No renamed parameters found. No changes are required. . ********************************************************************** Obsolete/Deprecated Parameters: [Update Oracle Database 10.2 init.ora or spfile] ********************************************************************** -- No obsolete parameters found. No changes are required . ********************************************************************** Components: [The following database components will be upgraded or installed] ********************************************************************** --> Oracle Catalog Views [upgrade] VALID --> Oracle Packages and Types [upgrade] VALID . ********************************************************************** Miscellaneous Warnings ********************************************************************** WARNING: --> Database contains INVALID objects prior to upgrade. .... USER PUBLIC has 19 INVALID objects. . PL/SQL procedure successfully completed.
Dans l'exemple de cet article, il est nécessaire d'augmenter le paramètre shared_pool_size à 200Mb.
Des objets utilisateur sont invalides (USER PUBLIC has 19 INVALID objects), mais ils l'étaient déjà avec Oracle 9i.
Le paramètre shared_pool_size étant statique, l'instance est arrêtée et le paramètre shared_pool_size est modifié dans le fichier d'initialisation $CFG/initUBXU1ORA.ora pour appliquer la valeur minimale préconisée par le script utlu102i.sql.
Pour déclencher la migration de l'instance vers la version 10.2.0.1, l'instance est démarrée en mode UPGRADE et le script $ORACLE_HOME/rdbms/admin/catupgrd.sql est exécuté.
SQL> STARTUP UPGRADE; SQL> spool patch.log SQL> @?/rdbms/admin/catupgrd.sql SQL> spool off; SQL> exit
Un rapport sur la statut de la migration est donné à la fin de l'exécution du script. Lorsqu'un statut INVALID apparaît, les erreurs doivent être corrigées. C'est le cas dans cet exemple pratique
Oracle Database 10.2 Upgrade Status Utility 08-14-2009 09:15:59
.
Component Status Version HH:MM:SS
Oracle Database Server INVALID 10.2.0.4.0 00:22:30
.
Total Upgrade Time: 00:22:31
PL/SQL procedure successfully completed.
La recherche avec les mots clés "^Warning", "^ORA-" et "^Errors for" dans le fichier de log de la migration permet de retrouver rapidement le(s) erreur(s) :
shell> cat patch.log | egrep -i '^Errors for|^Warning|^ORA-' Warning: Package Body created with compilation errors. Errors for PACKAGE BODY DBMS_SQLPA:
Dans l'exemple de cet article, une seule erreur :
LINE/COL ERROR -------- ----------------------------------------------------------------- 113/5 PL/SQL: SQL Statement ignored 118/44 PL/SQL: ORA-00904: "OTHER_XML": invalid identifier
Il n'est pas nécessaire de lancer une errorstack sur l'erreur ORA-904 qui tombe dans cette migration, en effet cette erreur est connue et facilement corrigée en supprimant la table SYS.PLAN_TABLE qui ne contient pas la colonne OTHER_XML par rapport à la table PUBLIC.PLAN_TABLE.
Relancer le script catupgrd.sql après correction des erreurs jusqu'à obtenir un statut VALID de migration.
Oracle Database 10.2 Upgrade Status Utility 08-14-2009 09:57:09
.
Component Status Version HH:MM:SS
Oracle Database Server VALID 10.2.0.4.0 00:14:34
.
Total Upgrade Time: 00:14:35
PL/SQL procedure successfully completed.
Dès que la migration est valide, l'instance est alors redémarrée en mode normal et le script utlrp.sql est exécuté pour recompiler tous les packages PL/SQL éventuellement invalides afin que la compilation ne soit pas réalisée à leur première exécution. Cette étape est optionnelle mais recommandée.
SQL> shutdown immediate; SQL> startup; SQL> spool utlrp.log SQL> @?/rdbms/admin/utlrp.sql SQL> spool off; SQL> exit
Pour vérifier le statut valide de tous les composants après migration, interroger la vue SYS.DBA_REGISTRY :
SQL> select comp_name, version, status from sys.dba_registry;
COMP_NAME VERSION STATUS -------------------------------------- -------------------------- ------ Oracle Database Catalog Views 10.2.0.4.0 VALID Oracle Database Packages and Types 10.2.0.4.0 VALID
Optionnellement si RMAN est utilisé, le catalog Oracle Recovery Manager doit être migré :
shell> rman catalog username/password@instance RMAN> upgrade catalog;