Migrar o Oracle Database para a OCI Usando o M5 Cross-Endian XTTS com Backups Incrementais do RMAN

Introdução

Este tutorial descreve como migrar um Oracle Database para a Oracle Cloud Infrastructure (OCI) usando a Migração de Plataforma M5 Cross Endian com Data Pump Totalmente Transportável e backups incrementais do RMAN.

Esse método permite a migração entre sistemas com diferentes formatos endian, minimizando o tempo de inatividade do aplicativo.

O processo começa com uma cópia de backup completa da origem para o destino. Em seguida, os backups incrementais são aplicados para manter o destino quase sincronizado com a origem. O tempo de inatividade só é necessário durante o backup incremental final e a exportação/importação de metadados.

Detalhes de Ambiente

Objetivos

Pré-requisitos

Tarefa 1: Preparar o Banco de Dados de Origem

  1. Execute a consulta a seguir para verificar o formato endian no banco de dados de origem.

    col PLATFORM_NAME for a50
    select platform_name, platform_id, endian_format from v$transportable_platform;
    
  2. Identifique os tablespaces no banco de dados de origem que serão transportados. Execute a consulta a seguir se estiver migrando todos os tablespaces.

    select tablespace_name from dba_tablespaces where contents='PERMANENT' and tablespace_name not in ('SYSTEM','SYSAUX');
    
  3. Verificar violações do conjunto de transporte:

    exec dbms_tts.transport_set_check('<comma-separated tablespace list>');
    SELECT * FROM SYS.TRANSPORT_SET_VIOLATIONS;
    
  4. (Opcional) Ative o rastreamento de alterações em blocos no banco de dados de origem para melhorar o desempenho dos backups incrementais.

  5. Verifique se todos os tablespaces estão on-line no banco de dados de origem.

Tarefa 2: Preparar o Banco de Dados de Destino

  1. Criar um novo tablespace de usuários.

    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;
    

    Use a saída DDL (Data Definition Language) acima e substitua o nome do grupo de discos conforme abaixo e crie um novo tablespace de usuários.

    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;
    

    Designe o novo tablespace de usuários USERS_OCI a todos os usuários do banco de dados que têm o tablespace padrão USERS usando a consulta a seguir.

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

    A saída da consulta de seleção acima deve retornar 0 após a reatribuição do tablespace de novos usuários.

    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. Criar tablespaces temporários no banco de dados de destino. Execute a consulta a seguir na origem e reúna os detalhes do tablespace.

    Execute a seguinte consulta na origem:

    select TABLESPACE_NAME from dba_tablespaces where CONTENTS='TEMPORARY';
    

    Em seguida, crie tablespaces temporários no banco de dados de destino. Por exemplo:

    create bigfile temporary tablespace USER_TEMP tempfile size 672m autoextend on next 672m extent management local;
    

Tarefa 3: Etapas Incrementais M5 XTTS

Tarefa 3.1: Fase Inicial

  1. Faça download dos scripts M5 mais recentes e descompacte-os aqui: Migração da Plataforma M5 Cross Endian usando Exportação/Importação do Data Pump Totalmente Transportável e Backups Incrementais do RMAN (ID do Documento 2999157.1). Crie um diretório de trabalho em um compartilhamento NFS compartilhado entre a origem e o destino. O caminho para o compartilhamento NFS deve ser idêntico na origem e no destino.

    Se um compartilhamento NFS não for possível, use qualquer armazenamento local. Crie o diretório no host de origem e copie-o para o host de destino. Isso precisa ser repetido várias vezes ao longo do processo. O caminho no host de origem e de destino deve ser idêntico. Caso contrário, serão necessárias várias alterações nos scripts que estejam além do escopo deste procedimento.

    mkdir -p <Shared_location>/XTTS_Migration
    mkdir -p <Shared_location>/XTTS_Migration/Backup
    mkdir -p <Shared_location>/XTTS_Migration/DPPUMP
    cd <Shared_location>
    unzip DBMIG.zip
    

    O arquivo contém:

    • dbmig_driver_m5.sh: Script do driver de migração.
    • impdp.sh: Script do driver de importação.
    • Diretório log: Criado no runtime. Armazena o log de backup do RMAN, logs de migração e logs adicionais.
      • rman_mig_bkp.log: Arquivo de log de migração centralizado.
      • rman_mig_bkp.lck: Bloquear arquivo criado no início de cada backup para impedir a execução simultânea do driver. Se a execução de um driver abortar, o bloqueio não será removido. O problema deve ser investigado e resolvido antes de remover o bloqueio.
    • Diretório cmd: Criado no runtime. Armazena os scripts de backup e restauração do RMAN.
      • dbmig_driver.properties: Variáveis de ambiente.
      • dbmig_ts_list.txt: Lista de tablespaces separados por vírgulas.
  2. Modifique as variáveis em dbmig_driver.properties (no diretório cmd) para refletir o ambiente que você está usando. Consulte a descrição dos parâmetros no arquivo de configuração dbmig_driver.properties seção aqui: Migração da Plataforma Endian Cruzada M5 usando Exportação/Importação do Data Pump Totalmente Transportável e Backups Incrementais do RMAN.

    arquivo de amostra dbmig_driver.properties

    ############################################################
    #Source database properties
    #my_M5_prop_version=2
    # -
    # - ORACLE_HOME Path to Oracle Home
    # - ORACLE_SID SID of the source database
    # - SRC_SCAN Connect string to source database via SCAN.
    # If no SCAN, specify source database network name.
    # Enclose in single quotes
    # Example: '@myhost-scan/db1'
    # Example: '@localhost/pdb1'
    # - MIG_PDB Accepted values: 0, 1
    # Choose 0 if source is non-CDB
    # Choose 1 if source is a PDB
    # - PDB_NAME If source is a PDB, specify PDB name.
    # Else leave blank
    # Example: PDB1
    # - BKP_FROM_STDBY Accepted values: 0, 1
    # Choose 0 to back up from primary database,
    # or if Data Guard is not in use.
    # Choose 1 to back up from standby database.
    ############################################################
    export ORACLE_HOME=/u01/app/oracle/product/19.0.0.0/dbhome_1
    export PATH=$PATH:$ORACLE_HOME/bin
    export ORACLE_SID=soldb1918
    export SRC_SCAN='@scan1/soldb1918'
    export MIG_PDB=0
    export PDB_NAME=
    export BKP_FROM_STDBY=0
    ############################################################
    #Source Data Pump settings
    # - SOURCE_DPDMP Directory path of the directory DATA_PUMP_DIR
    # Example: /u01/app/oracle/m5/data_pump_dir
    # - SOURCE_DPIR Data Pump Directory, typically DATA_PUMP_DIR
    # - SYSTEM_USR Username for Data Pump export.
    # Do not use SYS AS SYSDBA
    # Example: SYSTEM
    # - DP_TRACE Data Pump trace level.
    # Use 0 to disable trace.
    # Use 3FF0300 to full transportable tracing
    # See MOS Doc ID 286496.1 for details.
    # - DP_PARALLEL Data Pump parallel setting.
    # Accepted values: 1 to 999
    # Example: 16
    ############################################################
    export SOURCE_DPDMP=<Shared_location>/XTTS_Migration/DPPUMP
    export SOURCE_DPDIR=DATA_PUMP_DIR
    export SYSTEM_USR=SYSTEM
    export DP_TRACE=0
    export DP_PARALLEL=1
    export DP_ENC_PROMPT=N
    ############################################################
    #Source RMAN settings
    # - BKP_DEST_TYPE Accepted values: DISK, SBT_TAPE
    # Choose DISK to backup up to local storage
    # Choose SBT_TAPE to use ZDLRA
    # - BKP_DEST_PARM If BKP_DEST_TYPE=DISK, enter location for backup:
    # Example: /u01/app/oracle/m5/rman
    # If BKP_DEST_TYPE=SBT_TAPE, enter channel configuration:
    # Example: "'%d_%U' PARMS \"SBT_LIBRARY=<oracle_home>/lib/libra.so,SBT_PARMS=(RA_WALLET='location=file:<oracle_home>/dbs/zdlra credential_alias=<zdlra-connect-string>')\""
    # - CAT_CRED If you use RMAN catalog or ZDLRA, specify connect string to catalog database
    # Example: <scan-name>:<port>/<service>
    # - SECTION_SIZE Section size used in RMAN backups
    # - CHN Number of RMAN channels allocated
    ############################################################
    export BKP_DEST_TYPE=DISK
    export BKP_DEST_PARM=<Shared_location>/XTTS_Migration/Backup
    export CAT_CRED=
    export SECTION_SIZE=64G
    export CHN=8
    ############################################################
    #Destination host settings
    #If specified, the script transfers the RMAN backups and
    #Data Pump dump file to the destination via over SSH.
    #SSH equivalence is required.
    # - DEST_SERVER Network name of the destination server.
    # Leave blank if you manually transfer
    # backups and dump files
    # - DEST_USER User for SSH connection
    # Example: oracle
    # - DEST_WORKDIR The script working directory on destination
    # Example: /u01/app/oracle/m5
    # - DEST_DPDMP The directory path used by DATA_PUMP_DIR
    # in destination database
    # Example: /u01/app/oracle/m5/data_pump_dir
    ############################################################
    export DEST_SERVER=srvadm01
    export DEST_USER=oracle
    export DEST_WORKDIR=<Shared_location>/XTTS_Migration
    export DEST_DPDMP=<Shared_location>/XTTS_Migration/DPDUMP
    ############################################################
    #Advanced settings
    #Normally, you don't need to edit this section
    ############################################################
    export WORKDIR=$PWD
    export LOG_DIR=${WORKDIR}/log
    export CMD_DIR=${WORKDIR}/cmd
    export PATH=$PATH:$ORACLE_HOME/bin
    export DT='date +%y%m%d%H%M%S'
    export CMD_MKDIR='which mkdir'
    export CMD_TOUCH='which touch'
    export CMD_CAT='which cat'
    export CMD_RM='which rm'
    export CMD_AWK='which awk'
    export CMD_SCP='which scp'
    export CMD_CUT='which cut'
    export CMD_PLATFORM='uname'
    if [[ "$CMD_PLATFORM" = "Linux" ]]; then
    export CMD_GREP="/usr/bin/grep"
    else
    if [[ "$CMD_PLATFORM" = "AIX" ]]; then
    export CMD_GREP="/usr/bin/grep"
    else
    if [[ "$CMD_PLATFORM" = "HPUX" ]]; then
    export CMD_GREP="/usr/bin/grep"
    else
    export CMD_GREP='which ggrep'
    fi
    fi
    fi
    export my_M5_prop_version=2
    

    Crie diretórios para arquivos de dump de datapump em bancos de dados de origem e de destino.

    create directory M5_XTTS_MIG as '<Shared_Location>/XTTS_Migration/DPDUMP';
    grant read,write on directory M5_XTTS_MIG  to sys,system;
    

Tarefa 3.2: Backup e restauração de nível 0

  1. No sistema de origem, faça log-in como usuário da Oracle com as variáveis de ambiente (ORACLE_HOME e ORACLE_SID) definidas para o banco de dados de origem. Em seguida, execute o backup:

    cd <Shared_location>
    nohup sh dbmig_driver_m5.sh L0 &
    
  2. Se não estiver usando um NFS compartilhado, copie o diretório de trabalho para o host de destino.

  3. Restaure os arquivos de dados no sistema de destino.

    No destino, defina o ambiente para o banco de dados de destino. O script do driver cria um script de restauração. Ela é armazenada no diretório cmd:

    cd <Shared_location>/XTTS_Migration
    cp nohup.out nohup.out_L0
    ls -ltra cmd/restore_L0_*
    rman target / cmdfile=<restore_cmdfile_name>
    

    Verifique o arquivo de log do RMAN:

    egrep "WARN-|ORA-" log/restore_*.log
    

Tarefa 3.3: Fase de Transferência

Durante essa fase, um backup incremental é criado no banco de dados de origem e transferido para o sistema de destino.

O backup é convertido para o formato endian de destino e aplicado aos arquivos de dados de destino. Este processo pode ser repetido várias vezes para manter o banco de dados de destino sincronizado.

Cada backup incremental é menor que o anterior e reduz a janela de tempo de inatividade final.

Observação: É possível executar vários backups na origem sem aplicá-los ao destino.

  1. Na origem, execute um backup incremental de nível 1 (L1) do banco de dados de origem:
   cd <Shared_location>/XTTS_Migration
   cp nohup.out nohup.out_1
   nohup sh dbmig_driver_m5.sh L1 &
  1. Se não estiver usando um NFS compartilhado, copie o diretório de trabalho para o host de destino.

  2. Aplique o backup incremental às cópias do arquivo de dados no sistema de destino. No sistema de destino, faça log-in como o usuário Oracle com as variáveis de ambiente apropriadas definidas, execute a etapa roll forward datafiles da seguinte forma.

No sistema de destino, faça log-in como o usuário Oracle com as variáveis de ambiente apropriadas definidas. O script do driver cria um script de restauração. Ele é armazenado no diretório cmd: Restaure o backup de nível 1 (L1) no banco de dados de destino usando o script de restauração mais recente.

   cd <Shared_location>/XTTS_Migration
   ls -ltra cmd/restore_L1_*
   cp nohup.out nohup.out_3
   rman target / cmdfile=<restore_cmdfile_name>

Verifique o arquivo de log do RMAN:

   egrep "WARN-|ORA-" log/restore_*.log

A etapa de avanço se conecta ao banco de dados de destino e aplica os backups incrementais nos arquivos de dados dos tablespaces para cada tablespace que está sendo transportado.

Repita a fase de transferência até a janela de transferência do banco de dados.

Tarefa 3.4: Fase Final de Backup Incremental

  1. Desative os parâmetros relacionados à auditoria a seguir na origem e no destino até a conclusão da importação. Reative-os após a conclusão da importação:
   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
  1. Na origem, execute o backup incremental final de nível 1 (L1) do banco de dados de origem:

O script executa o seguinte: - Prompts para a senha do sistema - Define tablespaces para o modo somente leitura - Executa o backup incremental final - Executa a exportação do Data Pump

   cd <Shared_location>/XTTS_Migration
   cp nohup.out nohup.out_1
   nohup sh dbmig_driver_m5.sh L1F &
  1. Se não estiver usando um NFS compartilhado, copie o diretório de trabalho para o host de destino.

  2. Aplique o último backup incremental aos arquivos de dados de destino.

No destino, defina o ambiente para o banco de dados de destino. O script do driver cria um script de restauração. Ela é armazenada no diretório cmd:

   cd <Shared_location>/XTTS_Migration
   ls -ltra cmd/restore_L1F_*

Restaure o backup final de nível 1 (L1) no banco de dados de destino usando o script de restauração final.

   cd <Shared_location>/XTTS_Migration
   cp nohup.out nohup.out_5
   nohup rman target / cmdfile=<restore_cmdfile_name> &

Verifique o arquivo de log do RMAN:

   egrep "WARN-|ORA-" log/restore_*.log

Tarefa 3.5: Importação do Data Pump

  1. No destino, edite o script do driver de importação (impdp.sh). Use informações sobre o banco de dados de destino para preencher as variáveis.

    • ORACLE_HOME: Caminho para o Oracle home
    • ORACLE_SID: SID do banco de dados de destino
    • ORACLE_CONNECT_STRING: String de conexão
    • DATA_PUMP_PARALLEL: Nível paralelo
    • DATA_PUMP_TRACE: Nível de rastreamento

O script do driver de importação utiliza quatro parâmetros:

expdp_dumpfile: Name of the Data Pump dump file, e.g., exp_UP19_240206134155.dmp
rman_last_restore_log: Relative path to the last RMAN restore log
run-mode: One of the below:
    test: Generates the Data Pump parameter file. Does not start Data Pump.
    test-readonly. Generates the Data Pump parameter file and adds TRANSPORTABLE=KEEP_READ_ONLY to the Data Pump parameter file. Review the documentation for the usage of this parameter. Does not start Data Pump.
    run: Generates the Data Pump parameter file. Starts Data Pump to perform the import.
    run-readonly: Generates the Data Pump parameter file and adds TRANSPORTABLE=KEEP_READ_ONLY to the Data Pump parameter file. Review the documentation for the usage of this parameter. Starts Data Pump to perform the import.

  DP_ENC_PROMPT: 
     One of the below
        Y: Will prompt the user for an encryption password in case one was used for the export
        N: Will not prompt the user for an encryption password.

Inicie o script do driver de importação no modo de teste para verificar a exatidão do arquivo de parâmetros do Data Pump gerado:

   cd <Shared_location>/XTTS_Migration
   sh impdp.sh <expdp_dumpfile> <rman_last_restore_log> test N

O script do driver gera o arquivo de parâmetros no diretório atual. Examine-o.

$ vi imp_<oracle_sid>_<timestamp>_xtts.par

Não altere o arquivo de parâmetros do Data Pump gerado. Se você precisar alterar o arquivo de parâmetros, altere o código no script do driver, para que ele gere o arquivo de parâmetros desejado.

Inicie o script do driver de importação no modo de execução para executar a importação do Data Pump:

   cd <Shared_location>/XTTS_Migration
   sh impdp.sh <expdp_dumpfile> <rman_last_restore_log> run N

Sempre revise o arquivo de log do Data Pump. Mesmo que o Data Pump seja listado como bem-sucedido, você sempre deverá revisar o arquivo de log do Data Pump para verificar se há erros críticos.

  1. Reative os parâmetros de auditoria nos bancos de dados de origem e de destino após a conclusão da importação.
   show parameter audit_sys_operations
   show parameter audit_trail
   alter system set audit_trail=<value before migration taken above> scope=spfile sid='*';
   alter system set audit_sys_operations=<value before migration taken above> scope=spfile sid='*';
   srvctl stop database -d ${ORACLE_UNQNAME}
   srvctl start database -d ${ORACLE_UNQNAME}
   show parameter audit_sys_operations
   show parameter audit_trail
  1. Validar os dados transportados.
   rman target sys/<password>@<target_db_name> trace=rman_trace.trc log=<backup_location>/tablespace_validate.log
   validate tablespace <comma-separated tablespace list> check logical;
  1. Designe o tablespace dos usuários para reverter as alterações feitas na preparação do banco de dados de destino.
   select 'alter user '||username||' default tablespace users;' from dba_users where default_tablespace='USERS_OCI';
  Execute the alter commands generated by above select query.
   select count(*) from dba_users where default_tablespace='USERS_OCI';
   ALTER DATABASE DEFAULT TABLESPACE USERS;
   drop tablespace USERS_OCI including contents and datafiles;
   select TABLESPACE_NAME from dba_tablespaces where TABLESPACE_NAME='USERS';

Valide os dados nos bancos de dados de origem e de destino.

Links Relacionados

Confirmações

Mais Recursos de Aprendizado

Explore outros laboratórios em docs.oracle.com/learn ou acesse mais conteúdo de aprendizado gratuito no canal do Oracle Learning no YouTube. Além disso, acesse education.oracle.com/learning-explorer para se tornar um Oracle Learning Explorer.

Para obter a documentação do produto, visite o Oracle Help Center.