Comment renommer une base de données RAC ?

Suite à des problèmes lors de la création ou à la bascule d’un dataguard ou pour toutes autres raisons, on peut être amené à vouloir  changer le nom d’une base de données et par la le paramètre db_name . Si cela est relativement facile pour une base en standalone, voici la procédure à suivre dans le cas d’une base en RAC.
Une fois l’environnement de la base de données voulue positionné, connectez-vous à la base à renommer et générez un fichier init.ora, initOLDDATABASE.ora, qui ne servira que durant la procédure de renommage.

sqlplus / as sysdba
Create pfile='?/dbs/initOLDDATABASE.ora' from spfile;

Dans ce fichier, modifiez la ligne du paramètre cluster_database pour lui donner la valeur false.

vi initOLDDATABASE.ora
*.cluster_database=false

Une fois la modification effectuée, arrêtez la base de données et relancez-la en mode mount .

srvctl stop database -d OLDDATABASE
sqlplus / as sysdba
startup mount pfile=?/dbs/initOLDDATABASE.ora;

Lancez l’utilitaire nid pour renommer la base de données.

nid TARGET=sys/SYSPWD DBNAME=DATABASENAME
DBNEWID: Release 11.2.0.3.0 - Production on Mon Sep 10 09:36:31 2012
Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.
Connected to database OLDDATABASE (DBID=4180504147)
Connected to server version 11.2.0
Control Files in database:
+DATABASENAME_CTRL01/databasename/control01.ctl
+DATABASENAME_CTRL01/databasename/control02.ctl
...
Datafile +DATABASENAME_UNDO01/undotbs2_02.db - dbid changed, wrote new name
Datafile +DATABASENAME_TEMP01/temp_01.db - dbid changed, wrote new name
Control File +DATABASENAME_CTRL01/databasename/control01.ctl - dbid changed, wrote new name
Control File +DATABASENAME_CTRL01/databasename/control02.ctl - dbid changed, wrote new name
Instance shut down
Database name changed to DATABASENAME.
Modify parameter file and generate a new password file before restarting.
Database ID for database DATABASENAME changed to 1243952864.
All previous backups and archived redo logs for this database are unusable.
Database is not aware of previous backups and archived logs in Recovery Area.
Database has been shutdown, open database with RESETLOGS option.
Succesfully changed database name and ID.
DBNEWID - Completed succesfully.

Une fois l’opération terminée, la base est arrêtée.
Créez un fichier init.ora pour la nouvelle base de donnée à partir du fichier créer précédemment. On l’appellera initDATABASENAME.ora
Substituez le nom de l’ancienne base de données par le nouveau  sur toutes les lignes du fichier.
Ajoutez une ligne avec la nouvelle base de données dans le fichier /etc/oratab (ou équivalent sous windows / solaris)  et supprimez la ligne correspondant a l’ancienne base sur chaque nœud du cluster.
Positionnez-vous dans l’environnement de la nouvelle base de données et démarrez la base avec le fichier init.ora nouvellement créé, initDATABASENAME.ora

sqlplus / as sysdba
startup mount pfile=?/dbs/initDATABASENAME.ora
alter database open resetlogs

Créez le fichier spfile sur un filesystem partagé entre tous les nœuds du cluster (ASM) à partir du fichier initDATABASENAME.ora

Create spfile 'localisation/spfile/spfileDATABASENAME.ora' from pfile='?/dbs/initDATABASENAME.ora'

Créez un fichier init.ora par instance avec la localisation du fichier spfile que l’on vient de créer.

SPFILE='localisation/spfile/spfileDATABASENAME.ora'

Comme on est en mode cluster, il faut rentrer la nouvelle base de données dans la configuration du clusterware. Pour cela on utilise la commande srvctl.

srvctl add database –d DATABASENAME –o /oracle/home –c RAC –p /localisation/fichier/spfile –r PRIMARY –s open –a liste,des,volumes,asm,associées,a,la,base

La liste des volumes ASM est décrite sans le caractère ‘+’
Il faut maintenant définir les instances associés.

srvctl add instance –d DATABASENAME –i DATABASENAME1 –n Noeud1
srvctl add instance –d DATABASENAME –i DATABASENAME2 –n Noeud2
…

Vous pouvez maintenant redémarrer la première instance.

Srvctl start instance –d DATABASENAME –i DATABASENAME1

Vous devez modifier le paramètre cluster_database dans le fichier spfile sous sqlplus en tant que user sysdba.

Alter system set cluster_database=true sid='*' scope=spfile;

Contrôlez le paramètre cluster_database_instances qui doit avoir une valeur correspondant au nombre d’instance défini pour la base en RAC.
Vous pouvez arrêter la base de données et la redémarrer avec toutes les instances.

Srvctl stop database –d DATABASENAME
Srvctl start database –d DATABASENAME

En cas de problème lors du redémarrage d’une des instances, générez un fichier pfile à partir du spfile et contrôlez les paramètres thread, undo_tablespace, instance_name, instance_number qui doivent être cohérent avec la configuration définie.
Une fois toutes les instances démarrées, ne pas oublier de faire une sauvegarde full de la base et le cas échéant, de recréer les services qui étaient définis sur l’ancienne base.
Enfin, supprimez la configuration de l’ancienne base dans le clusterware.

1 réflexion sur “Comment renommer une base de données RAC ?”

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *