DBNEWID est un utilitaire de base de données qui vous permet de modifier l'identifiant interne d'une base de données (DBID) et le nom de la base de données (DBNAME). Vous pouvez modifier uniquement le DBID, le DBNAME, ou vous pouvez modifier à la fois le DBID et le DBNAME.
Avant l'apparition de l'utilitaire DBNEWID, cette action était réalisée en recréant le fichier de contrôle (controlfile). Cependant, cela ne permettait pas de modifier l'identifiant unique (DBID), de sorte que la base de données d'origine et la base de données copiée manuellement ne pouvaient pas être enregistrées dans le référentiel RMAN. Ce problème a été résolu grâce à l'utilitaire DBNEWID.
Pour effectuer ce test, renommons la table que nous restaurons sur le même hôte, dans cette entrée : https://oracleconraul.com/index.php/2023/09/13/recuperar-base-de-datos-mismo-host-con-rman/
Tout d'abord, je vous conseille de faire une sauvegarde de la base de données avant de renommer la base de données, son DBID ou les deux.
Il convient de noter que le changement de nom, et en particulier de DBID, est une procédure complexe et sérieuse, car ce changement entraîne notamment les conséquences suivantes :
Lorsque le DBID d'une base de données est modifié, toutes les sauvegardes et tous les journaux d'archives de cette base de données deviennent inutilisables, car il s'agit d'une base de données différente. La base de données est ouverte avec resetlogs, qui recrée les fichiers redo log en ligne et réinitialise la séquence. Par conséquent, une fois que le DBID a été modifié, il est conseillé d'effectuer une sauvegarde de la base de données dans un premier temps. Si vous ne modifiez que le DBNAME, il n'est pas nécessaire d'ouvrir la base de données avec l'option RESETLOGS, de sorte que les sauvegardes et les archives ne sont pas invalidées. Dans ce cas, vous devez modifier le nom de la base de données dans le fichier .init, en faisant référence au nouveau nom, et éventuellement recréer le fichier des mots de passe, ce qui peut influencer une restauration à partir d'une sauvegarde antérieure au changement de nom.
Si vous changez le DBID d'une base de données primaire, dans un environnement de garde de données, la base de données STANDBY doit être recréée.
Dans les environnements RAC, avant de lancer la commande, vous devez arrêter toutes les instances et démarrer une instance unique avec le paramètre CLUSTER_DATABASE=FALSE.
Les étapes :
1- Nous chargeons les variables d'environnement de la base de données à renommer/débiter.
2- Arrêter la base de données (shutdown immediate ), et monter la base de données (startup mount).
3 - Exécuter la commande DBNEWID
$ nid TARGET=SYS/<password>@<service> DBNAME=<NEW DB name> (tnsnames)
or
nid TARGET=SYS/<password> DBNAME=<NEW DB name>
4- Nous changeons le nom de la nouvelle base de données dans le fichier spfile.
5- Nous recréons le fichier des mots de passe de la nouvelle base de données.
Exécution de la commande :
[oracle@localhost ~]$ sqlplus / as sysdba
SQL*Plus : Release 19.0.0.0.0 - Production on Wed Sep 20 12:00:13 2023
Version 19.3.0.0.0.0
Copyright (c) 1982, 2019, Oracle. Tous droits réservés.
Connecté à :
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0.0
SQL> show parameter uniq
NAME TYPE VALUE
db_unique_name string testcopy
SQL> shutdown immediate ;
Base de données fermée.
Base de données démontée.
Instance ORACLE arrêtée.
SQL>
SQL> startup mount
[oracle@localhost ~]$ nid TARGET=sys/mot de passe DBNAME=newdb
Connexion à la version 19.3.0 du serveur
Fichiers de contrôle dans la base de données :
/data/testcopy/TESTCOPY/controlfile/o1_mf_lj1qob64_.ctl
Changer l'ID et le nom de la base de données TEST en NEWDB ? (Y/[N]) => Y
Continuer l'opération
Changer l'ID de la base de données de 2359187194 à 3388414278
Changer le nom de la base de données de TEST à NEWDB
Fichier de contrôle /data/testcopy/TESTCOPY/controlfile/o1_mf_lj1qob64_.ctl - modifié
Fichier de données /data/tescopy/TESCOPY/data_D-TEST_TS-SYSTEM_FNO- - dbid changé, nouveau nom écrit
Fichier de données /data/tescopy/TESCOPY/data_D-TEST_TS-SYSAUX_FNO- - dbid changé, nouveau nom
Fichier de données /data/tescopy/TESCOPY/data_D-TEST_TS-UNDOTBS1_FNO- - dbid modifié, nouveau nom
Fichier de données /data/tescopy/TESCOPY/data_DEST_TS-USERS_FNO- - dbid modifié, nouveau nom
Fichier de données /data/test/TEST/datafile/o1_mf_temp_hz8q6jog_.tm - dbid modifié, nouveau nom
Control File /data/testcopy/TESTCOPY/controlfile/o1_mf_lj1qob64_.ctl - dbid modifié, nouveau nom
Instance shut down
Database name changed to NEWDB.
Modifier le fichier de paramètres et générer un nouveau fichier de mots de passe avant de redémarrer.
L'ID de la base de données NEWDB a été changé en 3388414278.
Toutes les sauvegardes précédentes et les redo logs archivés pour cette base de données sont inutilisables.
La base de données a été arrêtée, ouvrez la base de données avec l'option RESETLOGS.
Le nom et l'ID de la base de données ont été changés avec succès.
DBNEWID - Completed succesfully.
À ce stade, il est nécessaire de modifier le DBNAME dans le fichier spfile, sinon la base de données ne démarrera pas parce qu'elle a un nouveau nom.
SQL> alter system set db_name=NEWDB scope=spfile ;
Recréation du fichier de mots de passe de la nouvelle base de données :
cd $ORACLE_HOME/dbs
orapwd file=orapwnewdb password=password entries=10
À ce stade, nous pouvons ouvrir la base de données avec open resetlogs.
SQL> alter database open resetlogs ;
Nous vérifions que le nommage a été effectué correctement :
SQL> select name from v$database ;
NOM
******* *******
NEWDB
Comme indiqué précédemment dans ce document, il est fortement recommandé à ce stade de faire une sauvegarde de la base de données, car en cas de problème, il n'est pas possible de restaurer à partir des sauvegardes précédentes.