Renommer une base de données Oracle

Dans cet article, nous allons voir comment renommer une base de données en standalone (10g et 11g)

 
 
 
 
Commençons par les présentations :

C:Users>set ORACLE_SID=XE
C:Users>sqlplus / as sysdba
SQL*Plus: Release 11.2.0.2.0 Production on Ven. Juil. 19 17:24:53 2013
Copyright (c) 1982, 2010, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Express Edition Release 11.2.0.2.0 - Production
SQL> select instance_name from v$instance;
INSTANCE_NAME
----------------
xe

Base XE en 11.2 sur un serveur Windows (Cette méthode s’applique également pour un serveur linux et pour une base en standard ou enterprise edition), nous allons la renommer en EASY, mais nous allons aussi devoir déplacer les fichiers de données dans une autre arborescence.
     1. Première étape déplacer les fichiers vers leurs nouveaux répertoires.
Si vous souhaitez simplement renommer la base, sans changer l’arborescence de vos fichiers, vous pouvez passer directement à la deuxième étape.
Pour ça, récupérer la liste des datafiles et autres fichiers de la base :

SQL> SELECT name FROM v$controlfile
UNION
SELECT member FROM v$logfile
UNION
SELECT name FROM v$datafile
UNION
SELECT name FROM v$tempfile;

Voici le résultat sur la base XE

C:ORACLEXEAPPORACLEFAST_RECOVERY_AREAXEONLINELOGO1_MF_1_7V24ZXKD_.LOG
C:ORACLEXEAPPORACLEFAST_RECOVERY_AREAXEONLINELOGO1_MF_2_7V24ZYFY_.LOG
C:ORACLEXEAPPORACLEORADATAXECONTROL.DBF
C:ORACLEXEAPPORACLEORADATAXESYSAUX.DBF
C:ORACLEXEAPPORACLEORADATAXESYSTEM.DBF
C:ORACLEXEAPPORACLEORADATAXETEMP.DBF
C:ORACLEXEAPPORACLEORADATAXEUNDOTBS1.DBF
C:ORACLEXEAPPORACLEORADATAXEUSERS.DBF

Ne pas oublier de créer la futur arborescence :

C:ORACLEXEAPPORACLEORADATAEASY
C:ORACLEXEAPPORACLEFAST_RECOVERY_AREAEASYONLINELOG
C:ORACLEXEAPPORACLEADMINEASYadump

Ensuite, il faut modifier le chemin des controlfiles dans le spfile :

SQL> ALTER SYSTEM SET control_files='C:ORACLEXEAPPORACLEORADATAEASYCONTROL.DBF' SCOPE=SPFILE;
System altered.

Maintenant, on arrête la base et on déplace tous les fichiers listés ci dessus :

SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> exit
Disconnected from Oracle Database 11g Express Edition Release 11.2.0.2.0 - Production
C:Users>move C:ORACLEXEAPPORACLEORADATAXECONTROL.DBF C:ORACLEXEAPPORACLEORADATAEASY
 1 fichier(s) déplacé(s).
C:Users>move C:ORACLEXEAPPORACLEORADATAXECONTROL.DBF C:ORACLEXEAPPORACLEORADATAEASY
Le fichier spécifié est introuvable.
C:Users>move C:ORACLEXEAPPORACLEORADATAXESYSAUX.DBF C:ORACLEXEAPPORACLEORADATAEASY
 1 fichier(s) déplacé(s).
C:Users>move C:ORACLEXEAPPORACLEORADATAXESYSTEM.DBF C:ORACLEXEAPPORACLEORADATAEASY
 1 fichier(s) déplacé(s).
C:Users>move C:ORACLEXEAPPORACLEORADATAXETEMP.DBF C:ORACLEXEAPPORACLEORADATAEASY
 1 fichier(s) déplacé(s).
C:Users>move C:ORACLEXEAPPORACLEORADATAXEUNDOTBS1.DBF C:ORACLEXEAPPORACLEORADATAEASY
 1 fichier(s) déplacé(s).
C:Users>move C:ORACLEXEAPPORACLEORADATAXEUSERS.DBF C:ORACLEXEAPPORACLEORADATAEASY
 1 fichier(s) déplacé(s).
C:Users>move C:ORACLEXEAPPORACLEFAST_RECOVERY_AREAXEONLINELOGO1_MF_1_7V24ZXKD_.LOG C:ORACLEXEAPPORACLEFAST_RECOVERY_AREAEASYONLINELOG
 1 fichier(s) déplacé(s).
C:Users>move C:ORACLEXEAPPORACLEFAST_RECOVERY_AREAXEONLINELOGO1_MF_2_7V24ZYFY_.LOG C:ORACLEXEAPPORACLEFAST_RECOVERY_AREAEASYONLINELOG
 1 fichier(s) déplacé(s).

On peut monter la base et comme nous avons déplacé le controlfile, elle devrait se monter sans problème :

SQL> startup mount
ORACLE instance started.
Total System Global Area 1071333376 bytes
Fixed Size 1388352 bytes
Variable Size 671088832 bytes
Database Buffers 394264576 bytes
Redo Buffers 4591616 bytes
Database mounted.

Maintenant, on va s’attaquer aux fichiers de données. Pour déplacer un fichier de données, il faut utiliser la commande :

ALTER DATABASE RENAME FILE 'OLD_PATH' TO 'NEW_PATH';

Nous allons faire cette opération pour les data files et les redos logs :

SQL> ALTER DATABASE RENAME FILE 'C:ORACLEXEAPPORACLEORADATAXESYSAUX.DBF' TO 'C:ORACLEXEAPPORACLEORADATAEASYSYSAUX.DBF';
Database altered.
SQL> ALTER DATABASE RENAME FILE 'C:ORACLEXEAPPORACLEORADATAXESYSTEM.DBF' TO 'C:ORACLEXEAPPORACLEORADATAEASYSYSTEM.DBF';
Database altered.
SQL> ALTER DATABASE RENAME FILE 'C:ORACLEXEAPPORACLEORADATAXETEMP.DBF' TO 'C:ORACLEXEAPPORACLEORADATAEASYTEMP.DBF';
Database altered.
SQL> ALTER DATABASE RENAME FILE 'C:ORACLEXEAPPORACLEORADATAXEUNDOTBS1.DBF' TO 'C:ORACLEXEAPPORACLEORADATAEASYUNDOTBS1.DBF';
Database altered.
SQL> ALTER DATABASE RENAME FILE 'C:ORACLEXEAPPORACLEORADATAXEUSERS.DBF' TO 'C:ORACLEXEAPPORACLEORADATAEASYUSERS.DBF';
Database altered.
SQL> ALTER DATABASE RENAME FILE 'C:ORACLEXEAPPORACLEFAST_RECOVERY_AREAXEONLINELOGO1_MF_1_7V24ZXKD_.LOG' TO 'C:ORACLEXEAPPORACLEFAST_RECOVERY_AREAEASYONLINELOGO1_MF_1_7V24ZXKD_.LOG';
Database altered.
SQL> ALTER DATABASE RENAME FILE 'C:ORACLEXEAPPORACLEFAST_RECOVERY_AREAXEONLINELOGO1_MF_2_7V24ZYFY_.LOG' TO 'C:ORACLEXEAPPORACLEFAST_RECOVERY_AREAEASYONLINELOGO1_MF_2_7V24ZYFY_.LOG';
Database altered.

On peut ouvrir la base pour s’assurer que tout a correctement été déplacé, mais il faudra de nouveau la passer en mode mount pour la suite des opérations :

SQL> alter database open;
Database opened.
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount
ORACLE instance started.
Total System Global Area 1071333376 bytes
Fixed Size 1388352 bytes
Variable Size 671088832 bytes
Database Buffers 394264576 bytes
Redo Buffers 4591616 bytes
Database mounted.

    2. Deuxième étape, renommer la base :
La base doit être en mode MOUNT et nous allons utiliser l’utilitaire NID d’ORACLE pour modifier le DBID et le DBNAME :

C:Users>set ORACLE_SID=XE
C:Users>nid TARGET=sys/oracle DBNAME=EASY
DBNEWID: Release 11.2.0.2.0 - Production on Ven. Juil. 19 18:13:25 2013
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
Connected to database XE (DBID=2664395354)
Connected to server version 11.2.0
Control Files in database:
 C:ORACLEXEAPPORACLEORADATAEASYCONTROL.DBF
Change database ID and database name XE to EASY? (Y/[N]) => Y
Proceeding with operation
Changing database ID from 2664395354 to 2845801349
Changing database name from XE to EASY
 Control File C:ORACLEXEAPPORACLEORADATAEASYCONTROL.DBF - modified
 Datafile C:ORACLEXEAPPORACLEORADATAEASYSYSTEM.DB - dbid changed, wrote new name
 Datafile C:ORACLEXEAPPORACLEORADATAEASYUNDOTBS1.DB - dbid changed, wrote new name
 Datafile C:ORACLEXEAPPORACLEORADATAEASYSYSAUX.DB - dbid changed, wrote new name
 Datafile C:ORACLEXEAPPORACLEORADATAEASYUSERS.DB - dbid changed, wrote new name
 Datafile C:ORACLEXEAPPORACLEORADATAEASYTEMP.DB - dbid changed, wrote new name
 Control File C:ORACLEXEAPPORACLEORADATAEASYCONTROL.DBF - dbid changed, wrote new name
 Instance shut down
Database name changed to EASY.
Modify parameter file and generate a new password file before restarting.
Database ID for database EASY changed to 2845801349.
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.

La base est renommée, mais il reste quelques étapes (à réaliser dans l’ordre) :
– Modifier le db_name dans le spfile :

SQL> startup nomount
ORACLE instance started.
Total System Global Area 1071333376 bytes
Fixed Size 1388352 bytes
Variable Size 671088832 bytes
Database Buffers 394264576 bytes
Redo Buffers 4591616 bytes
SQL> alter system set DB_NAME=EASY scope=SPFILE;
SQL> shutdown immediate

– Renommer le SPFILE :

C:Users>move C:oraclexeapporacleproduct11.2.0serverdatabaseSPFILEXE.ORA C:oraclexeapporacleproduct11.2.0serverdata
baseSPFILEEASY.ORA
 1 fichier(s) déplacé(s).

WINDOWS Seulement : Modifier le service Windows

C:Users>oradim -delete -sid XE
Instance deleted.
C:Users>oradim -new -sid EASY -syspwd mot_de_passe_system -startmode a
OPW-00005: File with same name exists - please delete or rename ==> Vous pouvez ignorer cette erreur
Instance created.

UNIX Seulement : modifier le fichier /etc/oratab
– Générer un nouveau password file (voir doc Oracle pour les options) :

ORAPWD FILE=C:oraclexeapporacleproduct11.2.0serverdatabasePWDEASY.ORA [ENTRIES=numusers] [FORCE={Y|N}] [IGNORECASE={Y|N}] [NOSYSDBA={Y|N}]

Nous pouvons ouvrir la base :

C:Users>sqlplus / as sysdba
SQL*Plus: Release 11.2.0.2.0 Production on Ven. Juil. 19 18:34:05 2013
Copyright (c) 1982, 2010, Oracle. All rights reserved.
Connected to an idle instance.
SQL> startup mount;
ORACLE instance started.
Total System Global Area 1071333376 bytes
Fixed Size 1388352 bytes
Variable Size 620757184 bytes
Database Buffers 444596224 bytes
Redo Buffers 4591616 bytes
Database mounted.
SQL> alter database open resetlogs;
Database altered.

La base est enfin ouverte. Cependant, comme on a pu le voir lors de l’utilisation de « NID », le DBID a changé, toute les backups et autres archives ne sont donc plus utilisable. Il ne faut pas oublier de faire du nettoyage côté RMAN :

RMAN> delete noprompt archivelog all;
RMAN> delete noprompt backup

Vous souhaitez renommer une base de données en RAC ? Vous n’êtes pas sur le bon article : http://blog.easyteam.fr/2013/07/02/comment-renommer-une-base-de-donnees-rac/

4 réflexions sur “Renommer une base de données Oracle”

  1. Merci pour ce retour, je vais effectuer une correction.
    D’après la doc, l’utilisation suivante fonctionne :
    oradim -new -sid EASY -syspwd mot_de_passe_system -startmode a -spfile

    1. Bonjour,
      vous pouvez passer la commande sans spécifier l’argument -spfile,
      la commande devient :
      oradim -new -sid EASY -syspwd mot_de_passe_system -startmode auto
      Cordialement,

  2. Bonjour,
    votre tuto est parfait sauf une erreur a la fin avec cette commande :
    oradim -new -sid EASY -syspwd mot_de_passe_system -startmode a -pfile C:oraclexeapporacleproduct11.2.0serverdatabaseSPFILEEASY.ORA
    si on utilise cette commande la base ne démarre pas automatiquement car on demande le pfile comme paramètre et on spécifie le spfile par la suite.
    Cordialement,

Les commentaires sont fermés.