
| Recovery Manager (RMAN) Oracles Tool zur Sicherung von Oracle Datenbanken. |
| Transportable Tablespace Ein Verfahren, um sehr einfach und schnell Tablespaces von einer Oracle Datenbank in eine andere zu übertragen. |
| Externe Tabellen Tabellen, die in der Datenbank definiert, deren Daten aber außerhalb gespeichert sind. |
| BFILE Binäre Daten, die im Filesystem gespeichert werden, aber auf die mit Datenbankmitteln zugegriffen werden kann. |
| Directory Ein directory definiert einen Alias für ein Verzeichnis im Filesystem. |
Wie sieht der übliche Weg aus, den wir bei einer Migration von einer Serverplattform zu einer anderen, z. B. von Sun zu HP, beschreiten?
Wir exportieren (exp/Datapump) die Daten aus der aktuellen Plattform und importieren (imp/Datapump) sie auf der neuen Plattform. Meist geht damit auch eine Migration auf ein neueres Oracle Release einher. Insgesamt ein sehr aufwändiges Verfahren.
Ab Oracle 10gR2 steht uns dafür ein neuer Weg zur Verfügung. Dieser Weg heißt Cross-Platform Database Transport. Das passende Recovery Manager (RMAN) Kommando heißt CONVERT DATABASE.
Zur Erinnerung: Seit Oracle 10gR1 besteht die Möglichkeit, mit dem Recovery Manager transportable Tablespaces zwischen beliebigen Plattformen zu verschieben. Einen Überblick über die unterstützten Plattformen sowie das zugrunde liegende SQL-Statement, das diese Liste liefert, finden Sie in Abbildung 1.
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||
| Abb. 1: Unterstützte Zielplattformen für einen transportablen Tablespace auf einer beliebigen Plattform. | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Nun wollen wir betrachten, wie das Ganze funktioniert.
Bevor wir mit dem Transport der Datenbank beginnen, untersuchen wir, ob der von uns gewünschte Pfad unterstützt wird.
Ein select * from v$DB_TRANSPORTABLE_PLATFORM auf einem Linux Server gibt einen ersten Überblick über die unterstützten Plattformen (siehe Abbildung 2).
|
||||||||||||||||||||||||||||||
| Abb. 2: Unterstützte Plattformen auf einem Linux Server. |
Zusätzlich hilft die Funktion DBMS_TDB.CHECK_DB bei der Voranalyse.
Schauen wir uns das Ganze an einem Beispiel an. Dabei wollen wir von Linux IA (32-bit) nach Linux 64-bit for AMD wechseln. Den passenden String für den Plattformnamen erhalten wir aus dem Ergebnis der vorherigen Abfrage.
Vor dem Ausführen dieses Packages und für die weiteren Schritte muss die Datenbank read-only geöffnet werden, da es ansonsten zu einer entsprechenden Fehlermeldung kommt. Das kleine Skript in Abbildung 3 hilft uns dabei.
set serveroutput on declare db_ready boolean; begin db_ready := dbms_tdb.check_db( 'Linux 64-bit for AMD', dbms_tdb.skip_none); end; / PL/SQL procedure successfully completed. |
Damit ist endgültig klar, dass einer "direkten" Migration nichts im Weg steht.
Vor der Konvertierung müssen wir noch untersuchen, ob unsere Datenbank externe Tabellen, BFILEs oder directories enthält. Diese können von CONVERT DATABASE nicht bearbeitet werden und müssen separat behandelt, d. h. mit Betriebssystemmitteln kopiert werden. Zur Ermittlung gibt es die DBMS_TDB.CHECK_EXTERNAL Funktion.
Auch hier hilft uns ein kleines Skript (siehe Abbildung 4).
set serveroutput on
declare
external boolean;
begin
external := dbms_tdb.check_external;
end;
The following directories exist in the database:
SYS.DATA_PUMP_DIR, SYS.ADMIN_DIR, SYS.WORK_DIR
PL/SQL procedure successfully completed.
|
Nach diesen Vorarbeiten ist unsere Datenbank fertig für das Konvertieren auf die neue Plattform.
Das RMAN Kommando CONVERT DATABASE erzeugt dabei die drei notwendigen Bestandteile:
Ein Beispiel mit der entsprechenden Ausgabe liefert Abbildung 5. Die hier entstandenen Dateien werden nun auf den neuen Server kopiert.
CONVERT DATABASE NEW DATABASE 'newdb' transport script '/tmp/transport/transportskript' to platform 'Linux 64-bit for AMD' db_file_name_convert '/oradata/ak102' '/tmp/transport'; ------------------------------------------------------------- Starting convert at 05.04.06 using target database control file instead of recovery catalog allocated channel: ORA_DISK_1 channel ORA_DISK_1: sid=42 devtype=DISK Directory SYS.DATA_PUMP_DIR found in the database Directory SYS.ADMIN_DIR found in the database Directory SYS.WORK_DIR found in the database User SYS with SYSDBA and SYSOPER privilege found in password file channel ORA_DISK_1: starting datafile conversion input datafile fno=00001 name=/oradata/ak102/system01.dbf converted datafile=/tmp/transport/system01.dbf channel ORA_DISK_1: datafile conversion complete, elapsed time: 00:00:35 channel ORA_DISK_1: starting datafile conversion input datafile fno=00002 name=/oradata/ak102/undotbs01.dbf converted datafile=/tmp/transport/undotbs01.dbf channel ORA_DISK_1: datafile conversion complete, elapsed time: 00:00:25 channel ORA_DISK_1: starting datafile conversion input datafile fno=00003 name=/oradata/ak102/sysaux01.dbf converted datafile=/tmp/transport/sysaux01.dbf channel ORA_DISK_1: datafile conversion complete, elapsed time: 00:00:15 channel ORA_DISK_1: starting datafile conversion input datafile fno=00004 name=/oradata/ak102/users01.dbf converted datafile=/tmp/transport/users01.dbf channel ORA_DISK_1: datafile conversion complete, elapsed time: 00:00:01 Run SQL script /tmp/transport/transportskript on the target platform to create database Edit init.ora file /oracle/product/10.2/dbs/init_00hfpe8c_1_0.ora. This PFILE will be used to create the database on the target platform To recompile all PL/SQL modules, run utlirp.sql and utlrp.sql on the target platform To change the internal database identifier, use DBNEWID Utility Finished backup at 05.04.06 |
Nun schauen wir uns das Transport Skript näher an, das RMAN für uns gebaut hat (siehe Abbildung 6). Wir stellen fest, dass es sich um ein ganz normales create controlfile Skript handelt, da beim CONVERT DATABASE zwar die Datenbank Dateien gesichert wurden, aber kein Backup der Control-Datei angelegt wurde.
STARTUP NOMOUNT PFILE='/oracle/product/10.2/dbs/init_00hfpe8c_1_0.ora'
CREATE CONTROLFILE REUSE SET DATABASE "NEWDB" RESETLOGS ARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 1168
LOGFILE
GROUP 1 (
'/oracle/product/10.2/dbs/arch_D-NEWDB_id-3659488684_S-145_T-1_A-565987116_00hfpe8c',
'/oracle/product/10.2/dbs/arch_D-NEWDB_id-3659488684_S-145_T-1_A-565987116_01hfpe8c'
) SIZE 10M,
GROUP 2 (
'/oracle/product/10.2/dbs/arch_D-NEWDB_id-3659488684_S-143_T-1_A-565987116_00hfpe8c',
'/oracle/product/10.2/dbs/arch_D-NEWDB_id-3659488684_S-143_T-1_A-565987116_01hfpe8c'
) SIZE 10M,
GROUP 3 (
'/oracle/product/10.2/dbs/arch_D-NEWDB_id-3659488684_S-144_T-1_A-565987116_00hfpe8c',
'/oracle/product/10.2/dbs/arch_D-NEWDB_id-3659488684_S-144_T-1_A-565987116_01hfpe8c'
) SIZE 10M
DATAFILE
'/tmp/transport/system01.dbf',
'/tmp/transport/undotbs01.dbf',
'/tmp/transport/sysaux01.dbf',
'/tmp/transport/users01.dbf'
CHARACTER SET WE8ISO8859P1;
-- Database can now be opened zeroing the online logs.
ALTER DATABASE OPEN RESETLOGS;
-- Commands to add tempfiles to temporary tablespaces.
-- Online tempfiles have complete space information.
-- Other tempfiles may require adjustment.
ALTER TABLESPACE TEMP ADD TEMPFILE
'/oracle/product/10.2/dbs/data_D-NEWDB_I-3659488684_TS-TEMP_FNO-1_00hfpe8c'
SIZE 20971520 AUTOEXTEND ON NEXT 655360 MAXSIZE 536870912 ;
-- End of tempfile additions.
--
set echo off
prompt ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
prompt * Your database has been created successfully!
prompt * There are many things to think about for the new database. Here
prompt * is a checklist to help you stay on track:
prompt * 1. You may want to redefine the location of the directory objects.
prompt * 2. You may want to change the internal database identifier (DBID)
prompt * or the global database name for this database. Use the
prompt * NEWDBID Utility (nid).
prompt ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
SHUTDOWN IMMEDIATE
STARTUP UPGRADE PFILE='/oracle/product/10.2/dbs/init_00hfpe8c_1_0.ora'
@@ ?/rdbms/admin/utlirp.sql
SHUTDOWN IMMEDIATE
STARTUP PFILE='/oracle/product/10.2/dbs/init_00hfpe8c_1_0.ora'
-- The following step will recompile all PL/SQL modules.
-- It may take serveral hours to complete.
@@ ?/rdbms/admin/utlrp.sql
set feedback 6;
|
Dadurch werden wir automatisch dazu gebracht, die Pfade zu den Dateien auf den gewünschten Stand zu bringen. Das von CONVERT DATABASE angelegte pfile ist selbstverständlich vorher den Gegebenheiten anzupassen (siehe Abbildung 7).
# Please change the values of the following parameters: control_files = "/oracle/product/10.2/dbs/cf_D-NEWDB_id-3659488684_00hfpe8c" db_recovery_file_dest = "/oracle/product/10.2/dbs/flash_recovery_area" db_recovery_file_dest_size= 2147483648 background_dump_dest = "/oracle/product/10.2/dbs/bdump" user_dump_dest = "/oracle/product/10.2/dbs/udump" core_dump_dest = "/oracle/product/10.2/dbs/cdump" audit_file_dest = "/oracle/product/10.2/dbs/adump" db_name = "NEWDB" # Please review the values of the following parameters: __shared_pool_size = 54525952 __large_pool_size = 4194304 __java_pool_size = 4194304 __streams_pool_size = 0 __db_cache_size = 37748736 remote_login_passwordfile = "SHARED" db_domain = "" # The values of the following parameters are from source database: processes = 50 sessions = 60 sga_max_size = 104857600 nls_territory = "GERMANY" sga_target = 104857600 db_block_size = 8192 compatible = "10.2.0.1.0" db_file_multiblock_read_count = 16 db_flashback_retention_target = 120 undo_management = "AUTO" undo_tablespace = "UNDOTBS1" job_queue_processes = 10 open_cursors = 300 pga_aggregate_target = 16777216 |
Sind alle Dateien auf das neue System gespielt, das "Transport Skript" und das Pfile angepasst, so steht - letztlich mit vergleichsweise wenig Aufwand - die Datenbank auf einem neuen Server zur Verfügung. Allerdings funktioniert das in dieser Form nur für eine "endian Variante".
Oracle hat uns jedoch bereits mit 10g R1 gezeigt, dass es möglich ist, Tablespaces von einer Plattform auf eine beliebige andere Plattform zu migrieren. Von daher ist CONVERT DATABASE zwar eine gute Idee, aber vollständig ist das Ganze erst, wenn man damit Datenbanken beispielweise von Windows nach Solaris Sparc konvertieren kann.
Sie wollen mehr über Oracles Recovery Manager (RMAN) erfahren? Besuchen Sie den 4-tägigen ORDIX Recovery Manager Workshop. Weitere Informationen zu diesem Workshop finden Sie in unserem Online-Trainingsshop unter http://training.ordix.de.
Andreas Kother (info@ordix.de).