Kann ich die SID einer Oracle-Datenbank ändern?


18

Der Server ist Oracle Database 11g Enterprise Edition Release 11.1.0.7.0 - 64-Bit

Gibt es eine einfache und schnelle Möglichkeit, die SIDs der Testdatenbanken auf dem Server zu ändern?

Das Löschen und Neuerstellen der Datenbank ist für mich eine Option. Aber ich suche etwas, das weniger Zeit benötigt.

Die andere Möglichkeit, Namen in der clients tnsnames.ora zu vergeben, ist fehleranfällig, da diese nicht zentral verwaltet werden.

Verglichen mit der Zeit zum Ablegen und Erstellen einer Datenbank auf SQL-Server ist die Zeit, die zum Erstellen einer neuen Oracle-Datenbank erforderlich ist, übermäßig lang. Weiterhin können Sie auf SQL-Server SQL-Server-Instanzen umbenennen. [Normalerweise benennen Sie den Server, auf dem SQL-Server ausgeführt wird, um und haben einige Probleme, bis Sie den Server ebenfalls umbenennen.]


Sie erwähnen, dass Sie die Datenbanken löschen und neu erstellen können. Haben Sie Zugriff auf die Produktionsdatenbank und deren Backups? Mit RMAN und dem Befehl duplicate können Sie die Datenbank neu erstellen und gleichzeitig die SID ändern.
Sumnibot

Nein, ich arbeite als DBA für die Entwicklung und einige Test-Oracle-Datenbanken.
bernd_k

2
Wenn Sie eine Datenbank in SQL Server verwenden, verwenden Sie in Oracle normalerweise ein Schema (= Benutzer). Der gleiche Name bedeutet nicht dasselbe in diesen beiden Welten
a_horse_with_no_name

Antworten:


13

Seit 9i kann das Dienstprogramm dbnewid (nid) zum Ändern des Datenbanknamens (und ggf. der DBID) verwendet werden. Wenn nur der Datenbankname geändert wird, sind keine resetlogs erforderlich:

  • 1 Startdatenbank im Bereitstellungsmodus

    shutdown immediate
    startup mount
    
  • 2 Führen Sie nid aus, um den Datenbanknamen zu ändern:

    nid target=sys/syspassword@dbtns dbname=newname setname=YES
  • 3 Fahren Sie die Datenbank herunter und starten Sie sie im Bereitstellungsmodus:

    shutdown immediate
    startup mount
    
  • 4 Änderung db_namein spfile (oder in pfile Bearbeitung der Datei):

    alter system set db_name=newname scope=spfile;
  • 5 Passwortdatei neu erstellen:

    orapwd file=orapwnewname password=syspassword
  • 6 Starten Sie die Datenbank

    startup
  • 7 Schritte nach dem Umbenennen:

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

1
Auf diese Weise habe ich 4 Oracle-Datenbanken auf einem Windows Server umbenannt. Auf der Suche nach dem Dienstprogramm dbnewid habe ich oracle-base.com/articles/9i/DBNEWID.php gefunden, das einige zusätzliche Erklärungen enthält.
bernd_k

1
Dies ist eine gute Antwort, wenn die Frage lautete: Wie benenne ich eine Datenbank um? Die Frage ist, wie man eine SID ändert.
ik_zelf

17

Sie müssen die Steuerdatei neu erstellen

Dieser Beitrag von Kaunain Ahmed beschreibt die notwendigen Schritte:

  1. do: Ändere die Kontrolldatei der Datenbanksicherung, um sie zu verfolgen;
  2. extrahieren Sie den Befehl "create controlfile" aus der Hintergrund-Dump-Destination-Trace-Datei.
  3. Fahren Sie die DB herunter.
  4. Ändern Sie den DB-Namen in Ihrer init.ora und ändern Sie die init.ora
  5. Ändern Sie die SID in / etc / oratab oder / var / opt / oracle / oratab
  6. Ändern Sie die SID in Ihrer Umgebung und geben Sie sie als Quelle an
  7. Starten Sie die Datenbank, um den Mount-Status zu aktivieren
  8. Erstellen Sie die Steuerdatei mit der Anweisung von Position 2 neu.
  9. Ändern Sie die Datenbank um, benennen Sie global_name in 10.Ändern Sie die TNS-Konfiguration entsprechend $ ORACLE_HOME / network / admin / *. Oder suchen Sie nach SID und GLOBAL_NAME

Es gibt andere Tools, auf die im Thread verwiesen wird.

Hier ist ein Beitrag von AskTom, in dem der Vorgang detaillierter beschrieben wird. Während es für 10g ist, sollte es immer noch funktionieren.


5
Hinweis für Windows-Benutzer: Sie müssen auch das Dienstprogramm "oradim" verwenden, um den neuen Dienst einzurichten.
REW

9

Ja, das kannst du und es ist auch ganz einfach.

In Oracle ist die ORACLE_SID nur der Name für die Oracle-Instanz und hat nicht viel mit dem DBNAME zu tun. Eine Datenbank mit dem Namen PROD kann mithilfe von Instanzen mit einem beliebigen gültigen Namen bereitgestellt werden. Es besteht keine direkte Verbindung zwischen der SID und dem DBNAME. Diese Verbindung wird über die Parameter hergestellt.

Die Parameterdatei wird als init $ {ORACLE_SID} .ora oder spfile $ {ORACLE_SID} .ora bezeichnet. In der Parameterdatei befindet sich der Parameter db_name. Hier wird die Verbindung zwischen der Oracle-Instanz und der Datenbank hergestellt.

Sie müssen also keine Steuerdatei neu erstellen, Sie müssen nicht nid verwenden, sondern nur sicherstellen, dass Ihre Parameterdatei den richtigen Namen hat, die alte Oracle-Instanz herunterfahren und die neue Oracle-Instanz starten, nachdem Sie ORACLE_SID festgelegt haben auf den neuen Oracle-Instanznamen. Die Parameterdatei und die Kennwortdatei werden beide unter Verwendung des $ {ORACLE_SID} als Teil ihres Namens gefunden.

Das erneute Erstellen der Steuerdatei ist nur erforderlich, wenn sich der DBNAME ändern muss. nid wird nach einem Klonvorgang benötigt, bei dem Sie die DBID ändern müssen, um Unfälle zu vermeiden, die die Sicherungen der Quellendatenbank beschädigen könnten.


+1 Ich bin mir aber immer noch nicht sicher, ob ich auch den DB_NAME ändern möchte.
bernd_k

Wenn Sie möchten: Sicher können Sie, die anderen Antworten haben richtig erklärt, wie man das macht. Aus welchem ​​Grund würdest du es tun? Der Datenbankname ist sehr physisch. Die Kenntnis des Datenbanknamens ist für eine DBA gut, für die meisten anderen jedoch irrelevant. In einem normalen konsolidierten Ansatz verfügen Sie über eine Datenbank, die viele Dienste bereitstellt. Ein Dienst - eine Anwendung - muss sich nicht darum kümmern, in welcher Datenbank er ausgeführt wird.
ik_zelf
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.