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.
On voit bien que les diskgroups contenus dans les LUN’s ASM présentées sont reconnus mais pas montés.
On choisit de monter DGDATA.
Puis on monte DGFRA
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.sqlArgument 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 = 0catctl.pl version: 12.1.0.2.0
Oracle Base = /app/oracleAnalyzing 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) ONLINEora.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.