Remarques :

Migrez Oracle Database vers OCI à l'aide de tablespaces transportables interplate-forme V4 et effectuez une mise à niveau de 12c vers 19c

Introduction

Ce tutoriel présente les étapes nécessaires pour utiliser V4 Cross Platform Transportable Tablespaces (XTTS) avec les sauvegardes incrémentielles Oracle Recovery Manager (RMAN) afin de migrer des données entre des systèmes ayant des formats d'endian différents, avec le moins de temps d'inactivité d'application.

La première étape consiste à copier une sauvegarde complète de la source vers la destination. Ensuite, en utilisant une série de sauvegardes incrémentielles, chacune inférieure à la dernière, les données du système de destination peuvent être mises à jour presque avec le système source, avant tout temps d'inactivité. Cette procédure nécessite un temps d'inactivité uniquement pendant la sauvegarde incrémentielle finale, ainsi que l'export ou l'import des métadonnées.

Ce tutoriel décrit les procédures V4 pour la sauvegarde incrémentielle interplate-forme qui peuvent être utilisées avec 11.2.0.3 et les versions ultérieures.

Détails d'environnement

Objectifs

Prérequis

Tâche 1 : préparer la base de données source

  1. Exécutez la requête suivante pour vérifier le format Endian sur la base de données source.

    col PLATFORM_NAME for a50
    select platform_name,platform_id, endian_format from v$transportable_platform;
    
  2. Identifiez les tablespaces de la base de données source qui seront transportés. Exécutez l'interrogation suivante si vous migrez tous les tablespaces.

    select tablespace_name from dba_tablespaces where contents='PERMANENT' and tablespace_name not in ('SYSTEM','SYSAUX');
    
  3. Créez la vue transport_set_violations sur la base de données source.

    exec dbms_tts.transport_set_check('<list of tablespaces with comma saperated>');
    SELECT * FROM SYS.TRANSPORT_SET_VIOLATIONS;
    
  4. (Facultatif) Activez le suivi des modifications de bloc sur la base de données source pour améliorer les performances des sauvegardes incrémentielles.

  5. Vérifiez que tous les tablespaces sont en ligne dans la base de données source.

  6. Enlevez les index spatiaux des paramètres de reconstruction d'index et modifiez les index spatiaux inutilisables.

    • Cette étape vérifie que vous ne disposez pas du paramètre de reconstruction d'index dans les index spatiaux. Pour les environnements colocatifs, exécutez d'abord la commande suivante afin de définir le champ SID de la base de données sur le nom de la base de données pluggable pour la base de données Oracle (PDB NAME).

      export ORACLE_PDB_SID=[PDB NAME]
      
    • Pour savoir si vous disposez de paramètres de reconstruction d'index sur le noeud du serveur de base de données source, en tant que propriétaire du système de fichiers et de l'instance de base de données du serveur de base de données source, utilisez SQL*Plus pour vous connecter à la base de données source en tant que sysdba et exécutez l'interrogation suivante.

      select owner,index_name from dba_indexes where index_type='DOMAIN' and upper(parameters) like '%REBUILD%';
      
    • Pour supprimer le paramètre de reconstruction d'index, utilisez SQL*Plus pour vous connecter à la base de données source en tant que propriétaire de l'index et exécutez l'interrogation suivante.

      alter index [index name] rebuild parameters [parameters]
      
  7. Synchroniser les index de texte. Utilisez SQL*Plus pour vous connecter à la base de données source en tant que SYSDBA et exécutez l'interrogation suivante pour rechercher tous les index en attente de synchronisation.

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

    Pour synchroniser les index, exécutez l'interrogation suivante.

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

Tâche 2 : préparation de la base de données cible

  1. Créez un tablespace d'utilisateurs temporaire. Si la base de données cible est un environnement colocatif, connectez-vous à la base de données pluggable.

    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;
    

    Utilisez la sortie LDD (langage de définition de données) ci-dessus, remplacez le nom du groupe de disques ci-dessous et créez un tablespace pour les utilisateurs.

    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;
    

    Affectez le tablespace des nouveaux utilisateurs USERS_OCI à tous les utilisateurs de base de données qui disposent du tablespace par défaut USERS à l'aide de la requête suivante.

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

    La sortie de la requête doit renvoyer 0.

    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. Créez des tablespaces temporaires sur la base de données cible. Exécutez l'interrogation suivante sur la source et collectez les détails du tablespace.

    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. Créez le répertoire nls/data/9idata pour les applications Oracle E-Business Suite.

    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. Créez $ORACLE_HOME/appsutil/jre pour les applications Oracle E-Business Suite. Copiez le dossier appsutil de la base de données source sous le chemin $ORACLE_HOME vers le serveur de base de données cible sous le chemin $ORACLE_HOME. Exécutez les commandes suivantes sur tous les noeuds des serveurs de base de données cible, une fois le dossier copié.

    cd $ORACLE_HOME/appsutil
    ln -s $ORACLE_HOME/jdk/jre
    cd $ORACLE_HOME/jdk/jre/lib/ext
    cp $ORACLE_HOME/jlib/orai18n.jar .
    
  5. Configurez le schéma Sys pour les applications Oracle E-Business Suite.

    export ORACLE_PDB_SID=[PDB_NAME]
    sqlplus / as sysdba
    show con_name
    @audb19c.sql
    
  6. Configurez le schéma système pour les applications Oracle E-Business Suite.

    export ORACLE_PDB_SID=[PDB_NAME]
    sqlplus / as sysdba
    show con_name
    @ausy19c.sql
    
  7. Définissez le paramètre CTXSYS pour les applications Oracle E-Business Suite.

    export ORACLE_PDB_SID=[PDB_NAME]
    sqlplus / as sysdba
    show con_name
    exec ctxsys.ctx_adm.set_parameter('file_access_role', 'public');
    
  8. Collecter automatiquement des statistiques pour les applications Oracle E-Business Suite.

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

Tâche 3 : étapes XTTS V4 incrémentielles

Tâche 3.1 : Phase initiale

  1. Téléchargez les derniers scripts perl v4 et décompressez-les ici : V4 Reduce Transportable Tablespace Downtime using Cross Platform Incremental Backup (ID de document 2471245.1). Créez des répertoires pour décompresser les scripts et le répertoire temporaire.

    Par exemple :

    mkdir -p <Backup_location>/XTTS_Migration
    mkdir -p <Backup_location>/XTTS_Migration/XTTS_TEMP
    
  2. Modifiez le fichier xtt.properties sur le système source avec la configuration propre à votre site. Pour plus d'informations sur les paramètres du fichier xtt.properties, reportez-vous à la description des paramètres dans la section xtt.properties du fichier de configuration ici : V4 Reduce Transportable Tablespace Downtime using Cross Platform Incremental Backup (ID de document 2471245.1). Pour cette procédure, seuls les paramètres suivants sont obligatoires. D'autres sont facultatifs et/ou disponibles.

    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
    

Tâche 3.2 : Préparation de la phase

  1. Exécutez la sauvegarde sur le système source. Sur le système source, connectez-vous en tant qu'utilisateur Oracle avec l'environnement (variables d'environnement ORACLE_HOME et ORACLE_SID) pointant vers la base de données source, exécutez la sauvegarde comme suit.

    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. Transférez les fichiers suivants vers le serveur de base de données cible.

    • Sauvegardes créées à partir de la source src_scratch_location vers la destination dest_scratch_location.

    • Fichier res.txt de la source $TMPDIR vers la destination $TMPDIR.

    Dans l'exemple suivant, scp est utilisé pour transférer la sauvegarde de niveau=0 créée par l'étape précédente du système source vers le système de destination.

    [oracle@source]$ scp /src_scratch_location/* oracle@dest:/dest_scratch
    [oracle@source]$ scp res.txt oracle@dest:/home/oracle/xtt
    
  3. Restaurez les fichiers de données sur le système de destination.

    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 &
    

Tâche 3.3 : Phase de report

Au cours de cette phase, une sauvegarde incrémentielle est créée à partir de la base de données source, transférée vers le système de destination, convertie au format endian du système de destination, puis appliquée aux copies converties du fichier de données de destination pour les réimplémenter. Cette phase peut être exécutée plusieurs fois. Chaque sauvegarde incrémentielle successive doit prendre moins de temps que la sauvegarde incrémentielle précédente et actualise les copies du fichier de données de destination avec la base de données source. Les données transportées (source) sont entièrement accessibles au cours de cette phase.

Remarque : plusieurs sauvegardes peuvent être exécutées sur la source sans les appliquer à la destination. Les fichiers de sauvegarde et res.txt doivent être copiés avant l'exécution de la commande '–restore' sur la destination.

  1. Créez une sauvegarde incrémentielle des tablespaces transportés sur le système source.

    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 &
    

    Cette étape permet de créer une sauvegarde incrémentielle pour tous les tablespaces répertoriés dans le fichier xtt.properties.

  2. Transférez les sauvegardes incrémentielles et res.txt vers le système de destination. Transférez les sauvegardes incrémentielles (entre src_scratch_location et dest_scratch_location) et res.txt (entre $TMPDIRs) de la source vers la destination. La liste des fichiers de sauvegarde incrémentielle de la sauvegarde en cours se trouve dans le fichier incrbackups.txt sur le système source.

    Par exemple :

    [oracle@source]$ scp `cat incrbackups.txt` oracle@dest:/dest_scratch_location
    [oracle@source]$ scp res.txt oracle@dest:/home/oracle/xtt
    
  3. Appliquez la sauvegarde incrémentielle aux copies de fichier de données sur le système de destination. Sur le système de destination, connecté en tant qu'utilisateur Oracle avec l'environnement (variables d'environnement ORACLE_HOME et ORACLE_SID) pointant vers la base de données de destination, exécutez l'étape de réimplémentation des fichiers de données comme suit.

    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
    

    L'étape d'avancement se connecte à la base de données de destination et applique les sauvegardes incrémentielles aux fichiers de données des tablespaces pour chaque tablespace transporté.

    Remarque : bien que plusieurs sauvegardes puissent être exécutées sur la source sans être appliquées sur la destination, le fichier res.txt doit être copié après la dernière sauvegarde et avant que --restore ne soit exécuté sur la destination.

    Répétez la phase de report jusqu'à la fenêtre de basculement de la base de données.

Tâche 3.4 : phase finale de sauvegarde incrémentielle

  1. Remplacez les tablespaces source par READ ONLY dans la base de données source. Exécutez l'interrogation suivante si tous les tablespaces sont transportés vers la base de données cible.

    set lines 300
    select 'alter tablespace "'||tablespace_name||'" read only;' from dba_tablespaces where contents='PERMANENT' and tablespace_name not in ('SYSTEM','SYSAUX');
    
  2. Créez la sauvegarde incrémentielle finale des tablespaces transportés sur le système source.

    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. Transférez les sauvegardes incrémentielles et res.txt vers le système de destination.

    Par exemple :

    [oracle@source]$ scp 'cat incrbackups.txt' oracle@dest:/dest_scratch_location
    [oracle@source]$ scp res.txt oracle@dest:/home/oracle/xtt
    
  4. Appliquez la dernière sauvegarde incrémentielle aux fichiers de données de destination.

    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 &
    

Tâche 3.5 : Phase de transport - Exporter les métadonnées et les tablespaces de module d'extension dans la base de données de destination

  1. Créez un répertoire pour stocker les fichiers de sauvegarde d'export.

    Par exemple :

    mkdir -p <Backup_location>/XTTS_DPUMP
    

    Exécutez la requête suivante pour créer un répertoire dans la base de données source.

    create or replace directory XTTS_DUMP as '<Backup_location>/XTTS_DUMP';
    grant read,write on directory XTTS_DUMP to system;
    
  2. Préparer le fichier PARFILE d'export.

    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. Exécutez l'export Data Pump sur la base de données source.

    nohup expdp system/<password>@<source_db_name> parfile= xtts_expdp.par &
    
  4. Exécutez la commande suivante sur le serveur de base de données cible qui génère l'exemple de fichier Parfile pour l'import.

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

    Mettez à jour les lignes de profil suivantes générées à l'étape précédente.

    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
    

    Le profil d'importation final doit se présenter comme suit :

    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. Désactivez les paramètres d'audit suivants jusqu'à la fin de l'importation comme indiqué. Réactivez-les une fois l'importation terminée.

    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. Exécutez l'import Data Pump sur la base de données cible.

    1. Créez un répertoire pour copier les fichiers de sauvegarde d'export.

      Par exemple :

      mkdir -p <Backup_location>/XTTS_DPUMP
      
    2. Exécutez la commande suivante pour créer un répertoire dans la base de données source.

      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. Activez les paramètres d'audit suivants une fois l'importation terminée.

    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. Validez les données transférées.

    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. Affectez un tablespace aux utilisateurs pour rétablir les modifications apportées lors de la préparation de la base de données cible.

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

    Vérifiez les données sur les bases de données source et cible.

Remerciements

Ressources de formation supplémentaires

Explorez d'autres ateliers sur docs.oracle.com/learn ou accédez à d'autres contenus de formation gratuits sur le canal Oracle Learning YouTube. De plus, visitez le site education.oracle.com/learning-explorer pour devenir un explorateur Oracle Learning.

Pour obtenir la documentation produit, consultez le site Oracle Help Center.