Note:

Migre Oracle Database a OCI mediante V4 Tablespaces Transportables entre Plataformas y actualice de 12c a 19c

Introducción

En este tutorial se tratan los pasos necesarios para utilizar V4 Tablespaces Transportables entre Plataformas (XTTS) con copias de seguridad incrementales de Oracle Recovery Manager (RMAN) para migrar datos entre sistemas que tienen diferentes formatos endian, con la menor cantidad de tiempo de inactividad de la aplicación.

El primer paso será copiar una copia de seguridad completa del origen al destino. A continuación, mediante el uso de una serie de copias de seguridad incrementales, cada una más pequeña que la anterior, los datos del sistema de destino se pueden actualizar casi con el sistema de origen, antes de que sea necesario un tiempo de inactividad. Este procedimiento requiere tiempo de inactividad solo durante la copia de seguridad incremental final y la exportación o importación de metadatos.

En este tutorial se describen los procedimientos V4 para la copia de seguridad incremental entre plataformas que se pueden utilizar con 11.2.0.3 y versiones posteriores.

Detalles de Entorno

Objetivos

Requisitos

Tarea 1: Preparación de la Base de Datos Origen

  1. Ejecute la siguiente consulta para comprobar el formato endian en la base de datos origen.

    col PLATFORM_NAME for a50
    select platform_name,platform_id, endian_format from v$transportable_platform;
    
  2. Identifique los tablespaces en la base de datos origen que se transportarán. Ejecute la siguiente consulta si va a migrar todos los tablespaces.

    select tablespace_name from dba_tablespaces where contents='PERMANENT' and tablespace_name not in ('SYSTEM','SYSAUX');
    
  3. Cree la vista transport_set_violations en la base de datos de origen.

    exec dbms_tts.transport_set_check('<list of tablespaces with comma saperated>');
    SELECT * FROM SYS.TRANSPORT_SET_VIOLATIONS;
    
  4. (Opcional) Active el seguimiento de cambios de bloque en la base de datos de origen para mejorar el rendimiento de las copias de seguridad incrementales.

  5. Verifique que todos los tablespaces están en línea en la base de datos origen.

  6. Elimine los índices espaciales de parámetros de índice de reconstrucción y modifique los índices espaciales no utilizables.

    • Este paso comprueba para asegurarse de que no tiene el parámetro de reconstrucción de índice en los índices espaciales. Para entornos multiinquilino, ejecute primero el siguiente comando para definir el campo SID de la base de datos en el nombre de la base de datos conectable para la base de datos Oracle (NOMBRE de PDB).

      export ORACLE_PDB_SID=[PDB NAME]
      
    • Para ver si tiene algún parámetro de índice de reconstrucción, en el nodo del servidor de base de datos de origen, como propietario del sistema de archivos del servidor de base de datos de origen y de la instancia de base de datos, utilice SQL*Plus para conectarse a la base de datos de origen como sysdba y ejecutar la siguiente consulta.

      select owner,index_name from dba_indexes where index_type='DOMAIN' and upper(parameters) like '%REBUILD%';
      
    • Para eliminar el parámetro de reconstrucción de índice, utilice SQL*Plus para conectarse a la base de datos origen como propietario del índice y ejecute la siguiente consulta.

      alter index [index name] rebuild parameters [parameters]
      
  7. Sincronizar índices de texto. Utilice SQL*Plus para conectarse a la base de datos origen como SYSDBA y ejecute la siguiente consulta para buscar todos los índices pendientes de sincronización.

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

    Para sincronizar los índices, ejecute la siguiente consulta.

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

Tarea 2: Preparación de la base de datos de destino

  1. Cree el tablespace temporal de nuevos usuarios. Si la base de datos destino es un entorno multi-inquilino, conéctese a la PDB.

    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;
    

    Utilice la salida anterior del lenguaje de definición de datos (DDL), sustituya el nombre del grupo de discos como se indica a continuación y cree el tablespace de nuevos usuarios.

    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;
    

    Asigne el tablespace de los nuevos usuarios USERS_OCI a todos los usuarios de la base de datos que tengan el tablespace por defecto USERS mediante la siguiente consulta.

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

    La salida de la consulta debe devolver 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. Cree tablespaces temporales en la base de datos destino. Ejecute la siguiente consulta en el origen y recopile los detalles del 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. Cree el directorio nls/data/9idata para las aplicaciones de 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. Cree $ORACLE_HOME/appsutil/jre para las aplicaciones de Oracle E-Business Suite. Copie la carpeta appsutil de la base de datos origen en la ruta $ORACLE_HOME al servidor de la base de datos destino en la ruta $ORACLE_HOME. Ejecute los siguientes comandos en todos los nodos de los servidores de base de datos de destino, una vez que se haya copiado la carpeta.

    cd $ORACLE_HOME/appsutil
    ln -s $ORACLE_HOME/jdk/jre
    cd $ORACLE_HOME/jdk/jre/lib/ext
    cp $ORACLE_HOME/jlib/orai18n.jar .
    
  5. Configure el esquema sys para las aplicaciones de Oracle E-Business Suite.

    export ORACLE_PDB_SID=[PDB_NAME]
    sqlplus / as sysdba
    show con_name
    @audb19c.sql
    
  6. Configure el esquema del sistema para las aplicaciones de Oracle E-Business Suite.

    export ORACLE_PDB_SID=[PDB_NAME]
    sqlplus / as sysdba
    show con_name
    @ausy19c.sql
    
  7. Defina el parámetro CTXSYS para las aplicaciones de 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. Recopile estadísticas automáticamente para las aplicaciones de 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;
    

Tarea 3: Pasos XTTS V4 incrementales

Tarea 3.1: Fase inicial

  1. Descargue los últimos scripts perl de v4 y descomprímalos desde aquí: V4 Reduce el tiempo de inactividad del tablespace transportable mediante la copia de seguridad incremental entre plataformas (ID de documento 2471245.1). Cree directorios para descomprimir los scripts y el directorio temporal.

    Por ejemplo:

    mkdir -p <Backup_location>/XTTS_Migration
    mkdir -p <Backup_location>/XTTS_Migration/XTTS_TEMP
    
  2. Edite el archivo xtt.properties en el sistema de origen con la configuración específica del sitio. Para obtener más información sobre los parámetros del archivo xtt.properties, consulte la descripción de los parámetros en la sección xtt.properties del archivo de configuración aquí: V4 Reduce Transportable Tablespace Downtime using Cross Platform Incremental Backup (Doc ID 2471245.1). Para este procedimiento, solo son obligatorios los siguientes parámetros. Otros son opcionales y/o están disponibles para su uso.

    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
    

Tarea 3.2: Fase de preparación

  1. Ejecute la copia de seguridad en el sistema de origen. En el sistema de origen, conéctese como usuario de Oracle con el entorno (variables de entorno ORACLE_HOME y ORACLE_SID) que apunta a la base de datos de origen, ejecute la copia de seguridad de la siguiente forma.

    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. Transfiera los siguientes archivos al servidor de base de datos de destino.

    • Copias de seguridad creadas desde el origen src_scratch_location hasta el destino dest_scratch_location.

    • Archivo res.txt del origen $TMPDIR al destino $TMPDIR.

    En el siguiente ejemplo, scp se utiliza para transferir la copia de seguridad level=0 creada por el paso anterior del sistema de origen al sistema de destino.

    [oracle@source]$ scp /src_scratch_location/* oracle@dest:/dest_scratch
    [oracle@source]$ scp res.txt oracle@dest:/home/oracle/xtt
    
  3. Restaure los archivos de datos en el sistema de destino.

    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 &
    

Tarea 3.3: Fase de arrastre

Durante esta fase, se crea una copia de seguridad incremental a partir de la base de datos origen, se transfiere al sistema de destino, se convierte al formato endian del sistema de destino y, a continuación, se aplica a las copias de archivos de datos de destino convertidas para aplicarlas. Esta fase se puede ejecutar varias veces. Cada copia de seguridad incremental sucesiva debe tardar menos tiempo que la copia de seguridad incremental anterior y actualizará las copias del archivo de datos de destino con la base de datos de origen. Los datos que se transportan (origen) son totalmente accesibles durante esta fase.

Nota: Se pueden ejecutar varias copias de seguridad en el origen sin aplicarlas al destino. Los archivos de copia de seguridad y res.txt se deben copiar antes de ejecutar el comando '–restore' en el destino.

  1. Cree una copia de seguridad incremental de los tablespaces que se transportan en el sistema de origen.

    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 &
    

    Este paso creará una copia de seguridad incremental para todos los tablespaces mostrados en el archivo xtt.properties.

  2. Transfiera copias de seguridad incrementales y res.txt al sistema de destino. Transfiera las copias de seguridad incrementales (entre src_scratch_location y dest_scratch_location) y res.txt (entre $TMPDIRs) del origen al destino. La lista de archivos de copia de seguridad incremental de la copia de seguridad actual se puede encontrar en el archivo incrbackups.txt del sistema de origen.

    Por ejemplo:

    [oracle@source]$ scp `cat incrbackups.txt` oracle@dest:/dest_scratch_location
    [oracle@source]$ scp res.txt oracle@dest:/home/oracle/xtt
    
  3. Aplique la copia de seguridad incremental a las copias del archivo de datos en el sistema de destino. En el sistema de destino, conectado como usuario de Oracle con el entorno (variables de entorno ORACLE_HOME y ORACLE_SID) que apunta a la base de datos de destino, ejecute el paso de transferencia de archivos de datos de la siguiente manera.

    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
    

    El paso de aplicación de transacciones pendientes se conecta a la base de datos destino y aplica las copias de seguridad incrementales en los archivos de datos de los tablespaces para cada tablespace transportado.

    Nota: Aunque se pueden ejecutar varias copias de seguridad en el origen sin aplicarlas en el destino, el archivo res.txt se debe copiar después de la última copia de seguridad y antes de ejecutar --restore en el destino.

    Repita la fase de avance hasta la ventana de migración total de la base de datos.

Tarea 3.4: Fase de copia de seguridad incremental final

  1. Modifique los tablespaces de origen para que sólo se lean en la base de datos de origen. Ejecute la siguiente consulta si todos los tablespaces se transportan a la base de datos destino.

    set lines 300
    select 'alter tablespace "'||tablespace_name||'" read only;' from dba_tablespaces where contents='PERMANENT' and tablespace_name not in ('SYSTEM','SYSAUX');
    
  2. Cree la copia de seguridad incremental final de los tablespaces que se transportan en el sistema de origen.

    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. Transfiera copias de seguridad incrementales y res.txt al sistema de destino.

    Por ejemplo:

    [oracle@source]$ scp 'cat incrbackups.txt' oracle@dest:/dest_scratch_location
    [oracle@source]$ scp res.txt oracle@dest:/home/oracle/xtt
    
  4. Aplique la última copia de seguridad incremental a los archivos de datos de destino.

    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 &
    

Tarea 3.5: Fase de Transporte: Exportación de Metadatos y Tablespaces de Plugin a la Base de Datos Destino

  1. Cree un directorio para almacenar los archivos de copia de seguridad de exportación.

    Por ejemplo:

    mkdir -p <Backup_location>/XTTS_DPUMP
    

    Ejecute la siguiente consulta para crear el directorio en la base de datos origen.

    create or replace directory XTTS_DUMP as '<Backup_location>/XTTS_DUMP';
    grant read,write on directory XTTS_DUMP to system;
    
  2. Prepare el archivo parfile de exportación.

    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. Ejecute la exportación del pump de datos en la base de datos origen.

    nohup expdp system/<password>@<source_db_name> parfile= xtts_expdp.par &
    
  4. Ejecute el siguiente comando en el servidor de la base de datos destino, que genera el archivo de parámetros de ejemplo para la importación.

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

    Actualice las siguientes líneas de parfile generadas en el paso anterior.

    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
    

    El parfile de importación final debe tener el siguiente aspecto:

    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. Desactive los siguientes parámetros relacionados con la auditoría hasta que finalice la importación como se mencionó. Vuelva a activarlas una vez finalizada la importación.

    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. Ejecute la importación de pump de datos en la base de datos destino.

    1. Cree un directorio para copiar los archivos de copia de seguridad de exportación.

      Por ejemplo:

      mkdir -p <Backup_location>/XTTS_DPUMP
      
    2. Ejecute el siguiente comando para crear un directorio en la base de datos origen.

      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. Active los siguientes parámetros relacionados con la auditoría después de finalizar la importación.

    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. Validar los datos transportados.

    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. Asigne el tablespace de usuarios para revertir los cambios realizados en la preparación de la base de datos destino.

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

    Valide los datos en las bases de datos de origen y destino.

Agradecimientos

Más recursos de aprendizaje

Explore otros laboratorios en docs.oracle.com/learn o acceda a más contenido de formación gratuita en el canal YouTube de Oracle Learning. Además, visita education.oracle.com/learning-explorer para convertirte en un Oracle Learning Explorer.

Para obtener documentación sobre el producto, visite Oracle Help Center.