 
Introduction
Cet article présente la migration manuelle d’une instance Oracle de la
version 9.2.0.7 32bits vers la version 10.2.0.4 64bits. La plateforme est un
environnement Unix Solaris 10, le composant Jserver n’est pas installé sur
l’instance, la réplication et le RAC (Real Application Cluster) ne sont pas mis
en œuvre. De même il n’y a pas de base de données en mode standby ou de
tablespaces en mode Read Only ou Offline.
L’instance à migrer s’appelle DBAT1ORA et elle est normalisée. La
distribution 9.2.0.7 32 bits est installée dans le répertoire
/Software/oracle/app/product/9.2.0.7. Dans ce même répertoire un lien 9.2.0
pointe sur le répertoire 9.2.0.7 pour gérer le cas où plusieurs versions 9i
sont nécessaires pour plusieurs instances sur la même machine, le lien 9.2.0
correspondant à la distribution 9i majoritairement utilisée par les
instances.
oracle[DBAT1ORA] > cd /Software/oracle/app/product oracle[DBAT1ORA] > ls -lrtdrwxr-xr-x 60 oracle dba 1024 Apr 4 2007 9.2.0.7 lrwxrwxrwx 1 oracle dba 8 Jun 22 2007 9.2.0 -> 9.2.0.7
(voir l’article Normalisation d’une instance Oracle en mode archivelog sous Solaris pour plus de détails sur la norme appliquée).
La distribution 10.2.0.4 64 bits est installée dans le répertoire
/Software/oracle/app/product/10.2.0.4.
L’instance 9i DBAT1ORA  est sauvegardée avant l’opération de migration.
Vérification des pré-requis OS (mémoire partagée et sémaphores)
Avant le début des opérations, les pré-requis Solaris sur la mémoire partagée et les sémaphores sont vérifiés.
Beaucoup de paramètres systèmes pour la mémoire partagée et les sémaphores ont désormais des valeurs par défaut qui ont été augmentées avec Solaris 10 ou bien sont devenus obsolètes. D’une façon générale, les valeurs par défaut des paramètres systèmes Solaris étant supérieures aux préconisations Oracle, seule la mémoire partagée maximale doit être généralement définie pour le compte oracle.
Le tableau ci-dessous récapitule les paramètres Solaris modifiés ou devenus obsolètes entre la version 9 et la version 10 de Solaris. Les valeurs par défaut pour Solaris 10 sont données pour comparaison avec les préconisations des valeurs minimales Oracle.
| Solaris 9 /etc/system | Préco Oracle | Solaris 10 /etc/project | Valeur par défaut | |
|---|---|---|---|---|
| noexec_user_stack | 1 | Obsolète | ||
| semsys:seminfo_semmni | 100 | project.max-sem-ids | 128 | |
| semsys:seminfo_semmns | 1024 | Obsolète | ||
| semsys:seminfo_semmsl | 256 | project.max-sem-nsems | 512 | |
| semsys:seminfo_semvmx | 32767 | Obsolète | ||
| shmsys:shminfo_shmmax | 4294967295 | project.max-shm-memory | 2 Gb | |
| shmsys:shminfo_shmmin | 1 | Obsolète | ||
| shmsys:shminfo_shmmni | 100 | project.max-shm-ids | 128 | |
| shmsys:shminfo_shmseg | 10 | Obsolète | 
Le tableau montre clairement que seule la mémoire partagée doit être définie pour Oracle avec Solaris 10.
Si le compte oracle est associé au projet user.oracle avec le nouveau
contrôleur de ressources Solaris 10, une mémoire partagée maximale de 3 Gb
(max-sh-memory, max value of shared memory segment) est définie pour le projet
user.oracle avec la commande projmod :
shell> projmod -sK "project.max-shm-memory=(priv,3G,deny)" user.oracleElle peut être également définie avec le binaire prctl
shell> prctl -n project.max-shm-memory -v 3gb -r -i project user.oracle Le fichier /etc/project contient les entrées ci-dessous :
/etc/project
system:0::::
user.root:1::::
noproject:2::::
default:3::::
group.staff:10::::
user.oracle:100::oracle::project.max-shm-memory=(priv,8589934592,deny)Pour tous les autres paramètres systèmes (max-sem-ids, etc.),
juste  vérifier que les valeurs par défaut de la machine Solaris 10 sont
supérieures aux préconisations Oracle avec la commande prctl pour le projet
user.oracle. 
Exemple pour le paramètre max-sem-ids recommandé à 100 par oracle 
shell> prctl -n project.max-sem-ids -i project user.oracleproject: 100: user.oracle NAME PRIVILEGE VALUE FLAG ACTION RECIPIENT project.max-sem-ids privileged 128 - deny - system 16.8M max deny -
Si ce n’est pas le cas, la valeur est modifiée également pour le projet
user.oracle avec le binaire prctl.
Exemple :
prctl -n project.max-sem-ids -v 100 -r -i project user.oracleL’outil d’information pre-migration (utlu102i.sql)
Contrairement aux migrations d’Oracle 8i vers 9i où les vérifications pré-migration étaient consignées dans les documentations de migration vers Oracle 9i, avec Oracle 10g un script de pré-analyse de migration est fourni.
Ce script de pré-migration fournit tous les éléments nécessaires : paramètres devenus obsolètes avec Oracle 10g, valeurs minimales de certains paramètres d’initialisation de l’instance Oracle à augmenter, tailles minimales des tablespaces systèmes à créer ou augmenter.
Dans le cas d’Oracle 10g, un nouveau tablespace système SYSAUX fait son
apparition, le script utlu102i.sql va donner la taille minimale de ce
tablespace système à créer.
Exécution du script utlu102i.sql
Le script d’analyse utlu102i.sql est disponible dans la distribution 10g
dans le répertoire $ORACLE_HOME/rdbms/admin. Dans ce cas pratique, le répertoire
est /Software/oracle/app/product/10.2.0.4/rdbms/admin/
Pour lancer la pré-analyse copier ce fichier utlu102i.sql dans un répertoire
(/tmp) par exemple et exécuter ce dernier dans une sessions SQL*Plus en
environnement Oracle 9i :
oracle[DBAT1ORA]> cd /tmp oracle[DBAT1ORA]> cp /Software/oracle/app/product/10.2.0.4/rdbms/admin/utlu102i.sql .oracle[DBAT1ORA]> sqlplus "/ as sysdba"spool pre_upgrade.log; @utlu102i.sql; spool off; exit
Résultat du script utlu102i.sql et opérations pre-migration
Voici le résultat du script utlu102i.sql en sortie pour l’instance DBAT1ORA
9i à migrer ;
/tmp/pre_upgrade.log
Oracle Database 10.2 Upgrade Information Utility    08-12-2009 13:23:57
 .
**********************************************************************
Database:
**********************************************************************
--> name:       SOPT9
--> version:    9.2.0.7.0
--> compatible: 9.2.0
--> blocksize:  8192
 .
**********************************************************************
Logfiles: [make adjustments in the current environment]
**********************************************************************
**********************************************************************
--> The existing log files are adequate. No changes are required.
 .
**********************************************************************
Tablespaces: [make adjustments in the current environment]
**********************************************************************
WARNING: --> SYSTEM tablespace is not large enough for the upgrade.
 .... currently allocated size: 200 MB
 .... minimum required size: 240 MB
 .... increase current size by: 40 MB
 .... tablespace is NOT AUTOEXTEND ENABLED.
--> TEMP tablespace is adequate for the upgrade.
 .... minimum required size: 58 MB
--> UNDO tablespace is adequate for the upgrade.
 .... minimum required size: 22 MB
 .
**********************************************************************
Update Parameters: [Update Oracle Database 10.2 init.ora or spfile]
**********************************************************************
WARNING: --> "streams_pool_size" is not currently defined and needs a value of
at least 50331648
WARNING: --> "large_pool_size" needs to be increased to at least 8388608
WARNING: --> "session_max_open_files" needs to be increased to at least 20
 .
**********************************************************************
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]
**********************************************************************
--> "optimizer_max_permutations"
--> "log_archive_start"
 .
 .
**********************************************************************
Components: [The following database components will be upgraded or installed]
**********************************************************************
--> Oracle Catalog Views         [upgrade]  VALID
--> Oracle Packages and Types    [upgrade]  VALID
--> Real Application Clusters    [upgrade]  INVALID
 .
**********************************************************************
Miscellaneous Warnings
**********************************************************************
WARNING: --> Deprecated CONNECT role granted to some user/roles.
 .... CONNECT role after upgrade has only CREATE SESSION privilege.
WARNING: --> Database contains stale optimizer statistics.
 .... Refer to the 10g Upgrade Guide for instructions to update
 .... statistics prior to upgrading the database.
 .... Component Schemas with stale statistics:
 ....   SYS
WARNING: --> Database contains INVALID objects prior to upgrade.
 .... USER RISK has 4 INVALID objects.
 .... USER SOP_TRT has 3 INVALID objects.
 .... USER SYS has 256 INVALID objects.
 .... USER SYSTEM has 49 INVALID objects.
 .
**********************************************************************
SYSAUX Tablespace:
[Create tablespace in the Oracle Database 10.2 environment]
**********************************************************************
--> New "SYSAUX" tablespace
 .... minimum required size for database upgrade: 500 MB
 .
PL/SQL procedure successfully completed.Section Database
Cette section affiche les informations globales sur la base Oracle 9i (nom
de la base de données, version et niveau de compatibilité). Un avertissement
est affiché si le paramètre d’initialisation COMPATIBLE concernant le niveau de
compatibilité doit être ajusté avant la migration.
**********************************************************************
Database:
**********************************************************************
--> name:       SOPT9
--> version:    9.2.0.7.0
--> compatible: 9.2.0
--> blocksize:  8192Section LogFiles
Le section LogFiles affiche la liste des fichiers de redo log pour lesquels
la taille est inférieure à 4Mb. De nouveaux fichiers de redo log doivent être
créés avec une taille supérieure à 4Mb (idéalement 10Mb) si des avertissements
sont donnés dans cette section (cf article sur la Supression et création des
groupes de fichiers de redo log si c’est le cas).
Cette opération de redimensionnement des fichiers de redo log doit être réalisée avant la migration.
**********************************************************************
Logfiles: [make adjustments in the current environment]
**********************************************************************
**********************************************************************
--> The existing log files are adequate. No changes are required.
 .Section Tablespaces
La section Tablespace liste les tablespaces systèmes (SYSTEM, UNDO, TEMP
etc...) éventuellement sous dimensionnés pour une migration vers Oracle 10g.
**********************************************************************
Tablespaces: [make adjustments in the current environment]
**********************************************************************
WARNING: --> SYSTEM tablespace is not large enough for the upgrade.
 .... currently allocated size: 200 MB
 .... minimum required size: 240 MB
 .... increase current size by: 40 MB
 .... tablespace is NOT AUTOEXTEND ENABLED.
--> TEMP tablespace is adequate for the upgrade.
 .... minimum required size: 58 MB
--> UNDO tablespace is adequate for the upgrade.
 .... minimum required size: 22 MBDans le contexte de cette migration, le tablespace SYSTEM doit être étendu à
240 Mb (taille actuelle : 200 Mb)
Cette opération de redimensionnement des tablespaces systèmes doit être réalisée avant la migration.
Le tablespace SYSTEM étant en mode AUTOEXTEND OFF, ce dernier est étendu
manuellement avec la commande ALTER DATABASE DATAFILE RESIZE après avoir
interrogé la vue dba_data_files et en s’assurant que l’espace disque nécessaire
est suffisant
select file_name, tablespace_name, bytes from dba_data_files where tablespace_name='SYSTEM';FILE_NAME TABLESPACE_NAME BYTES -------------------------------------- ----------------- ---------- /dba/oracle/DBAT1ORA/SYSTEM_01.dbf SYSTEM 104857600 /dba/oracle/DBAT1ORA/SYSTEM_02.dbf SYSTEM 104857600ALTER DATABASE DATAFILE '/dba/oracle/DBAT1ORA/SYSTEM_01.dbf' resize 150M;Database altered.
Tous les autres tablespaces systèmes sont correctement dimensionnés (TEMP,
UNDO).
Section Update / Renamed / Obsolete or Deprecated Parameters
Les sections "Update Parameters", "Renamed Parameters" et
"Obsolete/Deprecated Parameters" listent les paramètres d’initialisation de
l’instance Oracle qui doivent être respectivement ajustés, renommés ou
supprimés juste avant la migration vers la version 10g.
**********************************************************************
Update Parameters: [Update Oracle Database 10.2 init.ora or spfile]
**********************************************************************
WARNING: --> "streams_pool_size" is not currently defined and needs a value of
at least 50331648
WARNING: --> "large_pool_size" needs to be increased to at least 8388608
WARNING: --> "session_max_open_files" needs to be increased to at least 20
 .
**********************************************************************
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]
**********************************************************************
--> "optimizer_max_permutations"
--> "log_archive_start"Cette opération d’ajustement des paramètres d’initialisation doit être réalisée dans le fichier d’initialisation juste avant la migration 10g.
Section Components (statut INVALID pour RAC)
La section Components indique les composants bases de données (Catalog, Data Mining, OLAP, RAC…) ainsi que leur statut 9i qui vont être migrés ou installés
**********************************************************************
Components: [The following database components will be upgraded or installed]
**********************************************************************
--> Oracle Catalog Views         [upgrade]  VALID
--> Oracle Packages and Types    [upgrade]  VALID
--> Real Application Clusters    [upgrade]  INVALID
 .Dans ce cas précis, l’outil de pré-migration indique que le composant Real Application Clusters (RAC) est présent avec un statut invalide et sera migré [upgrade].
RAC n’a jamais été installé sur cette instance et cette erreur est décrite
dans la note Metalink 312071.1 du 8 mai 2009, elle concerne toutes les
plateformes. Pour vérifier que l’option RAC n’est effectivement pas installée
dans l’instance, interroger la vue V$OPTION :
select value from v$option where parameter = 'Real Application Clusters';VALUE ---------------------------------------------------------------- FALSE
Cette erreur provient de la migration précédente de la version 8.1.7 (ou 9.0.1) vers la version 9.2.0.1.
Les versions 8.1.7 et 9.0.1 n’utilisaient pas de registre pour les
composants. Pour RAC, durant la migration vers la version 9.2, une entrée dans
DBA_REGISTRY pour Real Application Clusters est créée si la vue V$PING existe
lors de la migration. Pour éliminer cette fausse erreur, une solution consiste
à "downgrader" vers la version 8.1.7, à supprimer la vue V$PING et migrer à
nouveau vers la version 9i : cette solution est inenvisageable. Il n’existe pas
d’autre méthode supportée.
Pour éviter tout malentendu, le statut peut être modifié d’INVALID à REMOVED
avec Oracle 10g et 11g grâce à la procédure removed du package dbms_registry.
Cette opération sera réalisée post-migration.
Section Miscellaneous Warnings
La section Miscellaneous Warnings donne des éléments divers supplémentaires
comme les objets au statut invalide pour les comptes systèmes (SYS, SYSTEM…)
et les comptes utilisateurs, les schémas qui présentent des statistiques trop
vieilles (stale statistics), etc. 
**********************************************************************
Miscellaneous Warnings
**********************************************************************
WARNING: --> Deprecated CONNECT role granted to some user/roles.
 .... CONNECT role after upgrade has only CREATE SESSION privilege.
WARNING: --> Database contains stale optimizer statistics.
 .... Refer to the 10g Upgrade Guide for instructions to update
 .... statistics prior to upgrading the database.
 .... Component Schemas with stale statistics:
 ....   SYS
WARNING: --> Database contains INVALID objects prior to upgrade.
 .... USER RISK has 3 INVALID objects.
 .Lorsque l’utilitaire de pré-migration affiche un avertissement sur l’un des problèmes suivants, une analyse poussée doit être réalisée avant de migrer vers la version 10g :
- Rôle CONNECT obsolète (deprecated CONNECT Role)
- Liens de bases de données avec mots de passe (database links with passwords)
- TIMESTAMP avec le type de données TIMEZONE (TIMEZONE with TIMEZONE datatype)
- Jeu de caractères national 8.1.7 (Release 8.1.7 National Character Set)
- Statistiques de l’optimiseur (Optimizer Statistics)
Dans le cas pratique ici, des avertissements sont donnés sur le rôle CONNECT
qui ne conserve que le privilège CREATE SESSION avec la version 10g et des statistiques
trop vieilles pour le compte système SYS.
Les objets invalides pour SYS et SYSTEM ont été corrigés mais ces
corrections ne font pas l’objet de cet article. Elles sont essentiellement
liées au catalogue AQ et Réplication créées avec le mauvais compte en version
9i, ainsi que des vues résiduelles d’OEM. Les objets invalides utilisateur sont
des erreurs purement applicatives.
Rôle CONNECT
Après migration vers Oracle 10g, le rôle CONNECT aura uniquement le
privilège CREATE SESSION, tous les autres privilèges donnés au rôle CONNECT
dans les versions précédentes seront révoqués durant la migration. Pour
identifier les utilisateurs et rôles associés au rôle CONNECT, le résultat de
cette requête doit être conservée :
SELECT grantee FROM dba_role_privs WHERE granted_role = 'CONNECT' and grantee NOT IN ( 'SYS', 'OUTLN', 'SYSTEM', 'CTXSYS', 'DBSNMP', 'LOGSTDBY_ADMINISTRATOR', 'ORDSYS', 'ORDPLUGINS', 'OEM_MONITOR', 'WKSYS', 'WKPROXY', 'WK_TEST', 'WKUSER', 'MDSYS', 'LBACSYS', 'DMSYS', 'WMSYS', 'OLAPDBA', 'OLAPSVR', 'OLAP_USER', 'OLAPSYS', 'EXFSYS', 'SYSMAN', 'MDDATA', 'SI_INFORMTN_SCHEMA', 'XDB', 'ODM');GRANTEE ------------------------------ RISK SOP_EP SOP_IS
Les privilèges accordés au rôle CONNECT sont ensuite sauvegardés en
interrogeant la vue role_sys_privs afin de pouvoir réattribuer les privilèges
nécessaires aux utilisateurs qui disposaient de ces privilèges dans le rôle
CONNECT
select role, privilege, admin_option from role_sys_privs where role='CONNECT';ROLE PRIVILEGE ADM ------------------------------ ---------------------------------------- --- CONNECT CREATE VIEW NO CONNECT CREATE TABLE NO CONNECT ALTER SESSION NO CONNECT CREATE CLUSTER NO CONNECT CREATE SESSION NO CONNECT CREATE SYNONYM NO CONNECT CREATE SEQUENCE NO CONNECT CREATE DATABASE LINK NO
Si des utilisateurs ou rôles ont besoin de privilèges autres que le privilège CREATE SESSION, les privilèges doivent être donnés avant la migration.
Statistiques trop vieilles pour le compte SYS (stale statistics)
Lors de la migration vers Oracle 10g, les statistiques sont collectées pour les tables du dictionnaire qui ont des statistiques manquantes. La collection des statistiques peut demander du temps lors de la migration si les tables du dictionnaire sont volumineuses.
Pour diminuer l’indisponibilité durant la migration à cause de la collecte des statistiques, il est recommandé de collecter les statistiques pour les comptes systèmes avant la migration de la base de données actuelle avec le script donné en annexe pour les versions 9.0.1 ou 9.2.0.
Après mise à jour des statistiques, cet avertissement n’est plus donné par
l’utilitaire utlu102i.sql.
La mise à jour des statistiques pour les comptes systèmes est réalisée si possible avant la migration.
Section SYSAUX Tablespace
Le tablespace SYSAUX est un nouveau tablespace système avec Oracle 10g.
Cette section donne les informations nécessaires pour sa création (taille
minimale, etc.) 
--> New "SYSAUX" tablespace
 .... minimum required size for database upgrade: 500 MB
 .Le tablespace SYSAUX doit être créé après le démarrage en mode UPGRADE de l’instance avec la version 10g et JUSTE avant que les scripts de migration ne soient invoqués.
Migration manuelle
Avant la migration effective, l’instance est sauvegardée.
Préparation de l’environnement 10g pour les fichiers d’initialisation (init) et de configuration (listener.ora et tnsnames.ora)
Par défaut, Oracle cherche le fichier d’initialisation
init<Instance>.ora de l’instance dans le répetoire $ORACLE_HOME/dbs. Dans
la norme adoptée, un lien initDBAT1ORA.ora est donc créé dans le répertoire
/Software/oracle/app/product/10.2.0.4/dbs, lien qui pointe vers
/Software/oracle/Instances/pfile/initDBAT1ORA.ora.
shell> cd /Software/oracle/app/product/10.2.0.4/dbs
shell> ln -fs /Software/oracle/Instances/DBAT1ORA/pfile/initDBAT1ORA.ora initDBAT1ORA.oraDe même, par défaut Oracle cherche les fichiers listener.ora et tnsnames.ora
dans le répertoire $ORACLE_HOME/network/admin. Dans la norme adoptée, un lien
listener.ora et un lien tnsnames.ora sont créés dans le répertoire
/Software/oracle/app/product/10.2.0.4/network/admin, liens qui pointent
respectivement vers $TNS_ADMIN/listener.ora et $TNS_ADMIN/tnsnames.ora,
$TNS_ADMIN étant le répertoire /Software/oracle/Network.
shell> cd /Software/oracle/app/product/10.2.0.4/network/admin
shell> ln -fs /Software/oracle/Network/listener.ora listener.ora
shell> ln -fs /Software/oracle/Network/tnsnames.ora tnsnames.oraLa version 10.2.0.4 étant la future version majoritaire 10.2.0.x des
instances, un lien 10.2.0 pointant vers le répertoire 10.2.0.4 est créé dans le
répertoire /Software/oracle/app/product :
shell> cd /Software/oracle/app/product
shell> ln -fs 10.2.0.4 10.2.0Arrêt de l’instance 9i DBAT1ORA
L’instance Oracle 9i DBAT1ORA est arrêtée avec SQL*Plus avec la commande
shutdown immediate.
oracle[DBAT1ORA]> sqlplus "/ as sysdba"shutdown immediate;Database closed. Database dismounted. ORACLE instance shut down.
Le listener LISTENER_DBAT1ORA de l’instance 9i DBAT1ORA est également arrêté
avec le binaire lsnrctl. 
oracle[DBAT1ORA]> lsnrctllsnrctl> stop LISTENER_DBAT1ORA;Connecting to (ADDRESS=(PROTOCOL=TCP)(Host=SRVUNXFR19)(Port=1525)) The command completed successfully
Modification de l’environnement DBAT1ORA ($DBA/etc/DBAT1ORA.inst)
Le fichier d’environnement de l’instance DBAT1ORA ($DBA/etc/DBAT1ORA.inst)
est alors modifié pour basculer sur la version 10.2.0. Une nouvelle variable
$ORA_NLS10 spécifique 10g fait son apparition et doit pointer sur le répertoire
$ORACLE_HOME10g/nls/data dans ce fichier d’environnement.
$DBA/etc/DBAT1ORA.inst
...
ORA_VERSION="10.2.0"
...
export ORA_NLS10=$ORACLE_HOME/nls/data
...Une nouvelle session oracle en prenant l’environnement DBAT1ORA est alors
lancée pour démarrer la migration en vérifiant que les 5 variables ci-dessous
sont correctement initialisées :
- $ORACLE_SID:- DBAT1ORA
- $ORACLE_HOME(ex :- /Software/oracle/app/product/10.2.0)
- $PATH(ex :- /Software/oracle/app/product/10.2.0/bin…)
- $ORA_NLS10(ex :- /Software/oracle/app/product/10.2.0/nls/data)
- $LD_LIBRARY_PATH(ex :- /Software/oracle/app/product/10.2.0/lib…)
Modification des paramètres d’initialisation de l’instance DBAT1ORA avant migration
Conformément aux préconisations de l’outil de pré-migration utlu102i.sql,
les paramètres d’initialisation sont modifiés dans le fichier
initDBAT1ORA.ora.
$CFG/initDBAT1ORA.ora
#log_archive_start = true      
large_pool_size = 8388608
streams_pool_size = 50331648
session_max_open_files = 20Migration avec STARTUP UPGRADE, création du tablespace SYSAUX et lancement du script de migration catupgrd.sql
L’instance est alors démarrée en environnement 10g avec l’option UPGRADE de
la commande STARTUP via SQL*Plus.
oracle[DBAT1ORA]> sqlplus "/ as sysdba"STARTUP UPGRADE;
Comme il s’agit d’une version 9i et non 10.1, le tablespace système SYSAUX
est créé à cette étape avec les recommandations de l’utilitaire de
pré-migration (500 Mb) :
CREATE TABLESPACE SYSAUX datafile '/dba/oracle/DBAT1ORA/SYSAUX_01.dbf' SIZE 500M REUSE EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO ONLINE;Tablespace created.
Le script de migration catupgrd.sql peut alors être exécuté :
spool upgradeDBAT1ORA.log;
@?/rdbms/admin/catupgrd.sql;
spool off;Consulter le fichier de log pour repérer toutes les erreurs.
Opérations post-migration
Script de vérification utlu102s.sql et dba_registry
Le script $ORACLE_HOME/admin/utlu102s.sql affiche les résultats
de la migration afin de vérifier que la migration de toutes les options est
valide :
@?/rdbms/admin/utlu102s.sqlOracle Database 10.2 Upgrade Status Utility 08-18-2009 16:55:08 . Component Status Version HH:MM:SS Oracle Database Server INVALID 10.2.0.4.0 00:29:59 Oracle Real Application Clusters INVALID 10.2.0.4.0 00:00:03 . Total Upgrade Time: 00:31:35 PL/SQL procedure successfully completed.
Dans le contexte de cet article, l’option Oracle Real Application Clusters
au statut INVALID n’est pas prise en compte pour la raison évoquée précédemment
(bug de la migration 8i vers 9i).
En revanche la migration des composants bases de données (vues du catalogue,
packages et types systèmes) est au statut INVALID. Pour plus de détails sur
le(s) composant(s) invalide(s), interroger la vue dba_registry :
select comp_name, version, status from dba_registryCOMP_NAME VERSION STATUS --------------------------------------- -------------- ----------- Oracle Database Catalog Views 10.2.0.4.0 VALID Oracle Database Packages and Types 10.2.0.4.0 INVALID Oracle Real Application Clusters 10.2.0.4.0 INVALID
Script de recompilation de tous les objets utlrp.sql
Dans le migration de DBAT1ORA, il existe donc au moins un ou plusieurs
packages/types systèmes invalide(s). Toutefois, avant d’analyser les objets
systèmes invalides, le script $ORACLE_HOME/rdbms/admin/utlrp.sql qui recompile
globalement les objets systèmes/utilisateurs doit être exécuté. Il s’avère
utile de faire plusieurs passes de ce script de recompilation jusqu’à obtention
d’un nombre d’erreurs identiques.
@?/rdbms/admin/utlrp.sqlTIMESTAMP -------------------------------------------------------------------------------- COMP_TIMESTAMP UTLRP_END 2009-08-18 17:09:25 PL/SQL procedure successfully completed. ... OBJECTS WITH ERRORS ------------------- 21 ... ERRORS DURING RECOMPILATION --------------------------- 2
Détection des objets systèmes invalides (dba_objects)
La vue dba_objects permet de retrouver rapidement les objets invalides en
cause afin d’apporter les corrections nécessaires.
select object_name, owner, status from dba_objects where status='INVALID' and owner in ('SYS','SYSTEM');OBJECT_NAME OBJECT_TYPE OWNER ------------------- --------------- ------------------------------ DBMS_SQLPA PACKAGE BODY SYS
Dans le contexte de la migration de DBAT1ORA, il s’agit du package body
DBMS_SQLPA appartenant à SYS qui est au statut INVALID. Cette erreur est connue
dans les migrations des versions 9i, 10gR1 et 10gR2 vers la version 10.2.0.4 et
11.1.0.6 ou 11.1.0.7 et l’erreur est décrite dans les notes Metalink 782735.1
et 605317.1.
drop table plan_table$;
drop table plan_table;
@?/rdbms/admin/catplan.sql
@?/rdbms/admin/dbmsxpln.sql
@?/rdbms/admin/prvtxpln.plb 
@?/rdbms/admin/prvtspao.plb Après correction des erreurs, une nouvelle exécution du script utlrp.sql
doit donner 0 erreur et un statut VALID dans la vue 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
Oracle Real Application Clusters          10.2.0.4.0      INVALIDMise au statut REMOVED de l’option Real Application Clusters
Comme évoqué dans les paragraphes précédents, le composant RAC est présent
dans la vue dba_registry avec un statut INVALID alors que l’option n’est pas
installée (bug de la migration 8i vers 9i). La seule solution actuelle est de
passer le composant RAC au statut REMOVED avec la procédure removed du package
dbms_registry.
exec dbms_registry.removed('RAC');Redémarrage en mode normal de l’instance et configuration du listener
L’instance peut alors être redémarrée en mode normal.
shutdown immediate;Database closed. Database dismounted. ORACLE instance shut down.startup;ORACLE instance started.
Le fichier listener.ora dans le répertoire $TNS_ADMIN est ensuite modifé
pour prendre en compte l’environnement 10g pour l’instance DBAT1ORA et le
listener démarré avec lsnrctl :
listener.ora
LISTENER_DBAT1ORA =
  (ADDRESS_LIST =
        (ADDRESS= (PROTOCOL= TCP)(Host= SRVUNXFR19)(Port= 1525))
        (ADDRESS= (PROTOCOL= IPC)(KEY=DBAT1ORA))
  )
SID_LIST_LISTENER_DBAT1ORA =
  (SID_LIST =
    (SID_DESC =
      (ORACLE_HOME = /Software/oracle/app/product/10.2.0)
      (SID_NAME = DBAT1ORA)
      (GLOBAL_DBNAME = DBAT1ORA)
    )
    )
LOG_DIRECTORY_LISTENER_DBAT1ORA=/Software/oracle/Instances/DBAT1ORA/bdump
LOG_FILE_LISTENER_DBAT1ORA=listener_DBAT1ORA.logshell> lsnrctlLSNRCTL> start LISTENER_DBAT1ORAStarting /Software/oracle/app/product/10.2.0/bin/tnslsnr: please wait... TNSLSNR for Solaris: Version 10.2.0.4.0 - Production System parameter file is /Software/oracle/Network/listener.ora Log messages written to /Software/oracle/Instances/DBAT1ORA/bdump/listener_dbat1ora.log Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=SRVUNXFR19)(PORT=1525))) Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=DBAT1ORA))) Connecting to (ADDRESS=(PROTOCOL=TCP)(Host=SRVUNXFR19)(Port=1525)) STATUS of the LISTENER ------------------------ Alias LISTENER_DBAT1ORA Version TNSLSNR for Solaris: Version 10.2.0.4.0 - Production Start Date 18-AOÛT -2009 18:24:33 Uptime 0 days 0 hr. 0 min. 0 sec Trace Level off Security ON: Local OS Authentication SNMP OFF Listener Parameter File /Software/oracle/Network/listener.ora Listener Log File /Software/oracle/Instances/DBAT1ORA/bdump/listener_dbat1ora.log Listening Endpoints Summary... (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=SRVUNXFR19)(PORT=1525))) (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=DBAT1ORA))) Services Summary... Service "DBAT1ORA" has 1 instance(s). Instance "DBAT1ORA", status UNKNOWN, has 1 handler(s) for this service... The command completed successfully
Annexe - Collecte des statistiques des tables systèmes
spool gdict
grant analyze any to sys;
exec dbms_stats.gather_schema_stats('WMSYS',options=>'GATHER', estimate_percent => DBMS_STATS.AUTO_SAMPLE_SIZE, method_opt => 'FOR ALL COLUMNS SIZE AUTO', cascade => TRUE);
exec dbms_stats.gather_schema_stats('MDSYS',options=>'GATHER', estimate_percent => DBMS_STATS.AUTO_SAMPLE_SIZE, method_opt => 'FOR ALL COLUMNS SIZE AUTO', cascade => TRUE);
exec dbms_stats.gather_schema_stats('CTXSYS',options=>'GATHER', estimate_percent => DBMS_STATS.AUTO_SAMPLE_SIZE, method_opt => 'FOR ALL COLUMNS SIZE AUTO', cascade => TRUE);
exec dbms_stats.gather_schema_stats('XDB',options=>'GATHER', estimate_percent => DBMS_STATS.AUTO_SAMPLE_SIZE, method_opt => 'FOR ALL COLUMNS SIZE AUTO', cascade => TRUE);
exec dbms_stats.gather_schema_stats('WKSYS',options=>'GATHER', estimate_percent => DBMS_STATS.AUTO_SAMPLE_SIZE, method_opt => 'FOR ALL COLUMNS SIZE AUTO', cascade => TRUE);
exec dbms_stats.gather_schema_stats('LBACSYS',options=>'GATHER', estimate_percent => DBMS_STATS.AUTO_SAMPLE_SIZE, method_opt => 'FOR ALL COLUMNS SIZE AUTO', cascade => TRUE);
exec dbms_stats.gather_schema_stats('OLAPSYS',options=>'GATHER', estimate_percent => DBMS_STATS.AUTO_SAMPLE_SIZE, method_opt => 'FOR ALL COLUMNS SIZE AUTO', cascade => TRUE);
exec dbms_stats.gather_schema_stats('DMSYS',options=>'GATHER', estimate_percent => DBMS_STATS.AUTO_SAMPLE_SIZE, method_opt => 'FOR ALL COLUMNS SIZE AUTO', cascade => TRUE);
exec dbms_stats.gather_schema_stats('ODM',options=>'GATHER', estimate_percent => DBMS_STATS.AUTO_SAMPLE_SIZE, method_opt => 'FOR ALL COLUMNS SIZE AUTO', cascade => TRUE);
exec dbms_stats.gather_schema_stats('ORDSYS',options=>'GATHER', estimate_percent => DBMS_STATS.AUTO_SAMPLE_SIZE, method_opt => 'FOR ALL COLUMNS SIZE AUTO', cascade => TRUE);
exec dbms_stats.gather_schema_stats('ORDPLUGINS',options=>'GATHER', estimate_percent => DBMS_STATS.AUTO_SAMPLE_SIZE, method_opt => 'FOR ALL COLUMNS SIZE AUTO', cascade => TRUE);
exec dbms_stats.gather_schema_stats('SI_INFORMTN_SCHEMA',options=>'GATHER', estimate_percent => DBMS_STATS.AUTO_SAMPLE_SIZE, method_opt => 'FOR ALL COLUMNS SIZE AUTO', cascade => TRUE);
exec dbms_stats.gather_schema_stats('OUTLN',options=>'GATHER', estimate_percent => DBMS_STATS.AUTO_SAMPLE_SIZE, method_opt => 'FOR ALL COLUMNS SIZE AUTO', cascade => TRUE);
exec dbms_stats.gather_schema_stats('DBSNMP',options=>'GATHER', estimate_percent => DBMS_STATS.AUTO_SAMPLE_SIZE, method_opt => 'FOR ALL COLUMNS SIZE AUTO', cascade => TRUE);
exec dbms_stats.gather_schema_stats('SYSTEM',options=>'GATHER', estimate_percent => DBMS_STATS.AUTO_SAMPLE_SIZE, method_opt => 'FOR ALL COLUMNS SIZE AUTO', cascade => TRUE);
exec dbms_stats.gather_schema_stats('SYS',options=>'GATHER', estimate_percent => DBMS_STATS.AUTO_SAMPLE_SIZE, method_opt => 'FOR ALL COLUMNS SIZE AUTO', cascade => TRUE);
spool off