background success stories

Migration Oracle 11g vers 12c avec déplacement des LUN’s ASM d’un cluster à un autre

Comment déplacer une ou plusieurs grosses bases de données d’un environnement cluster RAC à un autre, dans le cadre d’un renouvellement d’infrastructure par exemple, avec ou pas une migration vers la version supérieure?

Ici le cluster RAC source est en version 11.2.0.4 avec deux diskgroups ASM DGDATA et DGFRA sur lesquels se trouvent une base de données en cluster SETRA.

Mon cluster RAC cible est en version 12.1.0.2 sans diskgroups puisque nous allons les ramener de l’ancien cluster mais il pourrait tout à fait y en avoir déjà créés avec des bases actives dessus (à condition de faire attention aux noms des disques et des diskgroups évidemment !)

 

Pour commencer, il faut copier pour se simplifier la vie plus tard les fichiers suivants sur le rac cible : initSETRA.ora (à créer si besoin) et le fichier de mot de passe orapwSETRA.

SQL> create pfile=’/tmp/initSETRA.ora’ from spfile;
Fichier créé.

 

Dans cet exemple, on va migrer à la volée la base SETRA dès son arrivée sur le serveur cible. Il faut donc préalablement de passer le script de pré-upgrade de 11 vers 12 avant.

On copie les scripts suivant de l’ Oracle Home de la cible vers le cluster source : /app/oracle/product/12.1.0.2/db_1/rdbms/admin/preupgrd.sql et /app/oracle/product/12.1.0.2/db_1/rdbms/admin/utluppkg.sql

Il faut passer ces scripts sur la ou les bases à déplacer.

 

SQL> @preupgrd.sql
Loading Pre-Upgrade Package…
***************************************************************************
Executing Pre-Upgrade Checks in SETRA…
**************************************************************************
====>> ERRORS FOUND for SETRA <<====
The following are *** ERROR LEVEL CONDITIONS *** that must be addressed
prior to attempting your upgrade.
Failure to do so will result in a failed upgrade.
You MUST resolve the above errors prior to upgrade
************************************************************
====>> PRE-UPGRADE RESULTS for SETRA <<====
ACTIONS REQUIRED:
1. Review results of the pre-upgrade checks:
/app/oracle/cfgtoollogs/SETRA/preupgrade/preupgrade.log
2. Execute in the SOURCE environment BEFORE upgrade:
/app/oracle/cfgtoollogs/SETRA/preupgrade/preupgrade_fixups.sql
3. Execute in the NEW environment AFTER upgrade:
/app/oracle/cfgtoollogs/SETRA/preupgrade/postupgrade_fixups.sql
************************************************************
Pre-Upgrade Checks in SETRA Completed.
***************************************************************************
SQL>

 

Ici nous n’avons pas d’actions correctives à faire, mais dans le cas où le script vous remonterait des choses à corriger, faites-le.

On a donc une base en cluster prête à migrer (ci-dessous les ressources cluster associées) :

ora.setra.db             database          11.2.0.4.0  ONLINE on rac11204-1 (SETRA1)  ONLINE
ONLINE on rac11204-2 (SETRA2)  ONLINE

 

Coté RAC source, on voit que l’on a les disques ASM suivants :

[root@rac11204-2 tmp]# oracleasm listdisks
DSKDATA_RAC_SOURCE_01
DSKFRA_RAC_SOURCE_01
DSKOCRVOTING
[root@rac11204-2 tmp]#

 

Nous allons arrêter le RAC source et dé-présenter les deux LUN’s ASM correspondant à DSKDATA_RAC_SOURCE_01 et DSKFRA_RAC_SOURCE_01 pour les présenter aux deux nœuds de notre RAC cible.

 

On relance sur ces deux nœuds, le scan à chaud des LUN’s ASM.

[root@rac-test-12C1 ~]# oracleasm scandisks
Reloading disk partitions: done
Cleaning any stale ASM disks…
Scanning system for ASM disks…
Instantiating disk « DSKDATA_RAC_SOURCE_01 »
Instantiating disk « DSKFRA_RAC_SOURCE_01 »
[root@rac-test-12C1 ~]#

[root@rac-test-12C2 ~]# oracleasm scandisks
Reloading disk partitions: done
Cleaning any stale ASM disks…
Scanning system for ASM disks…
Instantiating disk « DSKDATA_RAC_SOURCE_01 »
Instantiating disk « DSKFRA_RAC_SOURCE_01 »
[root@rac-test-12C2 ~]#

 

Nos nouvelles LUN’s ASM remontent bien sans souci particulier.

Nous allons lancer l’utilitaire ASMCA pour monter les diskgroups en mode graphique.

asmca1

 

On voit bien que les diskgroups contenus dans les LUN’s ASM présentées sont reconnus mais pas montés.

asmca2

 

On choisit de monter DGDATA.

asmca3

asmca4

asmca5

 

Puis on monte DGFRA

asmca6

 

On peut également faire cette manipulation avec sqlplus en se connectant à l’instance ASM du nœud et en montant les diskgroups en ligne de commandes.

Une fois les diskgroups montés, on va pouvoir penser à démarrer la base.

 

On va copier le fichier initSETRA.ora et orapwSETRA dans les deux Oracle Home des deux nœuds du cluster.

oracle@rac-test-12C1 /app>cp -p initSETRA.ora /app/oracle/product/12.1.0.2/db_1/dbs/initSETRA1.ora
oracle@rac-test-12C1 /app>scp initSETRA.ora  oracle@192.168.0.62:/app/oracle/product/12.1.0.2/db_1/dbs/initSETRA2.ora
initSETRA.ora                                                                                     100% 1466     1.4KB/s   00:00
oracle@rac-test-12C1 /app>cp -p orapwSETRA1 /app/oracle/product/12.1.0.2/db_1/dbs/
oracle@rac-test-12C1 /app>scp orapwSETRA1 oracle@192.168.0.62:/app/oracle/product/12.1.0.2/db_1/dbs/orapwSETRA2
orapwSETRA1                                                                                       100% 1536     1.5KB/s   00:00
oracle@rac-test-12C1 /app>

 

Éditer les fichiers $ORACLE_HOME/dbs/initSETRA1.ora et $ORACLE_HOME/dbs/initSETRA2.ora pour modifier/vérifier les paramètres suivants :

remote_listener : il doit pointer sur la scan du nouveau cluster

sga_target : doit être au minimum de 1044M mais un petit peu plus ne nuit pas.

Jusqu’à la fin de la migration, il faut également passer la base en mode exclusive en changeant la valeur du paramètre cluster_database à false.

 

On peut donc démarrer la base :

SQL> startup upgrade exclusive
ORACLE instance started.
Total System Global Area 1593835520 bytes
Fixed Size                  2924880 bytes
Variable Size             989859504 bytes
Database Buffers          587202560 bytes
Redo Buffers               13848576 bytes
Base de donnees montee.
Base de donnees ouverte.
SQL>

Si vous avez des erreurs sur d’autres paramètres, il suffit de modifier manuellement le fichier $ORACLE_HOME/dbs/initSETRA1.ora pour positionner les bonnes valeurs.

 

Nous allons pouvoir migrer la base 11.2.04 en 12.1.0.2.

oracle@rac-test-12C1 /app/oracle/product/12.1.0.2/db_1/dbs/rdbms/admin>
oracle@rac-test-12C1 /app/oracle/product/12.1.0.2/db_1/rdbms/admin>$ORACLE_HOME/perl/bin/perl catctl.pl -n 6 -l $ORACLE_HOME/diagnostics catupgrd.sql

Argument list for [catctl.pl]
SQL Process Count     n = 6
SQL PDB Process Count N = 0
Input Directory       d = 0
Phase Logging Table   t = 0
Log Dir               l = /app/oracle/product/12.1.0.2/db_1/diagnostics
Script                s = 0
Serial Run            S = 0
Upgrade Mode active   M = 0
Start Phase           p = 0
End Phase             P = 0
Log Id                i = 0
Run in                c = 0
Do not run in         C = 0
Echo OFF              e = 1
No Post Upgrade       x = 0
Reverse Order         r = 0
Open Mode Normal      o = 0
Debug catcon.pm       z = 0
Debug catctl.pl       Z = 0
Display Phases        y = 0
Child Process         I = 0

catctl.pl version: 12.1.0.2.0
Oracle Base           = /app/oracle

Analyzing file catupgrd.sql
Log files in /app/oracle/product/12.1.0.2/db_1/diagnostics
catcon: ALL catcon-related output will be written to /app/oracle/product/12.1.0.2/db_1/diagnostics/catupgrd_catcon_28255.lst
catcon: See /app/oracle/product/12.1.0.2/db_1/diagnostics/catupgrd*.log files for output generated by scripts
catcon: See /app/oracle/product/12.1.0.2/db_1/diagnostics/catupgrd_*.lst files for spool files, if any
Number of Cpus        = 1
SQL Process Count     = 6

——————————————————
Phases [0-73]
Serial   Phase #: 0 Files: 1     Time: 124s
Serial   Phase #: 1 Files: 5     Time: 46s
Restart  Phase #: 2 Files: 1     Time: 0s
Parallel Phase #: 3 Files: 18    Time: 22s
Restart  Phase #: 4 Files: 1     Time: 0s
Serial   Phase #: 5 Files: 5     Time: 23s
Serial   Phase #: 6 Files: 1     Time: 13s
Serial   Phase #: 7 Files: 4     Time: 9s
Restart  Phase #: 8 Files: 1     Time: 0s
Parallel Phase #: 9 Files: 62    Time: 90s
Restart  Phase #:10 Files: 1     Time: 0s
Serial   Phase #:11 Files: 1     Time: 16s
Restart  Phase #:12 Files: 1     Time: 1s
Parallel Phase #:13 Files: 91    Time: 21s
Restart  Phase #:14 Files: 1     Time: 0s
Parallel Phase #:15 Files: 111   Time: 43s
Restart  Phase #:16 Files: 1     Time: 0s
Serial   Phase #:17 Files: 3     Time: 2s
Restart  Phase #:18 Files: 1     Time: 0s
Parallel Phase #:19 Files: 32    Time: 59s
Restart  Phase #:20 Files: 1     Time: 0s
Serial   Phase #:21 Files: 3     Time: 8s
Restart  Phase #:22 Files: 1     Time: 0s
Parallel Phase #:23 Files: 23    Time: 149s
Restart  Phase #:24 Files: 1     Time: 0s
Parallel Phase #:25 Files: 11    Time: 100s
Restart  Phase #:26 Files: 1     Time: 1s
Serial   Phase #:27 Files: 1     Time: 0s
Restart  Phase #:28 Files: 1     Time: 0s
Serial   Phase #:30 Files: 1     Time: 0s
Serial   Phase #:31 Files: 257   Time: 24s
Serial   Phase #:32 Files: 1     Time: 0s
Restart  Phase #:33 Files: 1     Time: 0s
Serial   Phase #:34 Files: 1     Time: 6s
Restart  Phase #:35 Files: 1     Time: 0s
Restart  Phase #:36 Files: 1     Time: 1s
Serial   Phase #:37 Files: 4     Time: 64s
Restart  Phase #:38 Files: 1     Time: 0s
Parallel Phase #:39 Files: 13    Time: 98s
Restart  Phase #:40 Files: 1     Time: 0s
Parallel Phase #:41 Files: 10    Time: 20s
Restart  Phase #:42 Files: 1     Time: 0s
Serial   Phase #:43 Files: 1     Time: 8s
Restart  Phase #:44 Files: 1     Time: 0s
Serial   Phase #:45 Files: 1     Time: 6s
Serial   Phase #:46 Files: 1     Time: 1s
Restart  Phase #:47 Files: 1     Time: 0s
Serial   Phase #:48 Files: 1     Time: 0s
Restart  Phase #:49 Files: 1     Time: 0s
Serial   Phase #:50 Files: 1     Time: 1s
Restart  Phase #:51 Files: 1     Time: 0s
Serial   Phase #:52 Files: 1     Time: 0s
Restart  Phase #:53 Files: 1     Time: 0s
Serial   Phase #:54 Files: 1     Time: 107s
Restart  Phase #:55 Files: 1     Time: 0s
Serial   Phase #:56 Files: 1     Time: 67s
Restart  Phase #:57 Files: 1     Time: 1s
Serial   Phase #:58 Files: 1     Time: 0s
Restart  Phase #:59 Files: 1     Time: 1s
Serial   Phase #:60 Files: 1     Time: 0s
Restart  Phase #:61 Files: 1     Time: 0s
Serial   Phase #:62 Files: 1     Time: 1s
Restart  Phase #:63 Files: 1     Time: 0s
Serial   Phase #:64 Files: 1     Time: 3s
Serial   Phase #:65 Files: 1 Calling sqlpatch with LD_LIBRARY_PATH=/app/oracle/product/12.1.0.2/db_1/lib; export LD_LIBRARY_PATH;/app/oracle/product/12.1.0.2/db_1/perl/bin/perl -I /app/oracle/product/12.1.0.2/db_1/rdbms/admin -I /app/oracle/product/12.1.0.2/db_1/rdbms/admin/../../sqlpatch /app/oracle/product/12.1.0.2/db_1/rdbms/admin/../../sqlpatch/sqlpatch.pl -verbose -upgrade_mode_only > /app/oracle/product/12.1.0.2/db_1/diagnostics/catupgrd_datapatch_upgrade.log 2> /app/oracle/product/12.1.0.2/db_1/diagnostics/catupgrd_datapatch_upgrade.err
returned from sqlpatch
Time: 26s
Serial   Phase #:66 Files: 1     Time: 28s
Serial   Phase #:68 Files: 1     Time: 0s
Serial   Phase #:69 Files: 1 Calling sqlpatch with LD_LIBRARY_PATH=/app/oracle/product/12.1.0.2/db_1/lib; export LD_LIBRARY_PATH;/app/oracle/product/12.1.0.2/db_1/perl/bin/perl -I /app/oracle/product/12.1.0.2/db_1/rdbms/admin -I /app/oracle/product/12.1.0.2/db_1/rdbms/admin/../../sqlpatch /app/oracle/product/12.1.0.2/db_1/rdbms/admin/../../sqlpatch/sqlpatch.pl -verbose > /app/oracle/product/12.1.0.2/db_1/diagnostics/catupgrd_datapatch_normal.log 2> /app/oracle/product/12.1.0.2/db_1/diagnostics/catupgrd_datapatch_normal.err
returned from sqlpatch
Time: 80s
Serial   Phase #:70 Files: 1     Time: 134s
Serial   Phase #:71 Files: 1     Time: 0s
Serial   Phase #:72 Files: 1     Time: 0s
Serial   Phase #:73 Files: 1     Time: 27s
Grand Total Time: 1433s
LOG FILES: (catupgrd*.log)
Upgrade Summary Report Located in:
/app/oracle/product/12.1.0.2/db_1/cfgtoollogs/SETRA/upgrade/upg_summary.log
Grand Total Upgrade Time:    [0d:0h:23m:53s]

oracle@rac-test-12C1 /app/oracle/product/12.1.0.2/db_1/rdbms/admin>

 

Post upgrade du catalogue, la base est arrêtée, nous allons la redémarrer et passer les derniers scripts de migration.

SQL> startup
ORACLE instance started.
Total System Global Area 1593835520 bytes
Fixed Size                  2924880 bytes
Variable Size             989859504 bytes
Database Buffers          587202560 bytes
Redo Buffers               13848576 bytes
Base de donnees montee.
Base de donnees ouverte.
SQL>@utlu121s.sql
Procedure PL/SQL terminee avec succes.
Procedure PL/SQL terminee avec succes.
CATCTL REPORT = /app/oracle/product/12.1.0.2/db_1/cfgtoollogs/SETRA/upgrade/upg_summary.log
Procedure PL/SQL terminee avec succes.
Oracle Database 12.1 Post-Upgrade Status Tool           06-29-2016 11:07:12
Component                               Current         Version  Elapsed Time
Name                                    Status          Number   HH:MM:SS
Oracle Server                          UPGRADED      12.1.0.2.0  00:15:53
Oracle Real Application Clusters          VALID      12.1.0.2.0  00:00:02
Oracle Workspace Manager                  VALID      12.1.0.2.0  00:01:04
Oracle XML Database                       VALID      12.1.0.2.0  00:01:45
Final Actions                                                    00:00:54
Post Upgrade                                                     00:02:11
Total Upgrade Time: 00:21:58
Procedure PL/SQL terminee avec succes.
SQL>

 

Il ne reste plus qu’à passer les scripts suivants pour terminer la mise à jour de la base.

@catuppst.sql et @?/rdbms/admin/utlrp (recompilation des objets)

 

On va vérifier le statut des composants de la base

Component
Name                                Version       Status
———————————– ————- ———–
Oracle XML Database                 12.1.0.2.0    VALID
Oracle Workspace Manager            12.1.0.2.0    VALID
Oracle Database Catalog Views       12.1.0.2.0    VALID
Oracle Database Packages and Types  12.1.0.2.0    VALID
Oracle Real Application Clusters    12.1.0.2.0    VALID

 

Nous devons remettre la base en mode clusterisé avant de l’intégrer comme ressource dans le cluster.

Arrêt de l’instance et remise à true du paramètre cluster_database dans le fichier $ORACLE_HOME/dbs/initSETRA1.ora.

On en profite également pour changer le paramètre compatible de la base de la valeur « 11.2.0.4.0 » à la valeur « 12.1.0.2.0 ».

On créé maintenant le spfile « définitif ».

create spfile=’+DGDATA/SETRA/spfileSETRA.ora’ from pfile;

 

On créé deux fichiers initSETRA1.ora et initSETRA2.ora respectivement dans $OH/dbs sur chaque noeud avec la ligne suivante : SPFILE=’+DGDATA/SETRA/spfileSETRA.ora’

On redémarre l’instance pour vérifier que tout fonctionne.

SQL> startup
ORACLE instance started.
Total System Global Area 1593835520 bytes
Fixed Size                  2924880 bytes
Variable Size            1073745584 bytes
Database Buffers          503316480 bytes
Redo Buffers               13848576 bytes
Base de donnees montee.
Base de donnees ouverte.
SQL>
SQL> show parameter spfile
NAME                                 TYPE        VALUE
———————————— ———– ——————————
spfile                               string      +DGDATA/SETRA/initsetra.ora
SQL>

 

On peut maintenant tester le démarrage de la deuxième instance sur le deuxième noeud.

Attention : Pensez à vérifier la présence des répertoires d’audit et autres sinon vous aurez une erreur au démarrage.

On arrête ensuite manuellement les deux instances et on rajoute la base dans la configuration cluster.

oracle@rac-test-12C1 />srvctl add database -d SETRA -o /app/oracle/product/12.1.0.2/db_1 -p ‘+DGDATA/SETRA/spfileSETRA.ora’ -y AUTOMATIC
oracle@rac-test-12C1 />
oracle@rac-test-12C1 />srvctl add instance -i SETRA1 -d SETRA -n rac-test-12C1
oracle@rac-test-12C1 />srvctl add instance -i SETRA2 -d SETRA -n rac-test-12C2

 

On peut voir les nouvelles ressources dans le crsstat

ora.setra.db             database          SERVER_POOLS=ora.SETRA   ONLINE on rac-test-12c1 (SETRA1)  ONLINE
on rac-test-12c2 (SETRA2)  ONLINE

ora.DGFRA.dg             diskgroup         diskgroup                ONLINE on rac-test-12c1           ONLINE
ONLINE on rac-test-12c2           ONLINE
ora.DGDATA.dg          diskgroup         diskgroup              ONLINE on rac-test-12c1           ONLINE
ONLINE on rac-test-12c2           ONLINE

 

Notre base SETRA est passée d’un cluster RAC 11gr2 vers un cluster RAC 12c avec montée de version en quelques manipulations. Si vous pouvez il ne vous reste plus qu’à tester un reboot des nœuds, et à réouvrir votre application.