Seit 11.2. kann man mit RMAN aus einer bestehenden und laufenden Datenbank einen Online-Klon erzeugen, ohne vorher ein Backup machen zu müssen. Dies bietet sich z.B. an, wenn man kein transportables Medium zur Verfügung hat, das die bisher notwendigen Backup-Daten aufnehmen kann. Exemplarisch sei hier ein Vorgehen dokumentiert:
Definition: P0 = Quellserver, P1= Zielserver, ORCL = Oracle SID (auf P0 und P1 identisch)
P0 und P1 haben *exakt* die gleiche Verzeichnisstruktur
1. Neuer Klon
1.1. Alle Verzeichnisse anlegen, Orte auf P0 abfragen:
-> select name from v$datafile
-> select name from v$tempfile
-> select member from v$logfile
-> show parameter recovery
-> show parameter control
-> show parameter dump
1.2. Auf P0 ein PFILE aus SPFILE erstellen und auf P1 kopieren
1.3. Password-File von P0 auf P1 kopieren
1.4. Statischen Listener auf P1 erstellen:
SID_LIST_LISTENER =
(SID_LIST = (SID_DESC = (GLOBAL_DBNAME= ORCL.mycompany.com)
(ORACLE_HOME = /u01/app/oracle/product/11.2.0.3/dbhome_1)
(SID_NAME=ORCL)))
1.5. TNSNAMES auf P0 und P1 anpassen
ORCL_P0 =
(DESCRIPTION =(ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = <Hostname von P0>)(PORT = 1521)))
(CONNECT_DATA = (SERVICE_NAME = ORCL)))
ORCL_P1 =
(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = <Hostname von P1>)(PORT = 1521)))
(CONNECT_DATA = (SERVICE_NAME = ORCL)) )
1.6. P1 in NOMOUNT starten
1.7. Testen:
-> SQLPLUS sys@ORCL_P1 as sysdba
-> SQLPLUS sys@ORCL_P0 as sysdba
muss von beiden Servern funktionieren
2. Klon erstellen
2.1. Platz auf den verwendeten Filesystemen prüfen
2.2. P1 herunterfahren
2.3. Alle Datendateien von P1 löschen (mindestens aber die Tempfiles)
2.4. P1 in NOMOUNT starten
2.5. Klonen:
# rman
Recovery Manager: Release 11.2.0.3.0 – Production on Tue Aug 21 09:50:36 2012
Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.
RMAN> connect target sys@ORCL_P1
target database Password:
connected to target database: ORCL (DBID=1247605523)
RMAN> connect auxiliary sys@ORCL_P1
connected to auxiliary database: ORCL (not mounted)
RMAN> run {
2> allocate channel d1 device type disk;
3> allocate channel d2 device type disk;
4> allocate auxiliary channel d3 device type disk;
5> allocate auxiliary channel d4 device type disk;
6> duplicate target database to ORCL from active database spfile nofilenamecheck;
7> }
[…]
Sollte der Zielserver nicht die gleiche Verzeichnisstruktur haben, oder sollte sich der DBNAME ändern, oder auch andere Initialisierungsparameter, ist dies mittels des „CONVERT“- bzw. „SET“-Kommandos zu erreichen; z.B.
duplicate target database
to ORCLC from active database spfile
set „DB_UNIQUE_NAME“=“ORCLC“
set LOG_FILE_NAME_CONVERT ‚/ORCL/‘,’/ORCLC/‘
set DB_FILE_NAME_CONVERT ‚/ORCL/‘,’/ORCLC/‘
nofilenamecheck;
In diesem Fall sind die Listener- und TNSNAMES-Einträge ebenfalls entsprechend anzupassen.
RMAN klont nun die Auxiliary-Datenbank und öffnet sie mit RESETLOGS. Der Stand der Datenbank ist der von P0 zum Ende des Clonings — das aktuellste Archivelog wird übernommen.
2.6. Nacharbeiten
z.B. Initialsierungsparameter für die geklonte Datenbank anpassen.
Fertig!