Incompatibilité des ODA X6-2 HA en version 12.1.2.9 avec les versions Oracle 11g R2

Dernièrement nous avons du installer une plate-forme Oracle Database Appliance X6-2 HA chez un de nos clients, le contexte était somme toute classique puisqu’il suffisait de migrer simplement si j’ose dire un cluster RAC 11.2.0.4 sous linux x86-64 vers cette appliance.

La solution retenue pour effectuer cette migration était de créer une base de secours sur l’appliance Oracle, ce qui nous permettait d’envisager en toute indépendance les tests de recette technique et de performance en avance de phase puis de planifier sereinement la bascule sur ce nouvel environnement lors de la mise en production.
Mais qu’elle ne fut pas ma surprise lorsque je découvrais que l’appliance ODA X6-2 HA en version 12.1.2.9.0 qui venait de sortir était incompatible avec les versions Oracle 11.2 !
L’origine du problème provient en fait du déploiement et de la création des groupes de disques ASM (DATA, REDO, RECO) qui attribue un mode de compatibilité pour les bases de données Oracle fixé à 12.1.0.2.
Alors, comment faire pour ne pas retarder le projet et pouvoir effectuer les tests de non régression obligatoires du fait de la montée en version en 12c, et cela sans impacter l’application d’origine ?
La seule solution était que notre appliance puisse accepter provisoirement une base de données Standby 11.2.0.4 à partir de laquelle nous allions pouvoir cloner une nouvelle base en 12c pour pouvoir effectuer nos tests de non régression.
En scrutant dans les scripts de déploiement des composants du cluster Grid Infrastructure, j’ai pu constater que l’attribut rdbms.compatible était initialisé à 12.1.0.2.0 pour les groupes de disques ASM. Encore faut-il délimiter les fichiers dans lesquels il faut apporter cette modification.
Par chance, ces fichiers sont peu nombreux et se trouvent tous dans le répertoire /opt/oracle/oak/onecmd . La liste est la suivante :

  1. GridSteps.pm
  2. runodaDg.pl
  3. asmapplconf_header_X6_2_ODA_HA_exp.txt
  4. asmapplconf_header_X6_2_ODA_HA_J2.txt
  5. asmapplconf_header_X6_2_ODA_HA.txt

Avant d’effectuer les modifications sur ces fichiers, il est prudent de conserver une sauvegarde de ceux-ci dans leur état initial, puis d’effectuer le déploiement des composants Oracle et la configuration ODA.

Remplacer les valeurs en rouge ou texte <span style="color: #ff0000;" par la version 11gR2 qui doit être obligatoirement être égale ou supérieure à la release 11.2.0.2
[root@easyteam01 onecmd]# grep -n compatible.rdbms GridSteps.pm
13383:  $str .= "-compatible.asm 12.1.0.2 -compatible.rdbms 11.2.0.2 " .
13886:    print REDO "attribute 'compatible.asm'='12.1.0.2', 'compatible.rdbms'='12.1.0.2','sector_size'='512','AU_SIZE'='4M','content.type'='redo','compatible.advm'='12.1.0.2';\n";
13889:    print REDO "attribute 'compatible.asm'='12.1.0.2', 'compatible.rdbms'='11.2.0.2','sector_size'='512','AU_SIZE'='4M','content.type'='redo','compatible.advm'='12.1.0.2';\n";
13987:    print RECO "attribute 'compatible.asm'='12.1.0.2', 'compatible.rdbms'='12.1.0.2','sector_size'='512','AU_SIZE'='4M','content.type'='recovery','compatible.advm'='12.1.0.2';\n";
13990:    print RECO "attribute 'compatible.asm'='12.1.0.2', 'compatible.rdbms'='11.2.0.2','sector_size'='512','AU_SIZE'='4M','content.type'='recovery','compatible.advm'='12.1.0.2';\n";
14116:      print REDO "attribute 'compatible.asm'='12.1.0.2', 'compatible.rdbms'='12.1.0.2','sector_size'='512','AU_SIZE'='4M','content.type'='data','compatible.advm'='12.1.0.2';\n";
14119:      print REDO "attribute 'compatible.asm'='12.1.0.2', 'compatible.rdbms'='11.2.0.2','sector_size'='512','AU_SIZE'='4M','content.type'='data','compatible.advm'='12.1.0.2';\n";
14418:      MsgPrint("I", "Setting compatible.rdbms to 12.1.0.2 for all diskgroups, "
14422:      MsgPrint("I", "Setting compatible.rdbms to 11.2.0.2 for all diskgroups, "
[root@easyteam01 onecmd]# grep -n rdbms runodaDg.pl
147:     $createdgsql .= " attribute 'compatible.asm'='12.1.0.2','compatible.rdbms'='12.1.0.2','AU_SIZE'='4M','content.type'='data'";
150:     $createdgsql .= " attribute 'compatible.asm'='12.1.0.2','compatible.rdbms'='11.2.0.2','AU_SIZE'='4M','content.type'='data'";
[root@easyteam01 onecmd]# grep -n rdbms asm*ODA_HA*
asmapplconf_header_X6_2_ODA_HA_exp.txt:14:attr rdbms_compatibility    12.1.0.2
asmapplconf_header_X6_2_ODA_HA_J2.txt:14:attr rdbms_compatibility    12.1.0.2
asmapplconf_header_X6_2_ODA_HA.txt:14:attr rdbms_compatibility    12.1.0.2

Maintenant, vous pouvez effectuer votre déploiement en toute tranquillité et vérifier que les groupes de disques ASM disposent des bons attributs.

# oakcli deploy
[root@easyteam01 onecmd]# su - grid
[grid@easyteam01 ~]$ asmcmd
ASMCMD> lsattr -G DATA -l
Name                        Value
access_control.enabled      FALSE
access_control.umask        066
appliance._partnering_type  ODA FIXED
appliance.mode              TRUE
appliance.name              ODA
au_size                     4194304
cell.smart_scan_capable     FALSE
cell.sparse_dg              allnonsparse
compatible.advm             12.1.0.2
compatible.asm              12.1.0.2.0
compatible.rdbms            11.2.0.2.0
content.check               FALSE
content.type                data
disk_repair_time            3.6h
failgroup_repair_time       24.0h
idp.boundary                auto
idp.type                    dynamic
logical_sector_size         512
phys_meta_replicated        true
sector_size                 512
thin_provisioned            FALS

Ne pas oublier, lorsque vous avez migré votre base de données en 12c et que vous ne désirez plus héberger d’autres bases de données autre que la 12c, de basculer le mode de compatibilité en 12.1.0.2. dans ASM

[root@easyteam01 onecmd]# su - grid
[grid@easyteam01 ~]$ asmcmd
ALTER DISKGROUP DATA SET ATTRIBUTE 'compatible.rdbms' = '12.1';
ALTER DISKGROUP REDO SET ATTRIBUTE 'compatible.rdbms' = '12.1';
ALTER DISKGROUP RECO SET ATTRIBUTE 'compatible.rdbms' = '12.1';

Bien garder à l’esprit qu’il ne s’agit que d’un contournement temporaire pour pallier les restrictions de l’ODA X6-2 HA et que cette configuration ne peut pas être pérenne.