Puis-je changer le SID d'une base de données Oracle?


18

Le serveur est Oracle Database 11g Enterprise Edition version 11.1.0.7.0 - 64 bits

Existe-t-il un moyen simple et rapide de modifier les SID des bases de données de test sur le serveur?

La suppression et la recréation de la base de données est une option pour moi. Mais je cherche quelque chose qui nécessite moins de temps.

L'autre option pour attribuer des noms dans les clients tnsnames.ora est sujette à des erreurs, car ils ne sont pas administrés de manière centralisée.

Comparé au temps de suppression et de création d'une base de données sur SQL-Server, le temps nécessaire pour créer une nouvelle base de données Oracle est excessivement plus long. Plus loin sur SQL-Server, vous pouvez renommer des instances SQL-Server. [Habituellement, vous renommez le serveur sur lequel s'exécute SQL-Server et rencontrez des problèmes jusqu'à ce que vous renommiez également le serveur].


Vous mentionnez que vous pouvez supprimer et recréer les bases de données. Avez-vous accès à la base de données de production et à ses sauvegardes? Vous pouvez utiliser RMAN et la commande duplicate pour recréer la base de données et modifier le SID en même temps.
Sumnibot

Non, je travaille en tant que DBA pour le développement et certains tests de bases de données Oracle.
bernd_k

2
Lorsque vous utilisez une base de données dans SQL Server, vous utilisez généralement un schéma (= utilisateur) dans Oracle. Le même nom ne signifie pas la même chose dans ces deux mondes
a_horse_with_no_name

Réponses:


13

Depuis l'utilitaire 9i dbnewid (nid) peut être utilisé pour changer le nom de la base de données (et DBID si nécessaire). Si le nom de la base de données est modifié uniquement, alors resetlogs n'est pas requis:

  • 1 base de données de démarrage en mode montage

    shutdown immediate
    startup mount
  • 2 Exécutez nid pour changer le nom de la base de données:

    nid target=sys/syspassword@dbtns dbname=newname setname=YES
  • 3 arrêt et démarrage de la base de données en mode montage:

    shutdown immediate
    startup mount
  • 4 modification db_namedu fichier spfile (ou du fichier pf modifiant le fichier):

    alter system set db_name=newname scope=spfile;
  • 5 recréer le fichier de mot de passe:

    orapwd file=orapwnewname password=syspassword
  • 6 Démarrage de la base de données

    startup
  • 7 étapes de changement de nom:

    change SID in listener.ora
    correct tnsnames.ora
    remove old trace directories
    change /etc/oratab (UNIX) or rename windows service using oradim

1
J'ai renommé 4 bases de données Oracle sur un serveur Windows de cette façon. En recherchant l' utilitaire dbnewid, j'ai trouvé oracle-base.com/articles/9i/DBNEWID.php qui a donné quelques explications supplémentaires.
bernd_k

1
c'est une bonne réponse quand la question était: comment renommer une base de données. La question est: comment changer un SID.
ik_zelf

17

Vous devez recréer le fichier de contrôle

Cet article de Kaunain Ahmed décrit les étapes nécessaires:

  1. faire: modifier le fichier de contrôle de sauvegarde de base de données pour tracer;
  2. extraire la commande "create controlfile" du fichier de trace background-dump-destination.
  3. arrêter la base de données.
  4. Changez le DB-Name dans votre init.ora et changez le init.ora
  5. Modifiez le SID dans / etc / oratab ou / var / opt / oracle / oratab
  6. Modifiez le SID dans votre environnement et sourcez-le
  7. Démarrage de la base de données pour le montage de démarrage d'état de montage
  8. Recréez le fichier de contrôle avec l'instruction à partir de la position 2.
  9. Faites une autre base de données renommer global_name en 10.Changez la configuration TNS en conséquence $ ORACLE_HOME / network / admin / *. Ora Recherchez SID et GLOBAL_NAME

Il existe d'autres outils référencés dans le fil.

Voici un article d'AskTom qui fait référence au processus plus en détail. Bien que ce soit pour 10g, cela devrait toujours fonctionner.


5
Pour les utilisateurs de Windows, vous devrez également utiliser l'utilitaire "oradim" pour configurer le nouveau service.
REW

9

Oui, c'est possible et c'est assez facile aussi.

Dans Oracle, ORACLE_SID n'est que le nom de l'instance Oracle et n'a pas grand-chose à voir avec le DBNAME. Une base de données avec le nom PROD peut être servie à l'aide d'instances avec n'importe quel nom valide. Il n'y a pas de connexion directe entre le SID et le DBNAME. Cette connexion est établie à l'aide des paramètres.

Le fichier de paramètres est identifié comme init $ {ORACLE_SID} .ora ou spfile $ {ORACLE_SID} .ora Dans le fichier de paramètres se trouve le paramètre db_name. C'est là que la connexion entre l'instance Oracle et la base de données est établie.

Donc, vous n'avez pas besoin de recréer un fichier de contrôle, vous n'avez pas besoin d'utiliser nid, assurez-vous simplement que votre fichier de paramètres a le bon nom, arrêtez l'ancienne instance Oracle et démarrez la nouvelle instance Oracle après avoir défini ORACLE_SID au nouveau nom d'instance Oracle. Le fichier de paramètres et le fichier de mots de passe sont tous deux trouvés en utilisant $ {ORACLE_SID} dans le cadre de leur nom.

La recréation du fichier de contrôle n'est nécessaire que lorsque le DBNAME doit changer. nid est nécessaire après une opération de clonage où vous devez modifier le DBID pour éviter les accidents qui pourraient endommager les sauvegardes de la base de données source.


+1 Mais je ne sais toujours pas si je souhaite également modifier le DB_NAME.
bernd_k

Si vous voulez: bien sûr, vous pouvez, les autres réponses ont expliqué correctement comment procéder. Pour quelle raison le feriez-vous? Le db_name est très physique. Connaître le db_name est bon pour un dba mais pour la plupart des autres il n'est pas pertinent. Dans une approche consolidée normale, vous disposez d'une base de données desservant de nombreux services. Un service - une application - ne devrait pas avoir à se soucier de la base de données qu'il exécute.
ik_zelf
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.