Prozedur zum Klonen einer Oracle Datenbank

04.
August
2014
Veröffentlicht von: Roland Zerfaß

Seit Oracle 11g kann ein Datenbank-Klon aus einer laufenden Produktionsumgebung erzeugt werden. Die nachfolgende, schrittweise Prozedur gibt Ihnen eine Hilfestellung, um eine Datenbank erfolgreich zu duplizieren. Zunächst müssen Sie jedoch etwas Vorarbeit leisten und ein paar Grundvoraussetzungen schaffen bzw. diese überprüfen.

Seit Oracle 11g kann ein Datenbank-Klon aus einer laufenden Produktionsumgebung erzeugt werden. Die nachfolgende, schrittweise Prozedur gibt Ihnen eine Hilfestellung, um eine Datenbank erfolgreich zu duplizieren. Zunächst müssen Sie jedoch etwas Vorarbeit leisten und ein paar Grundvoraussetzungen schaffen bzw. diese überprüfen.

Die nachfolgende Liste soll Ihnen dabei als Checkliste dienen. Im Anschluss werden Sie dann Schritt für Schritt durch die Prozedur geführt.

Grundvoraussetzungen:

  • Quell- und Zieldatenbank müssen das gleiche Patchlevel aufweisen.
  • Auf dem Zielserver sollte dieselbe Dateienstruktur vorhanden sein,
    ansonsten müssen weitere Pfadänderungen vorgenommen werden.
  • Die "neue" Datenbank muss sich in der NOMOUNT-Phase befinden.
  • Die Passwortdatei muss auf beiden Datenbanken IDENTISCH sein.
  • Es müssen grundlegende Vorbereitung bzgl. Struktur gemacht worden sein,
    Verzeichnisse für ...
     
    • Controldateien
    • Archivelogs
    • Redologs
    • Datendateien
    • TEMP-Dateien      
                                     
    ....müssen entweder erstellt oder angepasst werden.
  • Parameterdatei (PFILE) manuell auf Zieldatenbank kopieren und  anpassen

Instanz und zugehörigen Dienst erstellen   

Im ersten Schritt wird die Instanz und der zugehörige Dienst erstellt. Dazu wird die Umgebungsvariable auf die Zieldatenbank umgesetzt:

     DOS>    SET ORACLE_SID=<neue_SID>
    
     DOS>    SET ORACLE_SID=DBKLONE          (Windows)

     $>      export ORACLE_SID=DBKLONE       (Linux)


Unter Windows wird der Dienst für die Zieldatenbank über folgenden Aufruf erstellt:

     DOS>    ORADIM -new -sid <DB_Klonname>
     
     DOS>    ORADIM -new -sid DBKLONE

Das erfolgreiche Erstellen der Instanz wird durch "Instanz erstellt." quittiert.

Netzwerk Dateien vorbereiten

Im zweiten Schritt muss auf der Zielseite der Listener erzeugt und die LISTENER.ORA-Datei angepasst werden. Existiert bereits ein Listener, muss dieser neu gestartet werden. Des Weiteren muss auf der Quellseite ein Eintrag in der TNSNAMES.ORA-Datei für die Klon-DB (Ziel-DB) vorgenommen werden.

 Default Verzeichnis:    %ORACLE_HOME%\NETWORK\ADMIN     (Windows)

                         $ORACLE_HOME/network/admin      (Linux)

DBKLONE =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = wickie)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = DBKLONE)
    )
  )


Passen Sie zusätzlich unter Windows (!) auf beiden Seiten die SQLNET.ORA an und setzen den Wert von NTS um auf NONE:

 SQLNET.AUTHENTICATION_SERVICES = (NONE)


Ansonsten kommt es während der Installation zum Abbruch:

 RMAN-04005: Fehler aus Zieldatenbank:
 ORA-01017:  Benutzername/Kennwort ungültig; Anmeldung abgelehnt

Hinweis: Nach der Installation kann der Parameter wieder auf NTS zurückgesetzt werden.

Fehlende Verzeichnisse anlegen    

Erzeugen Sie manuell die Verzeichnisse mit dem neuen Instanznamen auf Betriebssystemebene:

       >>>        '%ORACLE_BASE%\oradata\DBKLONE' ,
       >>>        '%ORACLE_BASE%\admin\DBKLONE\adump' ,
       >>>        '%ORACLE_BASE%\fast_recovery_area\DBKLONE'

 

Passwortdatei 1:1 aus der Ursprungsdatenbank kopieren 

Im nachfolgenden Schritt, kopieren Sie die Passwortdatei von der Ursprungsdatenbank zur Zieldatenbank und passen den Namen entsprechend an.

Die Passwortdatei befindet sich im ORA-Home\database bzw. dbs Verzeichnis:

 Default Verzeichnis:     %ORACLE_HOME%\database     (Windows)
                          $ORACLE_HOME/dbs           (Linux)

 Bsp: E:\oracle\product\11.2.0\dbhome_1\database\PWD<SID>.ORA
   
      /u01/oracle/product/11.2.0/dbhome_1/dbs/orapw<SID>

 PWD<SID>.ora         (Windows)

 orapw<SID>           (Linux)

 

Parameterdatei aus der Ursprungsdatenbank kopieren  

In diesem Schritt wird die Parameterdatei (SPFILE) von der Ursprungsdatenbank  in eine ASCII-Datei (PFILE) umgewandelt und angepasst. Setzen Sie die alte SID um auf die neue SID und kopieren diese anschließend auf die Zieldatenbank .

Ändern Sie gegebenenfalls auch den Laufwerksbuchstaben und die Pfade.

SPFILE

 Default Verzeichnis:           %ORACLE_HOME%\database    (Windows)
                                $ORACLE_HOME/dbs          (Linux)

 Bsp: E:\oracle\product\11.2.0\dbhome_1\database\SPFILE<SID>.ORA
      /u01/oracle/product/11.2.0/dbhome_1/dbs/spfile<SID>.ora

 

Erzeugen der ASCII-Datei:

SQL> CREATE PFILE FROM SPFILE;


Nehmen Sie folgende Anpassungen vor (alte SID umsetzen auf neue SID):

*.audit_file_dest='%ORACLE_BASE%\admin\DBKLONE\adump'
*.control_files='%ORACLE_BASE%\oradata\DBKLONE\control01.ctl',
                '%ORACLE_BASE%\fast_recovery_area\DBKLONE\control02.ctl'
*.db_name=DBKLONE
*.db_recovery_file_dest='%ORACLE_BASE%\fast_recovery_area'

*.db_file_name_convert='%ORACLE_BASE%\oradata\<quelle1>','%ORACLE_BASE%\oradata\<ziel1>'
                     [,'%ORACLE_BASE%\oradata\<quelle2>','%ORACLE_BASE%\oradata\<ziel2>', ...]
                     
*.log_file_name_convert='%ORACLE_BASE%\oradata\<quelle1>','%ORACLE_BASE%\oradata\<ziel1>'
                     [,'%ORACLE_BASE%\oradata\<quelle2>','%ORACLE_BASE%\oradata\<ziel2>', ...]

Achtung: Falls die Daten- oder Redologdateien auf verschiedene Verzeichnisse verteilt sind, muss für jeden Quell-Pfad ein Ziel-Pfad angegeben werden.

Klonen

Nach Abschluss dieser grundlegenden Vorbereitungen widmen wir uns nun dem eigentlichen Klonen. Melden Sie sich dazu an der Zieldatenbank als Benutzer SYS an und erzeugen Sie ein SPFILE, sofern dies nicht schon vorher geschehen ist.

 SQL> CONN sys/<pwd> as sysdba
 SQL> CREATE SPFILE FROM PFILE;


Anschließend bringen Sie die Instanz in die NOMOUNT Phase:

 SQL> STARTUP NOMOUNT


Beenden Sie SQL Plus wieder mit EXIT, da - je nach Oracle-Version - der DUPLICATE-Befehl sonst hängen bleiben könnte:

 SQL> EXIT


Auf der Quellseite starten Sie nun den RMAN auf Kommandozeilenebene (evtl. ORACLE_SID erneut setzen):

 DOS> SET ORACLE_SID=o11g              (Windows)
     
 $>   export ORACLE_SID=o11g           (Linux)


Melden Sie sich  nun an der Quell-DB (target) und der Klon-DB (auxiliary) an. Der nachfolgende Aufruf gilt für Windows und Linux gleichermaßen:

DOS/Linux> rman target sys/<pwd> auxiliary sys/<pwd>@<tns_alias>


Seit Oracle 11g steht Ihnen eine einfache Variante des Klonens einer Datenbank zur Verfügung, rufen Sie dazu folgenden Befehl auf:

RMAN> DUPLICATE TARGET DATABASE TO <SID> FROM ACTIVE DATABASE               NOFILENAMECHECK;

RMAN> DUPLICATE TARGET DATABASE TO dbklone FROM ACTIVE DATABASE             NOFILENAMECHECK;


... und das Klonen kann beginnen.

Mögliche Fehler 

Kommt es während des Klonvorgangs zu einem Abbruch, dann werden diese Fehler unter Angabe des jeweiligen Hintergrundprozesses im Alertlog dokumentiert.

Beispiel:

Wed Jun 11 13:55:50 2014
Errors in file D:\ORACLE\diag\rdbms\o11g\o11g\trace\o11g_ora_4112.trc:
ORA-17627: ORA-01031: insufficient privileges
 Anmeldung bei Remote-Datenbank-Server nicht möglich

Workaround: Passwort-Datei erneut kopieren --> [manuell]

RMAN.EXE Absturz unter Windows

Kommt es während der Installation zu einem Absturz der RMAN.EXE dann liegt das meist an Fehlern im SPFILE / PFILE. Überprüfen Sie, ob dort alle Einträge korrekt sind (Hochkommas, Pfade, etc.)
Überprüfen Sie ebenso, ob der Parameter db_name auf die Ursprungsdatenbank zurückgesetzt wurde. Wenn dem so ist, ändern Sie ihn wieder erneut auf die Zieldatenbank.


Anmerkung:
Kommt es während der Installation zu einer Fehlermeldung mit Abbruch:

RMAN-04005: Fehler aus Zieldatenbank:
ORA-01017: Benutzername/Kennwort ungültig; Anmeldung abgelehnt


dann ändern Sie den Parameter in der SQLNET.ORA Datei von NTS:

 SQLNET.AUTHENTICATION_SERVICES = (NTS)


auf NONE:

SQLNET.AUTHENTICATION_SERVICES = (NONE)


Diese Datei befindet sich per Default im Verzeichnis:

Default Verzeichnis:    dbhome_1\NETWORK\ADMIN

 

Diesen und weitere Tipps rund um den RMAN erhalten Sie in unseren RMAN- oder DBA-Opens internal link in current windowKursen. Schauen Sie  doch einfach mal vorbei.

RMAN Datenbank Verwaltung

Jede Menge Know-how für Sie!

In unserer Know-How Datenbank finden Sie mehr als 300 ausführliche Beiträge zu den Oracle-Themen wie DBA, SQL, PL/SQL, APEX und vielem mehr.
Hier erhalten Sie Antworten auf Ihre Fragen.