Voyage vers l'Oracle Database 12c, épisode 3: Migration

Dans le dernier épisode nous avons vu comment les décors ont été montés, la scène validée et étalonnée. Maintenant il s’agit de passer à l’action, le ciel nous attends!  Attacher votre ceinture , tenez vous bien en arrière sur votre siège, c’est le décollage !

Notre première objectif sera d’utiliser le pilotage automatique avec l’assistant « dbua » (Database Upgrade Assistant) , il y a de vrais avantages à prendre cette option :

  • Tout est fait par l’outil , pas de risque d’oubli d’une étape ou d’erreur suite à une faute de frappe;
    la mise à jour du fichier oratab est faite automatiquement ,  le nouvel ORACLE_HOME y est positionné;
  • Le fichier de configuration réseau tnsnames.ora est mise à jour ;
  •  la nouvelle console d’administration est construite pour vous;
  •  Il peut être exécuter en mode complètement silencieux , pas d’interrogation pas d’interface graphique à configurer sur vos serveurs;
  • Certaines opérations peuvent se déclencher en parallèle pour plus de rapidité d’exécution, limitant la durée d’indisponibilité de votre base.

Voici la procédure pour réaliser l’opération et certains points de vérification :

  • Contenu du fichier /etc/oratab avant la migration :
ora112:/u01/app/oracle/product/11.2.0.3:N
  • Vérification de la présence et fonctionnement de la base source de la migration
SQL> select * from v$version ;
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
PL/SQL Release 11.2.0.3.0 - Production
CORE    11.2.0.3.0      Production
TNS for Linux: Version 11.2.0.3.0 - Production
NLSRTL Version 11.2.0.3.0 - Production
  •  Configurer  le bon environnement, ici celui de la version cible (12c)
$ export ORACLE_HOME=/u01/app/oracle/product/12.1.0.1
$ export PATH=$ORACLE_HOME/bin:$PATH
  • Démarrer l’assistant et réaliser la migration en une seule fois
$dbua -silent -sid ora112 -oracleHome /u01/app/oracle/product/11.2.0.3
Log files for the upgrade operation are located at: /u01/app/oracle/cfgtoollogs/dbua/ora112/upgrade16
Performing Pre Upgrade
4% complete
20% complete
Performing RDBMS Upgrade
20% complete
…/…
39% complete
40% complete
Performing Post Upgrade
42% complete
44% complete
60% complete
Configuring Database with Enterprise Manager
62% complete
64% complete
80% complete
Generating Summary
Database upgrade has been completed successfully, and the database is ready to use.
100% complete
Check the log file "/u01/app/oracle/cfgtoollogs/dbua/logs/silent.log_1375282039360" for upgrade details.

Et voila ! 73  minutes plus tard vous voici dans les nuages avec une base en version 12c.
Rien de plus simple.
Regardons en détail les fichiers journaux générés pour se rendre compte du travail effectué:
Tout d’abord le fichier  principal silent.log_nnnnnnnnnnnn

[oracle@easydirtech bin]$ ls -ltr /u01/app/oracle/cfgtoollogs/dbua/logs/silent.log_1375282039360
-rw-r-----. 1 oracle oinstall 3557 Jul 31 12:01 /u01/app/oracle/cfgtoollogs/dbua/logs/silent.log_1375282039360
[oracle@easydirtech bin]$cat /u01/app/oracle/cfgtoollogs/dbua/logs/silent.log_1375282039360
Upgrading the database dbName="ora112"
Database contains schemas with objects dependent on DBMS_LDAP package. Refer to the Oracle Database Upgrade Guide for instructions to configure Network ACLs.
Database contains INVALID objects prior to upgrade. The list of invalid SYS/SYSTEM objects was written to registry$sys_inv_objs. The list of non-SYS/SYSTEM objects was written to registry$nonsys_inv_objs unless there were over 5000. Use utluiobj.sql after the upgrade to identify any new invalid objects due to the upgrade.
Supported upgrade version check succeeded.
The oratab permission check succeeded.
Oracle Home Owner Check succeeded.
Database does not use ASM storage.
Space usage summary
Space usage reason:  Upgrade
Tablespace Name:  SYSTEM
Additional space required:  507 MB
Datafile:  /u01/app/oracle/oradata/ora112/system01.dbf
Auto Extensible:  Yes
Tablespace Name:  SYSAUX
Additional space required:  905 MB
Datafile:  /u01/app/oracle/oradata/ora112/sysaux01.dbf
Auto Extensible:  Yes
Tablespace Name:  UNDOTBS1
Additional space required:  250 MB
Datafile:  /u01/app/oracle/oradata/ora112/undotbs01.dbf
Auto Extensible:  Yes
Tablespace Name:  TEMP
Additional space required:  0 MB
Datafile:  /u01/app/oracle/oradata/ora112/temp01.dbf
Auto Extensible:  Yes
Tablespace Name:  EXAMPLE
Additional space required:  0 MB
Datafile:  /u01/app/oracle/oradata/ora112/example01.dbf
Auto Extensible:  Yes
Space usage reason: Log and Trace files
Directory:  /u01/app/oracle/cfgtoollogs/dbua/ora112/upgrade16
Required space:  160 MB
Space usage reason: Archive Logs and Flashback Logs
Fast Recovery Area:  /u01/app/oracle/fast_recovery_area
Estimated space required:  0 MB
Disk space usage summary
/u01/ has enough space. Required space is 1822 MB , available space is 11186 MB.
Performing Pre Upgrade
UPGRADE_PROGRESS : 4%
UPGRADE_PROGRESS : 20%
Performing RDBMS Upgrade
UPGRADE_PROGRESS : 20%
…/…
UPGRADE_PROGRESS : 39%
UPGRADE_PROGRESS : 40%
Performing Post Upgrade
UPGRADE_PROGRESS : 42%
UPGRADE_PROGRESS : 44%
UPGRADE_PROGRESS : 60%
Configuring Database with Enterprise Manager
UPGRADE_PROGRESS : 62%
UPGRADE_PROGRESS : 64%
UPGRADE_PROGRESS : 80%
Generating Summary
UPGRADE_PROGRESS : 100%
Database upgrade has been completed successfully, and the database is ready to use.
The following document describes important behavioral changes from previous database releases:
/u01/app/oracle/product/12.1.0.1/assistants/dbua/doc/DefaultBehaviorChanges_<NLS_LANG>.html

L’outil rejoue systématiquement  les tests de vérification.
Pour information, le script utluiobj.sql (présent depuis la version 11.1) peut être utilisé pour comparer les objets invalides avant et après le processus de migration. Cela m’a déjà sauvé la mise en tant que consultant pour prouver que ce n’est pas la migration qui a ajouté ces 2000 objets invalides !
A chaque exécution de l’assistant un nouveau répertoire est créé avec dessous l’ensemble des fichiers trace :

[oracle@easydirtech oracle]$ cd /u01/app/oracle/cfgtoollogs/dbua/ora112/upgrade16
[oracle@easydirtech upgrade16]$ ls -ltr
total 256392
-rw-r-----. 1 oracle oinstall         0 Jul 31 10:47 trace.log.lck
-rw-r-----. 1 oracle oinstall      4382 Jul 31 10:47 upgrade.xml
-rw-r-----. 1 oracle oinstall      6632 Jul 31 10:47 PreUpgradeResults.html
-rw-r-----. 1 oracle oinstall       947 Jul 31 10:48 PreUpgrade.log
-rw-r-----. 1 oracle oinstall         0 Jul 31 10:48 Oracle_Text.log
-rw-r-----. 1 oracle oinstall   5653116 Jul 31 11:47 catupgrd3.log
-rw-r-----. 1 oracle oinstall   5105060 Jul 31 11:47 catupgrd2.log
-rw-r-----. 1 oracle oinstall   4769539 Jul 31 11:47 catupgrd1.log
-rw-r-----. 1 oracle oinstall 246483416 Jul 31 11:47 catupgrd0.log
-rw-r-----. 1 oracle oinstall    152599 Jul 31 11:50 Oracle_Server.log
-rw-r-----. 1 oracle oinstall     10275 Jul 31 12:01 PostUpgrade.log
-rw-r-----. 1 oracle oinstall      5658 Jul 31 12:01 UpgradeResults.html
-rw-r-----. 1 oracle oinstall    213195 Jul 31 12:01 trace.log
-rw-r-----. 1 oracle oinstall     86291 Jul 31 12:01 sqls.log

Les 4 fichiers catuprgd0.log à catpugrd3.log ainsi que le fichier maitre Oracle_Server.log montre que  l’opération à utiliser un degré de parallélisme de 4 qui est la valeur par défaut.
Si pour une raison quelconque, vous ne souhaitez pas de parallélisme , il faut positionner un degré de « un » au lancement de l’outil, en voici un exemple d’usage :

[oracle@easydirtech ~]$ time dbua -silent -sid ora112 -oracleHome /u01/app/oracle/product/11.2.0.3 -upgrade_parallelism 1

Les fichiers catupgrdn.log n’existent plus, Oracle_server.log contient l’ensemble des informations sur les actions réalisées. Regardons de plus près la répartition du temps passé par étape :

Component                               Current         Version  Elapsed Time
Name                                    Status          Number   HH:MM:SS
.
Oracle Server                            UPGRADED      12.1.0.1.0  00:13:04
JServer JAVA Virtual Machine                VALID      12.1.0.1.0  00:02:46
Oracle Workspace Manager                    VALID      12.1.0.1.0  00:01:16
OLAP Analytic Workspace                     VALID      12.1.0.1.0  00:00:32
Oracle OLAP API                             VALID      12.1.0.1.0  00:00:27
Oracle XDK                                  VALID      12.1.0.1.0  00:00:46
Oracle Text                                 VALID      12.1.0.1.0  00:00:51
Oracle XML Database                         VALID      12.1.0.1.0  00:04:18
Oracle Database Java Packages               VALID      12.1.0.1.0  00:00:17
Oracle Multimedia                           VALID      12.1.0.1.0  00:02:40
Spatial                                     VALID      12.1.0.1.0  00:05:49
Oracle Application Express                  VALID     4.2.0.00.27  00:22:32
Final Actions                                                      00:02:07
Total Upgrade Time: 00:57:54

La durée des opérations de post upgrade n’est pas noté ici, mais on voit  d’après ces traces qu’en série le traitement a été aussi rapide ( 1h00) et que la partie la plus importante est la mise à jour de la version d’APEX en plus de 22 minutes.
Ayant en tête le fait que pendant cette heure notre application est indisponible, voyons s’il est possible de diminuer cette fenêtre.
Je régénère ma configuration de départ (restauration de la base et des fichiers de configurations dans leur version d’origine)  et j’augmente les caractéristiques de ma machine virtuelle en passant de 2 à  6 vCPU (une simple modification et redémarrage avec Oracle VM Manager) .
Pour utiliser mes 6 cpus en parallèle , la  mise à jour devient :

[oracle@easydirtech ~]$ time dbua -silent -sid ora112 -oracleHome /u01/app/oracle/product/11.2.0.3 -upgrade_parallelism 6
Log files for the upgrade operation are located at: /u01/app/oracle/cfgtoollogs/dbua/ora112/upgrade17
Performing Pre Upgrade
4% complete
20% complete
Performing RDBMS Upgrade
20% complete
20% complete
../…
39% complete
39% complete
40% complete
Performing Post Upgrade
42% complete
44% complete
60% complete
Configuring Database with Enterprise Manager
62% complete
64% complete
80% complete
Generating Summary
Database upgrade has been completed successfully, and the database is ready to use.
100% complete
Check the log file "/u01/app/oracle/cfgtoollogs/dbua/logs/silent.log_1377001183880" for upgrade details.
real    69m52.873s
user    0m26.307s
sys     0m8.848s

Même durée, pas d’impact ! pas d’activité suffisamment importante à parallélisée.
Ce ne serait sans doute pas le cas pour votre base de données composée de beaucoup plus d’objets que la mienne.
Vous pourrez en tout cas essayer, vous avez maintenant la méthode.
Regardons de plus près les autres résultats consécutifs à la mise à jour:

  • La version de la base a été mise à jour dans le fichier oratab;
ora112:/u01/app/oracle/product/12.1.0.1:N
  • Une entrée spécifique a été créée  dans le fichier tnsnames.ora pour la base ora112 et son listener, elle est utilisée par la déclaration « local_listener » du paramétrage de la base.
LISTENER_ORA112 =
(ADDRESS = (PROTOCOL = TCP)(HOST = easydirtech.easyteam.fr)(PORT = 1521))
ORA112 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = easydirtech.easyteam.fr)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = ora112)
)
)

Concentrons nous maintenant sur les différences entre version  dans les arguments et options utilisables avec l’assistant de migration « dbua » .
Voici le résultat de la commande « diff »  entre les deux sorties de l’aide (version 11.2 comparer à la version 12.1) :

[oracle@easydirtech ~]$ diff /tmp/dbua112 /tmp/dbua121
8a9
>     [-auditFileDest <Specify Database Audit File Destination > ]
24,28c25
<     [-sysauxTablespace
<            -datafileName <Specify the complete path of datafile for creating SYSAUX tablespace.>
<            -datafileSize <Specify the size of datafile for creating SYSAUX tablespace {500M, 10G}.> ]
<            -datafileSizeNext <Specify the next extent for the datafile.> ]
<            -datafileSizeMax <Specify the max size of datafile.> ]
---
>     [-preUpgradeScripts <Specify a comma separated list of SQL scripts with their complete pathnames. These scripts will be executed before the upgrade.> ]
29a27
>     [-ignoreScriptErrors <Specify this flag for ignoring ORA errors during custom scripts> ]
31a30,32
>     [-changeUserTablespacesReadOnly <Change user tablespaces read only for the duration of the upgrade.> ]
>     [-gatheringStatistics <Gathering statistics before upgrade database.> ]
>     [-upgrade_parallelism <Specify number of CPU's to be used for parallel upgrade> ]
36,43d36
<     [-emConfiguration <CENTRAL|LOCAL|ALL|NONE>
<            -dbsnmpPassword<DBSNMP user password>
<            -sysmanPassword<SYSMAN user password>
<            -asmPassword<SYS password for ASM instance>
<            -hostUserName<Host user name for EM backup job>
<            -hostUserPassword<Host user password for EM backup job>
<            -backupSchedule <Daily backup schedule in the form of hh:mm>]
<           [-centralAgent <Enterprise Manager central agent location>]]
45a39,49
>     [-emConfiguration <DBEXPRESS|CENTRAL|BOTH|NONE>]
>       -dbsnmpPassword < DBSNMP user password>
>       [-omsHost < EM management server host name>
>        -omsPort < EM management server port number>
>        -emUser < EM Admin username to add or modify targets>
>        -emPassword < EM Admin user password>]
>     [-createGRP <To create a guaranteed restore point when database is in archive log and flashback mode> ]
>     [-useGRP <To restore the database using specified guaranteed restore point> ]
>     [-useExistingBackup <To restore database using existing RMAN backup> ]
>     [-listeners <To register the database with existing listeners, specify listeners by comma separated listenerName:Oracle Home. Listeners from lower release home are migrated to newer release home. Specifying  -listeners lsnrName1,lsnrName2, DBUA searches specified listeners from GI home (if configured), target home and source home.> ]
>     [-createListener <To create a listener in newer release Oracle home specify listenrName:lsnrPort> ]

Le caractère ‘<‘  en début de ligne correspond aux informations de la version 11.2,  ‘>’ est associé à la version 12.1.   On constate maintenant :

  • Absence  de spécification pour le tablespace SYSAUX , forcément présent dans la version de départ;
  • Sécurisation pour l’application avec la possibilité de passer les tablespaces utilisateurs en mode lecture seule pendant le traitement de mise à jour;
  • Changement pour la configuration de la console de gestion puisque DBEXPRESS remplace LOCAL dans les choix;
  • Possibilité de collecter les statistiques avant la mise à jour;
  • Options de parallélisation comme nous avons pu le voir;
  • Création de point spécifique de restauration, pour revenir plus facilement en arrière;
  • Création d’un nouveau listener dédié à la base migrée et enregistrement de la base avec ce listener.

 
Migration en mode manuel
Nous avons vu que c’était très simple d’utiliser l’assistant et que c’est vraiment du pilotage automatique, mais quelles sont nos options si on souhaite avoir plus de contrôle sur les étapes de la migration ?
Reprenons depuis le début ( restauration de l’ancienne version de la base de données de mes tests)  et déroulons maintenant le scénario manuel en utilisant le script SQL fourni :

  • Nettoyage

Pour repartir des conditions initiales, il est nécessaire de faire le ménage dans certains fichiers du répertoire ORACLE_HOME de la version 12.1, suite au déroulement des actions précédentes (suppression des fichiers spfile et orapwd,  retour arrière sur la configuration oratab listener.ora).
Garder bien en tête que toutes les étapes sont nécessaires, un oubli ou une erreur peuvent impliquer un retour en arrière d’où un délai supplémentaire si vous êtes en production.

  • Arrêt complet

La première action consiste en un arrêt propre de la base de données ora112, les applications associées sont elles aussi arrêtées. En cas de transaction ou de rollback en cours, il vous faudra attendre.

[oracle@easydirtech ~]$ . oraenv
ORACLE_SID = [ora121] ? ora112     -->  switch environnement to 11.2 ORACLE_HOME
The Oracle base remains unchanged with value /u01/app/oracle
[oracle@easydirtech ~]$ echo $ORACLE_HOME
/u01/app/oracle/product/11.2.0.3
[oracle@easydirtech ~]$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.3.0 Production on Fri Aug 23 05:37:53 2013
Copyright (c) 1982, 2011, Oracle.  All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> create pfile='/home/oracle/initora112.ora' from spfile ;   -->  In case we need pfile for safety
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL>

Arrêter aussi le listener pour être certain de ne pas avoir de connexion non souhaitée. Sur ma configuration de test le listener est celui de la version 12.1 sur le port standard , attention au votre !

[oracle@easydirtech ~]$ . oraenv
ORACLE_SID = [oracle] ? ora121
[oracle@easydirtech ~]$ lsnrctl stop
LSNRCTL for Linux: Version 12.1.0.1.0 - Production on 23-AUG-2013 05:35:53
Copyright (c) 1991, 2013, Oracle.  All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
The command completed successfully
  • Démarrage en mode upgrade

Faciliter vous la vie pour la mise en place des variables d’environnement et configurer le fichier /etc/oratab avec la configuration de la nouvelle version;  attention a bien avoir les droits pour modifier le fichier (propriétaire: le compte root).
Définir l’environnement et démarrer la base dans le mode migration….
Stop!
il nous faut un fichier de paramètre !!
Impossible d’utiliser le spfile de  la version précédente, sinon il y a occurrence de l’erreur SP2-0714.
Je vais donc utiliser le fichier spfile créé par anticipation précédemment.
Si vous ne l’avez pas fait , rappelez vous que le fichier alert.log de la base contient toutes les informations qu’il faut pour en construire un.

SQL> startup upgrade spfile='/u01/app/oracle/product/11.2.0.3/dbs/spfileora112.ora' ;
SP2-0714: invalid combination of STARTUP options
SQL> startup upgrade pfile='/home/oracle/initora112.ora' ;
ORACLE instance started.
Total System Global Area 1252663296 bytes
Fixed Size                  2287864 bytes
Variable Size             822085384 bytes
Database Buffers          419430400 bytes
Redo Buffers                8859648 bytes
Database mounted.
Database opened.
SQL>exit

Dans cette procédure, la différence avec la version précédente est l’utilisation du fichier de commande perl catctl.pl et non plus un appel direct à catupgrd.sql. Ceci pour pouvoir profiter de la parallélisation des différentes étapes.
Voyons le contenu du fichier :

NAME
#      catctl.pl - CATalog ConTroL PerL program
#
#    DESCRIPTION
#      This perl program processes sqlplus files and organizes
#      them for parallel processing based on annotations within
#      the files.
#
#    NOTES
#      Used by catupgrd shell/bat scripts to run parallel upgrades
#      Connects to database specified by ORACLE_SID environment variable

Plusieurs options d’appel sont possibles, on en obtient la description en appelant la commande sans en préciser aucune:

[oracle@easydirtech ~]$ cd $ORACLE_HOME/rdbms/admin
[oracle@easydirtech admin]$ $ORACLE_HOME/perl/bin/perl catctl.pl
Usage: catctl [-u username] [-n processes] [-d directory]
[-t table] [-l directory] [-s script]
[-e] [-i] [-c] filename
Supported Options:
-u username (prompts for password)
-n the number of processes to use for parallel operations (default 4)
-d directory containing the files to be run
-t table name for phase logging
-l directory to use for spool log files
-s SQL script to initialize sessions
-e sets echo off while running the scripts
-p restart phase (skip successful phases on a rerun)
-i identifier to use when creating spool log files
-y display phases only

Si pour une raison quelconque l’usage du perl vous incommode,  le script catupgrd.sql peut être appeler de manière classique, sans le parallélisme:

@catpugrd.sql PARALLEL=NO

L’usage est décrit en début du fichier:

em    NAME
Rem      catupgrd.sql - CATalog UPGraDe to the new release
Rem
Rem    DESCRIPTION
Rem     This script is to be used for upgrading a 9.2, 10.1 or 10.2
Rem     database to the new release.  This script provides a direct
Rem     upgrade path from these releases to the new Oracle release.
Rem
Rem      The upgrade is partitioned into the following 5 stages:
Rem        STAGE 1: call the "i" script for the oldest supported release:
Rem                 This loads all tables that are necessary
Rem                 to perform basic DDL commands for the new release
Rem        STAGE 2: call utlip.sql to invalidate PL/SQL objects
Rem        STAGE 3: Determine the original release and call the
Rem                 c0x0x0x0.sql for the release.  This performs all
Rem                 necessary dictionary upgrade actions to bring the
Rem                 database from the original release to new release.
../…
######################################################################
######################################################################
NOTE
The catupgrd.sql is being deprecated in the 12.1 release of the
Oracle Database.  Customers are encouraged to use catctl.pl as
the replacement for catupgrd.sql when upgrading the database dictionary.
cd $ORACLE_HOME/rdbms/admin
$ORACLE_HOME/perl/bin/perl catctl.pl -n 4 catupgrd.sql
Refer to the Oracle Database Upgrade Guide for more information.
This database upgrade procedure must be called with the following
argument when invoking from the SQL prompt:
@catupgrd.sql PARALLEL=NO
  • L’heure de la mise à jour

Procédons maintenant à la migration, la trace est verbeuse :

[oracle@easydirtech admin]$ time $ORACLE_HOME/perl/bin/perl catctl.pl catupgrd.sql
Analyzing file catupgrd.sql
14 scripts found in file catupgrd.sql
Next path: catalog.sql
32 scripts found in file catalog.sql
Next path: catproc.sql
37 scripts found in file catproc.sql
Next path: catptabs.sql
61 scripts found in file catptabs.sql
Next path: catpdbms.sql
205 scripts found in file catpdbms.sql
Next path: catpdeps.sql
77 scripts found in file catpdeps.sql
Next path: catpprvt.sql
260 scripts found in file catpprvt.sql
Next path: catpexec.sql
26 scripts found in file catpexec.sql
Next path: cmpupgrd.sql
16 scripts found in file cmpupgrd.sql

et se termine comme ci-dessous, avec le temps agrégé par ma commande « time » (durée similaire à celle prise par le dbua)  :

*** WARNING: ERRORS FOUND DURING UPGRADE ***
Due to errors found during the upgrade process, the post
upgrade actions in catuppst.sql have not been automatically run.
*** THEREFORE THE DATABASE UPGRADE IS NOT YET COMPLETE ***
1. Evaluate the errors found in the upgrade logs (*.log) and determine the proper action.
2. Execute the post upgrade script as described in Chapter 3 of the Database Upgrade Guide.
     Time: 226s
Grand Total Time: 3612s
real    60m11.795s
user    0m23.185s
sys     0m1.352s
  • Analyse Post mise à jour

Pour analyser et évaluer les erreurs , ce n’est pas la peine d’aller chercher dans les fichiers journaux, le script utlu121s.sql  (qui appelle utlusts.sql – Utility Upgrade Status) résume  les informations de dba_registry_log et de registry$ pour vous.
Avant de l’exécuter, il ne faut pas oublier que la base de donnée est laissée arrêtée à la fin du perl, il faut donc la rouvrir, sans oublier qu’il n’y pas encore de fichier spfile.

SQL> startup pfile='/home/oracle/initora112.ora'
SQL> @utlu121s.sql
Oracle Database 12.1 Post-Upgrade Status Tool           08-23-2013 08:17:47
Component                               Current         Version  Elapsed Time
Name                                    Status          Number   HH:MM:SS
Oracle Server                          UPGRADED      12.1.0.1.0  00:11:39
JServer JAVA Virtual Machine              VALID      12.1.0.1.0  00:02:59
Oracle Workspace Manager                  VALID      12.1.0.1.0  00:01:53
OLAP Analytic Workspace                   VALID      12.1.0.1.0  00:00:35
Oracle OLAP API
.   SP2-0310: unable to open file "xoqsys.sql"
.   ORA-01917: user or role "OLAPSYS" does not exist
.   ORA-00942: table or view does not exist
.   ORA-00942: table or view does not exist
.   ORA-00942: table or view does not exist
.   ORA-00942: table or view does not exist
.   ORA-00942: table or view does not exist
.                                         VALID      12.1.0.1.0  00:00:27
Oracle XDK                                VALID      12.1.0.1.0  00:00:46
Oracle Text                               VALID      12.1.0.1.0  00:00:55
Oracle XML Database                       VALID      12.1.0.1.0  00:04:21
Oracle Database Java Packages             VALID      12.1.0.1.0  00:00:17
Oracle Multimedia                         VALID      12.1.0.1.0  00:02:28
Spatial                                   VALID      12.1.0.1.0  00:05:59
Oracle Application Express                VALID     4.2.0.00.27  00:23:37
Final Actions                                                    00:03:25
Total Upgrade Time: 00:59:47
PL/SQL procedure successfully completed.

Les seules erreurs concernent l’API OLAP , dont la suppression est déjà traitée ici, le reste est valide continuons :

  • Actions Post mise à jour

La dernière étape de notre procédure manuelle est le passage du script catupsst.sql.  Si aucune erreur n’est détectée, il est déclenché automatiquement,  cette étape est alors incluse dans la précédente.

Rem    NAME
Rem      catuppst.sql - CATalog UPgrade PoST-upgrade actions
Rem
Rem    DESCRIPTION
Rem      This post-upgrade script performs remaining upgrade actions that
Rem      do not require that the database be open in UPGRADE mode.
Rem      Automatically apply the latest PSU.

Voici le résultat de son exécution :

SQL> @?/rdbms/admin/catuppst.sql 
Session altered.
Session altered.
Session altered.
TIMESTAMP
--------------------------------------------------------------------------------
COMP_TIMESTAMP POSTUP_BGN 2013-08-23 08:29:13
TIMESTAMP
--------------------------------------------------------------------------------
COMP_TIMESTAMP CATREQ_BGN 2013-08-23 08:29:13
PL/SQL procedure successfully completed.
catrequtlmg: b_StatEvt     = TRUE
catrequtlmg: b_SelProps    = FALSE
catrequtlmg: b_UpgradeMode = FALSE
catrequtlmg: b_InUtlMig    = FALSE
PL/SQL procedure successfully completed.
PL/SQL procedure successfully completed.
TIMESTAMP
--------------------------------------------------------------------------------
COMP_TIMESTAMP CATREQ_END 2013-08-23 08:29:13
catuppst: Dropping library DBMS_DDL_INTERNAL_LIB
PL/SQL procedure successfully completed.
catuppst: Dropping view _CURRENT_EDITION_OBJ_MIG
PL/SQL procedure successfully completed.
catuppst: Dropping view _ACTUAL_EDITION_OBJ_MIG
PL/SQL procedure successfully completed.
PL/SQL procedure successfully completed.
This script will migrate the Baseline data on a pre-11g database
to the 11g database.
...                                       ...
... Completed Moving the Baseline Data    ...
...                                       ...
... If there are no Move BL Data messages ...
... above, then there are no renamed      ...
... baseline tables in the system.        ...
...                                       ...
...                                       ...
... Completed the Dropping of the         ...
... Renamed Baseline Tables               ...
...                                       ...
... If there are no Drop Table messages   ...
... above, then there are no renamed      ...
... baseline tables in the system.        ...
...                                       ...
PL/SQL procedure successfully completed.
PL/SQL procedure successfully completed.
0 rows created.
Commit complete.
Table created.
2 rows created.
1 row updated.
2 rows updated.
0 rows updated.
Table dropped.
Commit complete.
0 rows updated.
Commit complete.
0 rows updated.
Commit complete.
0 rows updated.
Commit complete.
0 rows created.
Commit complete.
0 rows created.
Commit complete.
PL/SQL procedure successfully completed.
PL/SQL procedure successfully completed.
PL/SQL procedure successfully completed.
PL/SQL procedure successfully completed.
catuppst: Gathering fixed objects stats now...
catuppst: Gathering fixed objects stats done.
PL/SQL procedure successfully completed.
TIMESTAMP
--------------------------------------------------------------------------------
COMP_TIMESTAMP POSTUP_END 2013-08-23 08:31:30
PL/SQL procedure successfully completed.
Session altered.
PL/SQL procedure successfully completed.
PL/SQL procedure successfully completed.
PL/SQL procedure successfully completed.
Generating apply and rollback scripts...
Check the following file for errors:
/u01/app/oracle/cfgtoollogs/catbundle/catbundle_PSU_ORA112_GENERATE_2013Aug23_08_31_37.log
Apply script: /u01/app/oracle/product/12.1.0.1/rdbms/admin/catbundle_PSU_ORA112_APPLY.sql
Rollback script: /u01/app/oracle/product/12.1.0.1/rdbms/admin/catbundle_PSU_ORA112_ROLLBACK.sql
PL/SQL procedure successfully completed.
Executing script file...
SQL> alter session set "_ORACLE_SCRIPT" = true;
Session altered.
SQL> COLUMN spool_file NEW_VALUE spool_file NOPRINT
SQL> SELECT '/u01/app/oracle/cfgtoollogs/catbundle/' || 'catbundle_PSU_' || name || '_APPLY_' || TO_CHAR(SYSDATE, 'YYYYMonDD_hh24_mi_ss', 'NLS_DATE_LANGUAGE=''AMERICAN''') || '.log' AS spool_file FROM v$database;
SQL> SPOOL &spool_file
SQL> exec dbms_registry.set_session_namespace('SERVER')
PL/SQL procedure successfully completed.
SQL> ALTER SESSION SET current_schema = SYS;
Session altered.
SQL> PROMPT Updating registry...
Updating registry...
SQL> INSERT INTO registry$history
  2    (action_time, action,
  3     namespace, version, id,
  4     bundle_series, comments)
  5  VALUES
  6    (SYSTIMESTAMP, 'APPLY',
  7     SYS_CONTEXT('REGISTRY$CTX','NAMESPACE'),
  8     '12.1.0.1',
  9     0,
10     'PSU',
11     'Patchset 12.1.0.0.0');
1 row created.
SQL> COMMIT;
Commit complete.
SQL> SPOOL off
SQL> SET echo off
Check the following log file for errors:
/u01/app/oracle/cfgtoollogs/catbundle/catbundle_PSU_ORA112_APPLY_2013Aug23_08_31_38.log
Session altered.
Session altered.
Currently our database is now upgraded to release 12.1.0.1
Check with :
SQL>select comp_id,comp_name,version,status from dba_registry ;
COMP_ID         COMP_NAME                                VERSION                        STATUS
--------------- ---------------------------------------- ------------------------------ --------------------------------------------
APEX            Oracle Application Express               4.2.0.00.27                    VALID
OWB             OWB                                      11.2.0.3.0                     VALID
SDO             Spatial                                  12.1.0.1.0                     VALID
ORDIM           Oracle Multimedia                        12.1.0.1.0                     VALID
XDB             Oracle XML Database                      12.1.0.1.0                     VALID
CONTEXT         Oracle Text                              12.1.0.1.0                     VALID
OWM             Oracle Workspace Manager                 12.1.0.1.0                     VALID
CATALOG         Oracle Database Catalog Views            12.1.0.1.0                     UPGRADED
CATPROC         Oracle Database Packages and Types       12.1.0.1.0                     UPGRADED
JAVAVM          JServer JAVA Virtual Machine             12.1.0.1.0                     VALID
XML             Oracle XDK                               12.1.0.1.0                     VALID
CATJAVA         Oracle Database Java Packages            12.1.0.1.0                     VALID
APS             OLAP Analytic Workspace                  12.1.0.1.0                     VALID
XOQ             Oracle OLAP API                          12.1.0.1.0                     VALID

C’est terminé nous avons grimpé pas à pas dans le cloud avec une version 12c !

  • Taches conseillées

Calcul des statistiques sur les objets du dictionnaire :

SQL> execute dbms_stats.gather_fixed_objects_stats;
PL/SQL procedure successfully completed.

Durée de 2 minutes sur ma configuration.
Recompilation (si possible) de tous les objets invalides :

SQL> @utlrp.sql
No Object or recompilation in error state ,   summary of the database objects :
...Database user "SYS", database schema "APEX_040200", user# "117" 09:31:13
...Compiled 0 out of 2998 objects considered, 0 failed compilation 09:31:14
...263 packages
...255 package bodies
...453 tables
...11 functions
...16 procedures
...3 sequences
...458 triggers
...1322 indexes
...207 views
...0 libraries
...6 types
...0 type bodies
...0 operators
...0 index types
...Begin key object existence check 09:31:14
...Completed key object existence check 09:31:14
...Setting DBMS Registry 09:31:14
...Setting DBMS Registry Complete 09:31:14
...Exiting validate 09:31:14

Ce qui prends 3 minutes supplémentaires
Il est temps de faire la comparaison entre les objets invalides avant et après la mise à jour.

SQL> @utluiobj.sql
Oracle Database 12.1 Post-Upgrade Invalid Objects Tool 08-23-2013 09:34:10
This tool lists post-upgrade invalid objects that were not invalid
prior to upgrade (it ignores pre-existing pre-upgrade invalid objects).
.
Owner                     Object Name                     Object Type
.
The table registry$sys_inv_objs does not exist. The pre-upgrade tool,
utlu111i.sql, creates and populates registry$sys_inv_objs. To use this
post-upgrade tool, you must have run utlu111i.sql prior to upgrading
the database.

Comme vous le voyez, je n’avais pas passer le script utlu111i.sql avant mon upgrade, d’où l’absence de résultat pertinent,  de votre coté n’oubliez pas cette étape !!

  • Finalisation

Mettez à jour le fichier /etc/oratab si ce n’est pas déjà fait.
Créer un fichier spfile :
Vérifier la configuration de votre listener, particulièrement s’il n’écoute pas sur le port standard 1521 :

SQL> show parameter listener
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
listener_networks                    string
local_listener                       string
remote_listener                      string

Dans ma configuration , le port d’écoute est le 1521 , donc pas de valeur, pas de configuration particulière.
Démarrer le listener, puis les applications. Enregistrer la base au listener pour qu’elle soit vue immédiatement :

SQL> !lsnrctl start
LSNRCTL for Linux: Version 12.1.0.1.0 - Production on 23-AUG-2013 09:41:02
Copyright (c) 1991, 2013, Oracle.  All rights reserved.
Starting /u01/app/oracle/product/12.1.0.1/bin/tnslsnr: please wait...
TNSLSNR for Linux: Version 12.1.0.1.0 - Production
System parameter file is /u01/app/oracle/product/12.1.0.1/network/admin/listener.ora
Log messages written to /u01/app/oracle/diag/tnslsnr/easydirtech/listener/alert/log.xml
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=easydirtech.easyteam.fr)(PORT=1521)))
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 12.1.0.1.0 - Production
Start Date                23-AUG-2013 09:41:02
Uptime                    0 days 0 hr. 0 min. 0 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /u01/app/oracle/product/12.1.0.1/network/admin/listener.ora
Listener Log File         /u01/app/oracle/diag/tnslsnr/easydirtech/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=easydirtech.easyteam.fr)(PORT=1521)))
The listener supports no services
The command completed successfully
SQL> alter system register ;
System altered.
SQL> !lsnrctl status
LSNRCTL for Linux: Version 12.1.0.1.0 - Production on 23-AUG-2013 09:41:20
Copyright (c) 1991, 2013, Oracle.  All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 12.1.0.1.0 - Production
Start Date                23-AUG-2013 09:41:02
Uptime                    0 days 0 hr. 0 min. 18 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /u01/app/oracle/product/12.1.0.1/network/admin/listener.ora
Listener Log File         /u01/app/oracle/diag/tnslsnr/easydirtech/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=easydirtech.easyteam.fr)(PORT=1521)))
Services Summary...
Service "ora112" has 1 instance(s).
  Instance "ora112", status READY, has 1 handler(s) for this service...
Service "ora112XDB" has 1 instance(s).
  Instance "ora112", status READY, has 1 handler(s) for this service...
The command completed successfully

Que reste t-il à faire maintenant ?
Configurer le port d’écoute pour la console d’administration : Database Express Console.
Vérifier que ce ‘ n’est pas encore le cas :

SQL> select dbms_xdb_config.gethttpport() from dual;
DBMS_XDB_CONFIG.GETHTTPPORT()
-----------------------------
                            0

Configurer l’écoute sur le port souhaité (ici 8080)

SQL> exec dbms_xdb_config.sethttpport(8080);
PL/SQL procedure successfully completed.
SQL> select dbms_xdb.gethttpport() from dual;
DBMS_XDB.GETHTTPPORT()
----------------------
                  8080

Il  y a alors une ligne d’écoute pour le listener SQLNET :

SQL> !lsnrctl status
LSNRCTL for Linux: Version 12.1.0.1.0 - Production on 23-AUG-2013 09:52:07
Copyright (c) 1991, 2013, Oracle.  All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 12.1.0.1.0 - Production
Start Date                23-AUG-2013 09:41:02
Uptime                    0 days 0 hr. 11 min. 4 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /u01/app/oracle/product/12.1.0.1/network/admin/listener.ora
Listener Log File         /u01/app/oracle/diag/tnslsnr/easydirtech/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=easydirtech.easyteam.fr)(PORT=1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=easydirtech.easyteam.fr)(PORT=8080))(Presentation=HTTP)(Session=RAW))
Services Summary...
Service "ora112" has 1 instance(s).
  Instance "ora112", status READY, has 1 handler(s) for this service...
Service "ora112XDB" has 1 instance(s).
  Instance "ora112", status READY, has 1 handler(s) for this service...
The command completed successfully

C’est tout ce que vous avez besoin pour accéder à Enterpise Manager Database Express 12c  à l’url :
http://yourhostname:8080/em/
Entrer un compte utilisateur de la base et son mot de passe pour commencer à travailler avec.
Voilà tout est bien et dans le meilleur des mondes vous êtes confiant que cette nouvelle version va améliorer ou moins maintenir le niveau des performances de votre application ! Restons réaliste et pas d’excès de confiance , vous effectuerez d’abord cette procédure sur un environnement de test ou de qualification, pour valider les aspects critiques de votre application (fonctionnalité et niveau de service) .
Cela se produira certainement dans un prochain épisode , ou nous retrouverons notre héros swingbench, restez à l’écoute.
 
 
 
 
 

1 réflexion sur “Voyage vers l'Oracle Database 12c, épisode 3: Migration”

  1. Bonjour,

    Qu’entendez-vous par « pas d’interface graphique à configurer sur vos serveurs » ?
    Il suffit d’installer un serveur X11 sur un autre hôte, par exemple VcXsrv sur un PC sous Windows, pour pouvoir déporter l’affichage des applications comme dbca ou dbua en mode graphique à travers le réseau.
    X11 est à la base conçu pour permettre cela.

    Cordialement.

Les commentaires sont fermés.