HOW TO : Oracle RAC : Déplacement OCR – Voting – ASM SPFILE sur New DISKGROUP ASM

Lors d’une installation de Oracle RAC 11GR2, il y a la partie ASM où l’on doit configurer le DISKGROUP qui sera créée en vue de stocker différents éléments nécessaires au fonctionnement du cluster, à savoir la registry (OCR), le voting et le spfile de l’instance ASM.

Dans la configuration de cette partie j’ai laissé le nom du diskgroup ASM à sa valeur par défaut : DATA, alors que j’ai utilisé un disk ASM labellisé « OCR »

[oracle@rac1 ~]$ oracleasm listdisks
OCR
[oracle@rac1 ~]$ oracleasm querydisk -v -d OCR
Disk "OCR" is a valid ASM disk on device [8,21]
[oracle@rac1 ~]$ ls -l /dev/oracleasm/disks/OCR
brw-rw---- 1 oracle dba 8, 21 Jun 16 19:26 /dev/oracleasm/disks/OCR

Sauf qu’au final j’aime quand c’est clair, je vais donc l’appeler OCR pour y stocker ma registry et mon voting, pour correspondre ainsi au label OracleASM.
L’idée est donc de déplacer tout cela dans un second diskgroup ASM, pour ensuite renommer le diskgroup DATA en OCR.

Tout d’abord, quelques vérifications de base, histoire de savoir ce que nous avons :

Informations sur le VOTING :

[root@RAC2 export]# /oracle/product/11.2.0/grid/bin/crsctl query css votedisk
## STATE File Universal Id File Name Disk group
-- ----- ----------------- --------- ---------
1. ONLINE 924d1d9d1d124fd8bf9f457431a42ea4 (/dev/oracleasm/disks/OCR) [DATA]

Informations sur la Registry du Cluster « OCR » :

[root@RAC2 export]# /oracle/product/11.2.0/grid/bin/ocrcheck
Status of Oracle Cluster Registry is as follows :
Version : 3
Total space (kbytes) : 262120
Used space (kbytes) : 2668
Available space (kbytes) : 259452
ID : 1827476825
Device/File Name : +DATA
Device/File integrity check succeeded

Device/File not configured

Device/File not configured

Device/File not configured

Device/File not configured

Cluster registry integrity check succeeded

Logical corruption check succeeded

Informations sur le device ASM utilisé :

ASMCMD> lsdg
State Type Rebal Sector Block AU Total_MB Free_MB Req_mir_free_MB Usable_file_MB Offline_disks Voting_files Name
MOUNTED EXTERN N 512 4096 1048576 5130 4734 0 4734 0 Y DATA/

ASMCMD> lsdsk
Path
/dev/oracleasm/disks/OCR

En résumé j’ai donc là un seul Diskgroup ASM utilisé, nommé « DATA » qui correspond au disk ASM labellisé « OCR », qui héberge actuellement la Registry du cluster, ainsi que le Voting. Ma première étape sera donc de créer un second diskgroup ASM afin de pouvoir par la suite déplacer l’OCR et le VOTING.

SQL> select group_number,name from v$asm_diskgroup;

GROUP_NUMBER NAME
------------ ------------------------------
1 DATA
SQL> SELECT MOUNT_STATUS,HEADER_STATUS,MODE_STATUS,STATE,TOTAL_MB,FREE_MB,NAME,PATH,LABEL FROM V$ASM_DISK;

MOUNT_S HEADER_STATU MODE_ST STATE TOTAL_MB FREE_MB NAME PATH LABEL
------- ------------ ------- -------- ---------- ---------- ------------------------------ -------------------------------------------------- -------------------------------
CLOSED PROVISIONED ONLINE NORMAL 0 0 /dev/oracleasm/disks/DATA
CACHED MEMBER ONLINE NORMAL 5130 4734 DATA_0000 /dev/oracleasm/disks/OCR

Mon disque OracleASM labellisé « DATA » est bien disponible, je l’utilise pour créer un diskgroup ASM que je nomme « DATADG », en EXTERNAL REDUNDANCY

SQL> create diskgroup DATADG external redundancy disk '/dev/oracleasm/disks/DATA';
Diskgroup created.

SQL> SELECT MOUNT_STATUS,HEADER_STATUS,MODE_STATUS,STATE,TOTAL_MB,FREE_MB,NAME,PATH,LABEL FROM V$ASM_DISK;
MOUNT_S HEADER_STATU MODE_ST STATE TOTAL_MB FREE_MB NAME PATH LABEL
------- ------------ ------- -------- ---------- ---------- ------------------------------ -------------------------------------------------- -------------------------------
CACHED MEMBER ONLINE NORMAL 455663 455609 DATADG_0000 /dev/oracleasm/disks/DATA
CACHED MEMBER ONLINE NORMAL 5130 4734 DATA_0000 /dev/oracleasm/disks/OCR

ASMCMD> lsdg
State Type Rebal Sector Block AU Total_MB Free_MB Req_mir_free_MB Usable_file_MB Offline_disks Voting_files Name
MOUNTED EXTERN N 512 4096 1048576 5130 4734 0 4734 0 Y DATA/
MOUNTED EXTERN N 512 4096 1048576 455663 455609 0 455609 0 N DATADG/
ASMCMD> lsdsk
Path
/dev/oracleasm/disks/DATA
/dev/oracleasm/disks/OCR

[RAC1]/home/oracle[+ASM1]:crsctl stat res ora.DATADG.dg
NAME=ora.DATADG.dg
TYPE=ora.diskgroup.type
TARGET=ONLINE , OFFLINE
STATE=ONLINE on RAC1, OFFLINE

On identifie que sur le second node, mon nouveau diskgroup n’est pas vu :

SQL> SELECT MOUNT_STATUS,HEADER_STATUS,MODE_STATUS,STATE,TOTAL_MB,FREE_MB,NAME,PATH,LABEL FROM V$ASM_DISK;

MOUNT_S HEADER_STATU MODE_ST STATE TOTAL_MB FREE_MB NAME PATH LABEL
------- ------------ ------- -------- ---------- ---------- ------------------------------ -------------------------------------------------- -------------------------------
CLOSED MEMBER ONLINE NORMAL 0 0 /dev/oracleasm/disks/DATA
CACHED MEMBER ONLINE NORMAL 5130 4734 DATA_0000 /dev/oracleasm/disks/OCR

SQL> exit

[RAC2]/home/oracle[+ASM2]:crsctl stat res ora.DATADG.ora
CRS-2613: Could not find resource 'ora.DATADG.ora'.

Normal, un petit coup de start depuis notre noeud « principal » :

[RAC1]/home/oracle[+ASM1]: crsctl start res ora.DATADG.dg -n RAC2
CRS-2672: Attempting to start 'ora.DATADG.dg' on 'RAC2'
CRS-2676: Start of 'ora.DATADG.dg' on 'RAC2' succeeded

[RAC1]/home/oracle[+ASM1]:crsctl stat res ora.DATADG.dg
NAME=ora.DATADG.dg
TYPE=ora.diskgroup.type
TARGET=ONLINE , ONLINE
STATE=ONLINE on RAC1, ONLINE on RAC2

Good, donc seconde étape, déplacer l’OCR, et pour cela on va ajouter un second emplacement qui sera +DATADG :

[root@RAC1 database]# /oracle/product/11.2.0/grid/bin/ocrconfig -add +DATADG
PROT-30: The Oracle Cluster Registry location to be added is not usable
PROC-8: Cannot perform cluster registry operation because one of the parameters is invalid.
ORA-15056: additional error message
ORA-17502: ksfdcre:4 Failed to create file +DATADG.255.1
ORA-15221: ASM operation requires compatible.asm of 11.1.0.0.0 or higher
ORA-06512: at line 4

Oups, j’ai du creer le ASM DISKGROUP en compatible.asm 10.1 !

SQL> select name,ALLOCATION_UNIT_SIZE,STATE,COMPATIBILITY from v$asm_diskgroup ;
NAME ALLOCATION_UNIT_SIZE STATE COMPATIBILITY
------------------------------ -------------------- ----------- ------------------------------------------------------------
DATADG 1048576 MOUNTED 10.1.0.0.0
DATA 1048576 MOUNTED 11.2.0.0.0

Et oui, je suis tombé en plein dans le piege ! En RAC 11G, tous les nouveaux diskgroup ASM sont crées par défaut avec la compatibilité ASM en 10.1, ce qui n’a rien de gênant en soi, sauf pour y stocker notre OCR et Voting (oui, on ne peux stocker ça quand dans un diskgroup avec une compatibilité au minima 11.1.0, puisqu’il s’agit d’un Cluster 11G) !

Modifions donc cela :

SQL> alter diskgroup DATADG SET ATTRIBUTE 'compatible.asm' = '11.2.0.0.0';
Diskgroup altered.

SQL> select name,ALLOCATION_UNIT_SIZE,STATE,COMPATIBILITY from v$asm_diskgroup ;
NAME ALLOCATION_UNIT_SIZE STATE COMPATIBILITY
------------------------------ -------------------- ----------- ------------------------------------------------------------
DATADG 1048576 MOUNTED 11.2.0.0.0
DATA 1048576 MOUNTED 11.2.0.0.0

Relançons maintenant la commande précédente pour ajouter un emplacement à mon OCR :

[root@RAC1 database]# /oracle/product/11.2.0/grid/bin/ocrcheck
Status of Oracle Cluster Registry is as follows :
Version : 3
Total space (kbytes) : 262120
Used space (kbytes) : 2684
Available space (kbytes) : 259436
ID : 1827476825
Device/File Name : +DATA
Device/File integrity check succeeded

Device/File not configured

Device/File not configured

Device/File not configured

Device/File not configured

Cluster registry integrity check succeeded

Logical corruption check succeeded

[root@RAC1 database]# /oracle/product/11.2.0/grid/bin/ocrconfig -add +DATADG
[root@RAC1 database]# /oracle/product/11.2.0/grid/bin/ocrcheck
Status of Oracle Cluster Registry is as follows :
Version : 3
Total space (kbytes) : 262120
Used space (kbytes) : 2684
Available space (kbytes) : 259436
ID : 1827476825
Device/File Name : +DATA
Device/File integrity check succeeded
Device/File Name : +DATADG
Device/File integrity check succeeded

Device/File not configured

Device/File not configured

Device/File not configured

Cluster registry integrity check succeeded

Logical corruption check succeeded

Impeccable, maintenant supprimons l’ancien emplacement, de sorte à ce que l’OCR ne soit uniquement stocké que dans le disk DATADG :

[root@RAC1 database]# /oracle/product/11.2.0/grid/bin/ocrconfig -delete +DATA
[root@RAC1 database]# /oracle/product/11.2.0/grid/bin/ocrcheck
Status of Oracle Cluster Registry is as follows :
Version : 3
Total space (kbytes) : 262120
Used space (kbytes) : 2684
Available space (kbytes) : 259436
ID : 1827476825
Device/File Name : +DATADG
Device/File integrity check succeeded

Device/File not configured

Device/File not configured

Device/File not configured

Device/File not configured

Cluster registry integrity check succeeded

Logical corruption check succeeded

Ok, passons maintenant au Voting :

SQL> select adg.name, ad.disk_number, ad.header_status, ad.mode_status,
ad.path, ad.voting_file
from v$asm_diskgroup adg, v$asm_disk ad
where ad.voting_file='Y'
and adg.group_number = ad.group_number
order by ad.disk_number;

NAME DISK_NUMBER HEADER_STATU MODE_ST PATH V
------------------------------ ----------- ------------ ------- ---------------------------------------- -
DATA 0 MEMBER ONLINE /dev/oracleasm/disks/OCR Y

[RAC1]/home/oracle[+ASM1]:crsctl query css votedisk
## STATE File Universal Id File Name Disk group
-- ----- ----------------- --------- ---------
1. ONLINE 924d1d9d1d124fd8bf9f457431a42ea4 (/dev/oracleasm/disks/OCR) [DATA]
Located 1 voting disk(s).

Je vais directement déplacer, via la commande REPLACE, le voting :

[RAC1]/home/oracle[+ASM1]:crsctl replace votedisk +DATADG
Successful addition of voting disk aef4e6b7c55b4f3cbf11e09d5c3143f8.
Successful deletion of voting disk 924d1d9d1d124fd8bf9f457431a42ea4.
Successfully replaced voting disk group with +DATADG.
CRS-4266: Voting file(s) successfully replaced

[RAC1]/home/oracle[+ASM1]:crsctl query css votedisk
## STATE File Universal Id File Name Disk group
-- ----- ----------------- --------- ---------
1. ONLINE aef4e6b7c55b4f3cbf11e09d5c3143f8 (/dev/oracleasm/disks/DATA) [DATADG]
Located 1 voting disk(s).

Parfait, on vérifie cependant sur ASM :

[RAC1]/home/oracle[+ASM1]:sqlplus / as sysasm
SQL> select adg.name, ad.disk_number, ad.header_status, ad.mode_status,
ad.path, ad.voting_file
from v$asm_diskgroup adg, v$asm_disk ad
where ad.voting_file='Y'
and adg.group_number = ad.group_number
order by ad.disk_number; 2 3 4 5 6

NAME DISK_NUMBER HEADER_STATU MODE_ST PATH V
------------------------------ ----------- ------------ ------- -------------------------------------------------- -
DATADG 0 MEMBER ONLINE /dev/oracleasm/disks/DATA Y

On tient le bon bout, il ne reste maintenant qu’à s’occuper des 2 instances ASM car son spfile est également stocké dans le diskgroup DATA.

SQL> sho parameter pfile;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
spfile string +DATA/clust2/asmparameterfile/registry.253.914670117

SQL> create pfile='/tmp/asminit.ora' from spfile;
File created.

SQL> create spfile='+DATADG' from pfile='/tmp/asminit.ora';
File created.

A ce stade, les instance ASM utilisent toujours le SPFILE qui est sur le diskgroup DATA, il faut donc faire un A/R d’ASM pour que les instances utilisent le nouveau spfile.
On peut cependant s’assurer que le spfile qui sera utilisé est bien celui dans +DATADG :


[RAC1]/oracle/product/11.2.0/grid/dbs[+ASM1]:asmcmd spget
+DATADG/clustdatacly2/asmparameterfile/registry.253.914689389

On fait donc un A/R d’ASM, et on vérifie que le Spfile est bien au bon endroit


[root@RAC1 database]# /oracle/product/11.2.0/grid/bin/crsctl stop crs

[root@RAC1 database]# /oracle/product/11.2.0/grid/bin/crsctl start crs

Une fois le cluster de nouveau UP, une petite vérification :

SQL> sho parameter pfile
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
spfile string +DATADG/clustdatacly2/asmparameterfile/registry.253.914689389

Ok, on peut désormais démonter le diskgroup DATA, en vue de le renommer :

SQL> alter diskgroup data dismount ;
Diskgroup altered.

[RAC1]/home/oracle[+ASM1]:crsctl stat res ora.DATA.dg
NAME=ora.DATA.dg
TYPE=ora.diskgroup.type
TARGET=OFFLINE, OFFLINE
STATE=OFFLINE, OFFLINE

Go pour renommer le diskgroup :

[RAC1]/home/oracle[+ASM1]:renamedg dgname=DATA newdgname=OCR asm_diskstring='/dev/oracleasm/disks/*' verbose=true
NOTE: No asm libraries found in the system

Parsing parameters..

Parameters in effect:

Old DG name : DATA
New DG name : OCR
Phases :
Phase 1
Phase 2
Discovery str : /dev/oracleasm/disks/*
Clean : TRUE
Raw only : TRUE
renamedg operation: dgname=DATA newdgname=OCR asm_diskstring=/dev/oracleasm/disks/* verbose=true
Executing phase 1
Discovering the group
Performing discovery with string:/dev/oracleasm/disks/*
Identified disk UFS:/dev/oracleasm/disks/OCR with disk number:0 and timestamp (33036811 117883904)
Checking for hearbeat...
Re-discovering the group
Performing discovery with string:/dev/oracleasm/disks/*
Identified disk UFS:/dev/oracleasm/disks/OCR with disk number:0 and timestamp (33036811 117883904)
Checking if the diskgroup is mounted or used by CSS
Checking disk number:0
Generating configuration file..
Completed phase 1
Executing phase 2
Looking for /dev/oracleasm/disks/OCR
Modifying the header
Completed phase 2
Terminating kgfd context 0x7ff8759030a0

Impeccable, on monte le diskgroup :

[RAC1]/home/oracle[+ASM1]:sqlplus / as sysasm

SQL> alter diskgroup OCR mount;
Diskgroup altered.

[RAC1]/home/oracle[+ASM1]:crsctl stat res ora.OCR.dg
NAME=ora.OCR.dg
TYPE=ora.diskgroup.type
TARGET=ONLINE , OFFLINE
STATE=ONLINE on RAC1, OFFLINE

[RAC1]/home/oracle[+ASM1]:crsctl stat res ora.DATA.dg
NAME=ora.DATA.dg
TYPE=ora.diskgroup.type
TARGET=OFFLINE, OFFLINE
STATE=OFFLINE, OFFLINE

Ici, on visualise d’une part que le diskgroup OCR n’est pas monté sur le second node, et qu’il reste l’ancien Diskgroup DATA visible du CRS.

Pour que le diskgroup OCR soit monté sur le second node, soit on démarre la ressource cluster, soit on fait un MOUNT du diskgroup depuis l’instance ASM du second noeud.

Pour cette fois, j’aime bien les commabdes donc je passe par ASM :

[RAC2]/home/oracle[+ASM2]:sqlplus / as sysasm

SQL> alter diskgroup OCR mount ;
Diskgroup altered.

[RAC2]/home/oracle[+ASM2]:crsctl stat res ora.OCR.dg
NAME=ora.OCR.dg
TYPE=ora.diskgroup.type
TARGET=ONLINE , ONLINE
STATE=ONLINE on RAC1, ONLINE on RAC2

On supprime maintenant l’ancienne ressource cluster du diskgroup DATA :

[RAC1]/home/oracle[+ASM1]:crsctl delete res ora.DATA.dg
[RAC1]/home/oracle[+ASM1]:crsctl stat res ora.DATA.dg
CRS-2613: Could not find resource 'ora.DATA.dg'.

on vérifie sur le second noeud, histoire d’être sur :


[RAC2]/home/oracle[+ASM2]:crsctl stat res ora.DATA.dg
CRS-2613: Could not find resource 'ora.DATA.dg'.

Une vérification coté ASM :

SQL> SELECT MOUNT_STATUS,HEADER_STATUS,MODE_STATUS,STATE,TOTAL_MB,FREE_MB,NAME,PATH,LABEL FROM V$ASM_DISK;

MOUNT_S HEADER_STATU MODE_ST STATE TOTAL_MB FREE_MB NAME PATH LABEL
——- ———— ——- ——– ———- ———- —————————— ————————————————– ——————————-
CACHED MEMBER ONLINE NORMAL 455663 455263 DATADG_0000 /dev/oracleasm/disks/DATA
CACHED MEMBER ONLINE NORMAL 5130 4766 DATA_0000 /dev/oracleasm/disks/OCR

Ok nous avons donc maintenant des diskgroup ASM quasi cohérent, en effet, il me manque le renommage du disk asm « DATA_0000 » qui doit se nommer « OCR_0000« .

Mais là, pour le renommer, il n’y a pas trente six solutions que j’ai pu identifier :
– Soit on migre en RAC ASM 12c car depuis cette relase, ASM offre la possibilité de renommer directement les disks d’un Diskgroup « alter diskgroup DATADG rename disk OLD to NEW » ou encore «  alter diskgroup DATADG rename disks all« ,
– Soit on casse le DISKGROUP, et on le refait correctement (ce qui sous entend qu’une partie de ce que j’ai fait jusque la serait alors inutile, quoique intéressante cependant..)

Etant joueur et dans un contexte de test, je refait le diskgroup.

Démontage du diskgroup OCR sur les 2 nodes :

SQL> alter diskgroup OCR dismount ;
Diskgroup altered.

Ensuite :

SQL> drop diskgroup OCR force including contents;
Diskgroup dropped.

On vire la ressource cluster :

[RAC2]/home/oracle[+ASM2]:crsctl stat res ora.OCR.dg
NAME=ora.OCR.dg
TYPE=ora.diskgroup.type
TARGET=OFFLINE, OFFLINE
STATE=OFFLINE, OFFLINE

[RAC2]/home/oracle[+ASM2]:crsctl delete res ora.OCR.dg

On passe à la création du diskgroup, avec directement la compatibilité ASM en 11.2 histoire d’éviter les surprises quand je vais rebasculer mes fichiers.

SQL> create diskgroup OCR external redundancy disk '/dev/oracleasm/disks/OCR' attribute 'compatible.asm'='11.2.0.0.0';
Diskgroup created.

SQL> SELECT MOUNT_STATUS,HEADER_STATUS,MODE_STATUS,STATE,TOTAL_MB,FREE_MB,NAME,PATH,LABEL FROM V$ASM_DISK;

MOUNT_S HEADER_STATU MODE_ST STATE TOTAL_MB FREE_MB NAME PATH LABEL
------- ------------ ------- -------- ---------- ---------- ------------------------------ -------------------------------------------------- -------------------------------
CACHED MEMBER ONLINE NORMAL 455663 455263 DATADG_0000 /dev/oracleasm/disks/DATA
CACHED MEMBER ONLINE NORMAL 5130 5078 OCR_0000 /dev/oracleasm/disks/OCR

[RAC1]/home/oracle[+ASM1]:crsctl stat res ora.OCR.dg
NAME=ora.OCR.dg
TYPE=ora.diskgroup.type
TARGET=ONLINE , OFFLINE
STATE=ONLINE on RAC1, OFFLINE

On monte le diskgroup sur le second noeud, ou bien on démarre la ressource cluster qui lui est liée. Pour cette seconde fois, je fait un start de la ressource :

[RAC1]/home/oracle[+ASM1]:crsctl start res ora.OCR.dg -n RAC2
CRS-2672: Attempting to start 'ora.OCR.dg' on 'RAC2'
CRS-2676: Start of 'ora.OCR.dg' on 'RAC2' succeeded
[RAC1]/home/oracle[+ASM1]:crsctl stat res ora.OCR.dg
NAME=ora.OCR.dg
TYPE=ora.diskgroup.type
TARGET=ONLINE , ONLINE
STATE=ONLINE on RAC1, ONLINE on RAC2

Et voila, il ne me reste plus qu’a remettre l’OCR, le voting et enfin le spfile ASM dans ce nouveau diskgroup OCR , afin que cela soit indépendant du groupe de disque DATADG, qui lui hébergera de la Database.

Enjoy !

Micka

Laisser un commentaire