Hinweis:

Migrieren Sie Oracle Database mit V4 Cross Platform Transportable Tablespaces zu OCI, und führen Sie ein Upgrade von 12c auf 19c aus

Einführung

In diesem Tutorial werden die Schritte beschrieben, die zur Verwendung von V4 Cross Platform Transportable Tablespaces (XTTS) mit inkrementellen Backups von Oracle Recovery Manager (RMAN) erforderlich sind, um Daten zwischen Systemen mit unterschiedlichen Endian-Formaten und mit der geringsten Ausfallzeit der Anwendung zu migrieren.

Der erste Schritt besteht darin, ein vollständiges Backup von der Quelle in das Ziel zu kopieren. Wenn Sie dann eine Reihe inkrementeller Backups verwenden, die jeweils kleiner als die letzten sind, können die Daten im Zielsystem nahezu auf den aktuellen Stand des Quellsystems gebracht werden, bevor eine Ausfallzeit erforderlich ist. Für dieses Verfahren sind nur während des letzten inkrementellen Backups und des Metadatenexports oder -imports Ausfallzeiten erforderlich.

In diesem Tutorial werden die V4-Prozeduren für plattformübergreifendes inkrementelles Backup beschrieben, die mit 11.2.0.3 und höher verwendet werden können.

Umgebungsdetails

Ziele

Voraussetzungen

Aufgabe 1: Quelldatenbank vorbereiten

  1. Führen Sie die folgende Abfrage aus, um das Endian-Format in der Quelldatenbank zu prüfen.

    col PLATFORM_NAME for a50
    select platform_name,platform_id, endian_format from v$transportable_platform;
    
  2. Identifizieren Sie die Tablespaces in der Quelldatenbank, die übertragen werden sollen. Führen Sie die folgende Abfrage aus, wenn Sie alle Tablespaces migrieren.

    select tablespace_name from dba_tablespaces where contents='PERMANENT' and tablespace_name not in ('SYSTEM','SYSAUX');
    
  3. Erstellen Sie die View transport_set_violations in der Quelldatenbank.

    exec dbms_tts.transport_set_check('<list of tablespaces with comma saperated>');
    SELECT * FROM SYS.TRANSPORT_SET_VIOLATIONS;
    
  4. (Optional) Aktivieren Sie das Block Change Tracking in der Quelldatenbank, um die Performance inkrementeller Backups zu verbessern.

  5. Prüfen Sie, ob alle Tablespaces in der Quelldatenbank online sind.

  6. Entfernen Sie Spatial Indexes für neu erstellte Indexparameter, und ändern Sie unbrauchbare Spatial Indexes.

    • Dieser Schritt stellt sicher, dass der Parameter für die Neuerstellung des Index nicht in den Spatial Indexes enthalten ist. Führen Sie für Mehrmandantenumgebungen zuerst den folgenden Befehl aus, um das Datenbank-SID-Feld auf den Namen der integrierbaren Datenbank für die Oracle-Datenbank (PDB NAME) zu setzen.

      export ORACLE_PDB_SID=[PDB NAME]
      
    • Um festzustellen, ob Sie Indexparameter neu erstellen, melden Sie sich auf dem Serverknoten der Quelldatenbank als Eigentümer des Dateisystems und der Datenbankinstanz des Quelldatenbankservers mit SQL*Plus als sysdba bei der Quelldatenbank an, und führen Sie die folgende Abfrage aus.

      select owner,index_name from dba_indexes where index_type='DOMAIN' and upper(parameters) like '%REBUILD%';
      
    • Um den Parameter für die Neuerstellung des Index zu entfernen, melden Sie sich mit SQL*Plus als Eigentümer des Index bei der Quelldatenbank an, und führen Sie die folgende Abfrage aus.

      alter index [index name] rebuild parameters [parameters]
      
  7. Textindizes synchronisieren. Melden Sie sich mit SQL*Plus als SYSDBA bei der Quelldatenbank an, und führen Sie die folgende Abfrage aus, um alle Indizes mit ausstehender Synchronisierung zu suchen.

    select pnd_index_owner,pnd_index_name,count(*) from ctxsys.ctx_pending group by pnd_index_owner,pnd_index_name;
    

    Um die Indizes zu synchronisieren, führen Sie die folgende Abfrage aus.

    exec ctx_ddl.sync_index('[index owner].[index name]');
    

Aufgabe 2: Zieldatenbank vorbereiten

  1. Erstellen Sie einen temporären neuen Benutzer-Tablespace. Wenn die Zieldatenbank eine mehrmandantenfähige Umgebung ist, melden Sie sich bei der PDB an.

    alter session set container=[PDB NAME]
    select TABLESPACE_NAME from dba_tablespaces where TABLESPACE_NAME='USERS_OCI';
    select TABLESPACE_NAME from dba_tablespaces order by 1;
    set long 99999
    SELECT DBMS_METADATA.GET_DDL ('TABLESPACE','USERS') from dual;
    

    Verwenden Sie die obige DDL-(Data Definition Language-)Ausgabe, ersetzen Sie den Datenträgergruppennamen wie unten, und erstellen Sie einen neuen Benutzer-Tablespace.

    CREATE BIGFILE TABLESPACE USERS_OCI DATAFILE '+DATAC2'
    SIZE 1073741824
    AUTOEXTEND ON NEXT 17179869184 MAXSIZE 33554431M
    LOGGING ONLINE PERMANENT BLOCKSIZE 8192
    EXTENT MANAGEMENT LOCAL AUTOALLOCATE
    ENCRYPTION USING 'AES256' ENCRYPT DEFAULT
    NOCOMPRESS SEGMENT SPACE MANAGEMENT AUTO;
    

    Weisen Sie den neuen Benutzer-Tablespace USERS_OCI mit der folgenden Abfrage allen Datenbankbenutzern zu, die über den Standard-Tablespace USERS verfügen.

    select 'alter user '||username||' default tablespace users_OCI;' from dba_users where default_tablespace='USERS';
    

    Die Ausgabe für die Abfrage muss 0 zurückgeben.

    select count(*) from dba_users where default_tablespace='USERS';
    ALTER DATABASE DEFAULT TABLESPACE USERS_OCI;
    drop tablespace users including contents and datafiles;
    select TABLESPACE_NAME from dba_tablespaces where TABLESPACE_NAME='USERS';
    
  2. Erstellen Sie temporäre Tablespaces in der Zieldatenbank. Führen Sie die folgende Abfrage für die Quelle aus, und erfassen Sie die Tablespace-Details.

    select TABLESPACE_NAME from dba_tablespaces where CONTENTS='TEMPORARY';
    Create temp tablespaces on target database like below example.
    create bigfile temporary tablespace USER_TEMP tempfile size 672m autoextend on next 672m extent management local;
    
  3. Erstellen Sie das Verzeichnis nls/data/9idata für Oracle E-Business Suite-Anwendungen.

    srvctl getenv database -d $ORACLE_UNQNAME
    perl $ORACLE_HOME/nls/data/old/cr9idata.pl  --> on all the nodes of the cluster
    srvctl setenv database -d $ORACLE_UNQNAME -t ORA_NLS10=$ORACLE_HOME/nls/data/9idata
    srvctl getenv database -d $ORACLE_UNQNAME
    
  4. Erstellen Sie $ORACLE_HOME/appsutil/jre für Oracle E-Business Suite-Anwendungen. Kopieren Sie den Ordner appsutil aus der Quelldatenbank unter dem Pfad $ORACLE_HOME in den Zieldatenbankserver unter dem Pfad $ORACLE_HOME. Führen Sie die folgenden Befehle auf allen Knoten der Zieldatenbankserver aus, nachdem der Ordner kopiert wurde.

    cd $ORACLE_HOME/appsutil
    ln -s $ORACLE_HOME/jdk/jre
    cd $ORACLE_HOME/jdk/jre/lib/ext
    cp $ORACLE_HOME/jlib/orai18n.jar .
    
  5. Sys-Schema für Oracle E-Business Suite-Anwendungen einrichten

    export ORACLE_PDB_SID=[PDB_NAME]
    sqlplus / as sysdba
    show con_name
    @audb19c.sql
    
  6. Richten Sie das Systemschema für Oracle E-Business Suite-Anwendungen ein.

    export ORACLE_PDB_SID=[PDB_NAME]
    sqlplus / as sysdba
    show con_name
    @ausy19c.sql
    
  7. Legen Sie den Parameter CTXSYS für Oracle E-Business Suite-Anwendungen fest.

    export ORACLE_PDB_SID=[PDB_NAME]
    sqlplus / as sysdba
    show con_name
    exec ctxsys.ctx_adm.set_parameter('file_access_role', 'public');
    
  8. Erfassen Sie Statistiken automatisch für Oracle E-Business Suite-Anwendungen.

    export ORACLE_PDB_SID=[PDB_NAME]
    sqlplus / as sysdba
    show con_name
    alter system enable restricted session;
    @adstats.sql
    alter system disable restricted session;
    

Aufgabe 3: Inkrementelle V4-XTTS-Schritte

Aufgabe 3.1: Anfangsphase

  1. Laden Sie die neuesten v4 perl-Skripte herunter, und dekomprimieren Sie sie hier: V4 Reduce Transportable Tablespace Downtime using Cross Platform Incremental Backup (Dok.-ID 2471245.1). Erstellen Sie Verzeichnisse, um die Skripte und das temporäre Verzeichnis zu dekomprimieren.

    Beispiel:

    mkdir -p <Backup_location>/XTTS_Migration
    mkdir -p <Backup_location>/XTTS_Migration/XTTS_TEMP
    
  2. Bearbeiten Sie die Datei xtt.properties im Quellsystem mit Ihrer sitespezifischen Konfiguration. Weitere Informationen zu den Parametern in der Datei xtt.properties finden Sie in der Beschreibung der Parameter im Abschnitt xtt.properties der Konfigurationsdatei: V4 Transportable Tablespace Downtime using Cross Platform Incremental Backup (Dok.-ID 2471245.1) reduzieren. Für dieses Verfahren sind nur die folgenden Parameter erforderlich. Andere sind optional und/oder verfügbar.

    tablespaces=<list of tablespaces that are migrated with comma saperated>
    platformid= <obtained from the query select platform_name,platform_id, endian_format from v$transportable_platform>
    src_scratch_location= <Backup location on source database server>
    dest_scratch_location= <Backup location on target database server>
    dest_datafile_location= <path for the datafile location of PDB >
    destconnstr=sys/<password>>@<Target PDB Connect String>
    usermantransport=1 - It is recommended this be set if the source database is running 12c or higher. This causes new 12c (and higher)
    parallel=1
    

Aufgabe 3.2: Phase vorbereiten

  1. Führen Sie das Backup auf dem Quellsystem aus. Melden Sie sich im Quellsystem als Oracle-Benutzer mit den Umgebungsvariablen (ORACLE_HOME und ORACLE_SID) an, die auf die Quelldatenbank verweisen, und führen Sie das Backup wie folgt aus.

    export TMPDIR=<Backup_location>/XTTS_Migration/XTTS_TEMP
    export NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1
    nohup $ORACLE_HOME/perl/bin/perl xttdriver.pl --backup --debug 3 &
    
  2. Übertragen Sie die folgenden Dateien an den Zieldatenbankserver.

    • Backups, die aus Quelle src_scratch_location in Ziel dest_scratch_location erstellt wurden.

    • Die Datei res.txt von der Quelle $TMPDIR bis zum Ziel $TMPDIR.

    Im folgenden Beispiel wird scp verwendet, um das vom vorherigen Schritt erstellte Level=0-Backup vom Quellsystem in das Zielsystem zu übertragen.

    [oracle@source]$ scp /src_scratch_location/* oracle@dest:/dest_scratch
    [oracle@source]$ scp res.txt oracle@dest:/home/oracle/xtt
    
  3. Stellen Sie die Datendateien auf dem Zielsystem wieder her.

    export TMPDIR=<Backup_location>/XTTS_Migration/XTTS_TEMP
    export NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1
    cp nohup.out nohup.out_L0
    nohup $ORACLE_HOME/perl/bin/perl xttdriver.pl --restore --debug 3 &
    

Aufgabe 3.3: Vorwärtssetzungsphase

In dieser Phase wird ein inkrementelles Backup aus der Quelldatenbank erstellt, in das Zielsystem übertragen, in das Endian-Format des Zielsystems konvertiert und dann auf die konvertierten Zieldatendateikopien angewendet, um sie vorwärts zu rollen. Diese Phase kann mehrmals ausgeführt werden. Jedes aufeinanderfolgende inkrementelle Backup sollte weniger Zeit in Anspruch nehmen als das vorherige inkrementelle Backup. Dadurch werden die Datendateikopien des Ziels mit der Quelldatenbank aktueller. Die übertragenen Daten (Quelle) sind in dieser Phase vollständig zugänglich.

Hinweis: Mehrere Backups können für die Quelle ausgeführt werden, ohne sie auf das Ziel anzuwenden. Die Backupdateien und res.txt müssen kopiert werden, bevor der Befehl "-restore" am Ziel ausgeführt wird.

  1. Erstellen Sie ein inkrementelles Backup der Tablespaces, die auf dem Quellsystem übertragen werden.

    export TMPDIR=<Backup_location>/XTTS_Migration/XTTS_TEMP
    export NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1
    cp nohup.out nohup.out_1
    nohup $ORACLE_HOME/perl/bin/perl xttdriver.pl --backup --debug 3 &
    

    In diesem Schritt wird ein inkrementelles Backup für alle Tablespaces erstellt, die in der Datei xtt.properties aufgeführt sind.

  2. Übertragen Sie inkrementelle Backups und res.txt an das Zielsystem. Übertragen Sie die inkrementellen Backups (zwischen src_scratch_location und dest_scratch_location) und res.txt (zwischen $TMPDIRs) von der Quelle an das Ziel. Die Liste der inkrementellen Backupdateien aus dem aktuellen Backup finden Sie in der Datei incrbackups.txt im Quellsystem.

    Beispiel:

    [oracle@source]$ scp `cat incrbackups.txt` oracle@dest:/dest_scratch_location
    [oracle@source]$ scp res.txt oracle@dest:/home/oracle/xtt
    
  3. Wenden Sie das inkrementelle Backup auf die Datendateikopien im Zielsystem an. Führen Sie auf dem Zielsystem, bei dem Sie als Oracle-Benutzer angemeldet sind und die Umgebungsvariablen ORACLE_HOME und ORACLE_SID auf die Zieldatenbank zeigen, den Schritt "Datendateien vorwärtsrollen" wie folgt aus.

    export TMPDIR=<Backup_location>/XTTS_Migration/XTTS_TEMP
    export NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1
    cp nohup.out nohup.out_3
    $ORACLE_HOME/perl/bin/perl xttdriver.pl --restore --debug 3
    

    Der Roll Forward-Schritt stellt eine Verbindung zur Zieldatenbank her und wendet die inkrementellen Backups für die Datendateien der Tablespaces für jeden übertragenen Tablespace an.

    Hinweis: Obwohl mehrere Backups für die Quelle ausgeführt werden können, ohne auf das Ziel angewendet zu werden, muss die Datei res.txt nach dem letzten Backup und vor der Ausführung von --restore am Ziel kopiert werden.

    Wiederholen Sie die Roll Forward-Phase bis zum Cutover-Fenster der Datenbank.

Aufgabe 3.4: Endgültige inkrementelle Backupphase

  1. Ändern Sie Quell-Tablespaces in der Quelldatenbank in READ ONLY. Führen Sie die folgende Abfrage aus, wenn alle Tablespaces in die Zieldatenbank übertragen werden.

    set lines 300
    select 'alter tablespace "'||tablespace_name||'" read only;' from dba_tablespaces where contents='PERMANENT' and tablespace_name not in ('SYSTEM','SYSAUX');
    
  2. Erstellen Sie das letzte inkrementelle Backup der Tablespaces, die auf dem Quellsystem übertragen werden.

    export TMPDIR=<Backup_location>/XTTS_Migration/XTTS_TEMP
    export NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1
    cp nohup.out nohup.out_4
    nohup $ORACLE_HOME/perl/bin/perl xttdriver.pl --backup --debug 3 &
    
  3. Übertragen Sie inkrementelle Backups und res.txt an das Zielsystem.

    Beispiel:

    [oracle@source]$ scp 'cat incrbackups.txt' oracle@dest:/dest_scratch_location
    [oracle@source]$ scp res.txt oracle@dest:/home/oracle/xtt
    
  4. Wenden Sie das letzte inkrementelle Backup auf Zieldatendateien an.

    export TMPDIR=<Backup_location>/XTTS_Migration/XTTS_TEMP
    export NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1
    cp nohup.out nohup.out_5
    nohup $ORACLE_HOME/perl/bin/perl xttdriver.pl --restore --debug 3 &
    

Aufgabe 3.5: Transportphase - Metadaten und Plug-in-Tablespaces in die Zieldatenbank exportieren

  1. Erstellen Sie ein Verzeichnis, in dem die Exportbackupdateien gespeichert werden.

    Beispiel:

    mkdir -p <Backup_location>/XTTS_DPUMP
    

    Führen Sie die folgende Abfrage aus, um ein Verzeichnis in der Quelldatenbank zu erstellen.

    create or replace directory XTTS_DUMP as '<Backup_location>/XTTS_DUMP';
    grant read,write on directory XTTS_DUMP to system;
    
  2. Export-Parameterdatei vorbereiten.

    vi xtts_expdp.par
    
    directory=XTTS*DUMP
    metrics=y
    dumpfile=xttsfulltts*%U.dmp
    filesize=1048576000
    full=y
    exclude=STATISTICS
    logfile=expfulltts.log
    parallel=4
    transportable=always
    EXCLUDE=NORMAL_OPTIONS
    
  3. Führen Sie den Data Pump-Export in der Quelldatenbank aus.

    nohup expdp system/<password>@<source_db_name> parfile= xtts_expdp.par &
    
  4. Führen Sie den folgenden Befehl auf dem Zieldatenbankserver aus, der die Beispielparameterdatei für den Import generiert.

    export TMPDIR=<Backup_location>/XTTS_Migration/XTTS_TEMP
    export NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1
    $ORACLE_HOME/perl/bin/perl xttdriver.pl -e
    

    Aktualisieren Sie die folgenden Parfile-Zeilen, die im vorherigen Schritt generiert wurden.

    impdp directory=<DATA_PUMP_DIR> logfile=<tts_imp.log> \
    network_link=<ttslink> transport_full_check=no \ replace these parameters
    transport_tablespaces=<tablespace list> \ delete this line from parfile
    

    Die endgültige Import-Parameterdatei sollte wie folgt aussehen:

    directory=XTTS*DUMP logfile=impdpfulltts.log \
    metrics=y dumpfile=xttsfulltts*%U.dmp parallel=6 full=y logtime=all exclude=STATISTICS \
    transport_datafiles=<list of datafile path generated from above parfile>
    
  5. Deaktivieren Sie die folgenden auditbezogenen Parameter bis zum Abschluss des Imports wie angegeben. Aktivieren Sie sie nach Abschluss des Imports erneut.

    show parameter audit_sys_operations
    show parameter audit_trail
    alter system set audit_trail=none scope=spfile sid='_';
    alter system set audit_sys_operations=FALSE scope=spfile sid='_';
    srvctl stop database -d ${ORACLE_UNQNAME}
    srvctl start database -d ${ORACLE_UNQNAME}
    show parameter audit_sys_operations
    show parameter audit_trail
    
  6. Führen Sie den Data Pump-Import in der Zieldatenbank aus.

    1. Erstellen Sie ein Verzeichnis, um die Exportbackupdateien zu kopieren.

      Beispiel:

      mkdir -p <Backup_location>/XTTS_DPUMP
      
    2. Führen Sie den folgenden Befehl aus, um ein Verzeichnis in der Quelldatenbank zu erstellen.

      create or replace directory XTTS_DUMP as '<Backup_location>/XTTS_DUMP';
      grant read,write on directory XTTS_DUMP to system;
      
      nohup impdp system/<password>@<>target_db_name> parfile=<parfile_name> &
      
  7. Aktivieren Sie die folgenden auditbezogenen Parameter nach Abschluss des Imports.

    show parameter audit_sys_operations
    show parameter audit_trail
    alter system set audit_trail=DB scope=spfile sid='_';
    alter system set audit_sys_operations=TRUE scope=spfile sid='_';
    srvctl stop database -d ${ORACLE_UNQNAME}
    srvctl start database -d ${ORACLE_UNQNAME}
    show parameter audit_sys_operations
    show parameter audit_trail
    
  8. Validieren Sie die übertragenen Daten.

    rman target sys/<password>@<>target_db_name> trace=rman_trace.trc log=<backup_location>/tablespace_validate.log
    
    validate tablespace <list of tablespaces transported with comma saperated> check logical;
    
  9. Weisen Sie den Benutzer-Tablespace zu, um die bei der Vorbereitung der Zieldatenbank vorgenommenen Änderungen rückgängig zu machen.

    select 'alter user '||username||' default tablespace users;' from dba_users where default_tablespace='USERS_OCI';
    

    Daten in Quell- und Zieldatenbanken validieren

Danksagungen

Weitere Lernressourcen

Sehen Sie sich andere Übungen zu docs.oracle.com/learn an, oder greifen Sie im Oracle Learning YouTube-Channel auf weitere kostenlose Lerninhalte zu. Besuchen Sie außerdem education.oracle.com/learning-explorer, um Oracle Learning Explorer zu werden.

Die Produktdokumentation finden Sie im Oracle Help Center.