L'ASM nouveau : renamedg

Après les annonces de la grande messe Oracle, voici un tout petit article sur une toute petite commande pour ASM 11gR2 qui curieusement n’est pas intégré à asmcmd. Oracle a enfin implémenté en ligne de commande fonctionnalité réclamée par beaucoup : la possibilité de renommer un diskgroup ASM. Mon collègue s’était déjà frotté au problème en version 11.1 pour réaliser un clonage de diskgroup, voici la commande magique pour le faire : renamedg.
Sa syntaxe est particulière et m’a donné du fil à retordre, ci-dessous son expression exacte pour renommer le disque groupe TESTDG1 en ELDG1:

$ renamedg -dgname TESTDG1 -newdgname ELDG1 asm_diskstring='/dev/oracleasm/disks/*'
Parsing parameters..
renamedg operation: -dgname TESTDG1 -newdgname ELDG1 asm_diskstring=/dev/oracleasm/disks/*
Executing phase 1
Discovering the group
Checking for hearbeat...
Re-discovering the group
Generating configuration file..
Completed phase 1
Executing phase 2
Completed phase 2

le point important est la déclaration du paramètre asm_diskstring, sans lui, c’est le défaut qui est utilisé (qui dépend de la plate forme) , or il arrive souvent que l’on n’utilise pas la valeur par  défaut, on se retrouve donc dans la nécessité de le préciser, sous peine de retour du message suivant :

$ renamedg TESTDG1 DG1
Parsing parameters..[
renamedg operation: TESTDG1 DG1
Executing phase 1
Discovering the group
KFNDG-00407: file not found; arguments: []

Attention au pré-requis : le diskgroup que l’on doit renommer ne peut pas être dans l’état « mounted » , il faut donc le démonter au préalable, voire arrêter les bases de données qui l’utilisent, voire même le cluster associé si voting disk et OCR sont présents dans ce groupe (dans ce cas là, il faut d’ailleurs préciser si l’on veut conserver ou non la section voting, car elle est supprimée par défaut lors de  cette opération, prudence donc!).
Un autre élément intéressant est que l’opération se réalise en deux phases, la première génère un fichier de configuration et effectue quelques vérifications :

$ renamedg phase=one dgname=TESTDG1 newdgname=ELDG1 asm_diskstring='/dev/oracleasm/disks/*' verbose=true config=/tmp/data2.conf
Parsing parameters..
Parameters in effect:
Old DG name          : TESTDG1
New DG name          : ELDG1
Phases               :
Phase 1
Discovery str        : /dev/oracleasm/disks/*
Clean                : TRUE
Raw only             : TRUE
renamedg operation: phase=one dgname=TESTDG1 newdgname=ELDG1 asm_diskstring=/dev/oracleasm/disks/* verbose=true config=/tmp/data2.conf
Executing phase 1
Discovering the group
Performing discovery with string:/dev/oracleasm/disks/*
Identified disk UFS:/dev/oracleasm/disks/DATA3 with disk number:0 and timestamp (32925909 -884319232)
Checking for hearbeat...
Re-discovering the group
Performing discovery with string:/dev/oracleasm/disks/*
Identified disk UFS:/dev/oracleasm/disks/DATA3 with disk number:0 and timestamp (32925909 -884319232)
Checking if the diskgroup is mounted
Checking disk number:0
Checking if diskgroup is used by CSS
Generating configuration file..
Completed phase 1
Terminating kgfd context 0x2b931df160a0

Le contenu du fichier de configuration est ceci :

$ cat /tmp/data2.conf
/dev/oracleasm/disks/DATA3 TESTDG1 ELDG1

La seconde phase réalise la modification du nom en utilisant le fichier de configuration précédent pour recréer l’entête de la partition.
Cette séparation en deux étapes permet de pouvoir retenter plusieurs fois l’opération de la phase II, en cas de problème sur celle-ci. On peut éventuellement en profiter pour changer de nouveau le nom du diskgroup, en le modifiant à la fois dans la ligne de commande et dans le fichier.
Une fois l’opération terminée on remonte le disque et on vérifie :

$ asmcmd mount eldg1
$ 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      1018      443                0             443              0             N  DATA/
MOUNTED  EXTERN  N         512   4096  1048576       509      457                0             457              0             N  ELDG1/

Pour plus d’information sur la commande et ses arguments, utiliser l’aide  :

$ renamedg -help
Parsing parameters..
phase                           Phase to execute,
                                (phase=ONE|TWO|BOTH), default BOTH
dgname                          Diskgroup to be renamed
newdgname                       New name for the diskgroup
config                          intermediate config file
check                           just check-do not perform actual operation,
                                (check=TRUE/FALSE), default FALSE
confirm                         confirm before committing changes to disks,
                                (confirm=TRUE/FALSE), default FALSE
clean                           ignore errors,
                                (clean=TRUE/FALSE), default TRUE
asm_diskstring                  ASM Diskstring (asm_diskstring='discoverystring',
                                'discoverystring1' ...)
verbose                         verbose execution,
                                (verbose=TRUE|FALSE), default FALSE
keep_voting_files               Voting file attribute,
                                (keep_voting_files=TRUE|FALSE), default FALSE

Voilà c’était tout, un petit pas grand chose, mais qui peut vous faire gagner du temps si vous souhaitez utiliser cette commande.