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.
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.
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.
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'
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)
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.
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.
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.
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]
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-Kursen. Schauen Sie doch einfach mal vorbei.
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.