Oracle 10g : Appliquer le patch 10.2.0.4 sur une version 10.2.0.1

Logo

Introduction

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

$DBA/etc/UBXU1ORA.inst
...
ORA_VERSION="10.2.0"
...

Installation du patch 10.2.0.4

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.

Opérations préliminaires

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"

shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
oracle@UBXU1ORA > lsnrctl

LSNRCTL> stop LISTENER_UBXU1ORA
Connecting to (ADDRESS=(PROTOCOL=TCP)(Host=FRDUBX301)(Port=1522))
The command completed successfully

Par précaution, sauvegarder la distribution /Software/oracle/app/product/10.2.0.1 ainsi que la ou les instance(s) Oracle à migrer.

Installation interactive de la version 10.2.0.4 sur la version 10.2.0.1

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.

Avant de lancer l’installation, la variable $ORACLE_HOME de la session oracle qui exécute l’installer doit impérativement pointer sur le répertoire physique /Software/oracle/app/product/10.2.0.1 et non le lien 10.2.0. L’installation ne peut pas être réalisée si la variable $ORACLE_HOME correspond à un lien.

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

Migration manuelle de l’instance 10.2.0.1 vers la version 10.2.0.4

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

Script d’analyse de pré-migration (utlu102i.sql)

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é.

STARTUP UPGRADE;

spool upgrade_info.log;

@?/rdbms/admin/utlu102i.sql;

spool off;
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.

Migration de l’instance 10.2.0.1 vers la version 10.2.0.4 (catupgrd.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é.

STARTUP UPGRADE;

spool patch.log;

@?/rdbms/admin/catupgrd.sql;

spool off;
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.

Redémarrage en mode normal et lancement du script utlrp.sql

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.

shutdown immediate;
startup;

spool utlrp.log;

@?/rdbms/admin/utlrp.sql;

spool off;
exit

Opérations post migration

Pour vérifier le statut valide de tous les composants après migration, interroger la vue SYS.DBA_REGISTRY :

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;