Observação:

Migre o Oracle Database para o OCI usando Tablespaces Transportáveis entre Plataformas V4 e Faça Upgrade de 12c para 19c

Introdução

Este tutorial abrange as etapas necessárias para usar V4 Tablespaces Transportáveis entre Plataformas (XTTS) com backups incrementais do Oracle Recovery Manager (RMAN) para migrar dados entre sistemas que têm diferentes formatos de endian, com a menor quantidade de tempo de inatividade do aplicativo.

A primeira etapa será copiar um backup completo da origem para o destino. Em seguida, usando uma série de backups incrementais, cada um menor que o último, os dados no sistema de destino podem ser atualizados quase com o sistema de origem, antes que qualquer tempo de inatividade seja necessário. Esse procedimento requer tempo de inatividade somente durante o backup incremental final e a exportação ou importação de metadados.

Este tutorial descreve os procedimentos V4 para Backup Incremental entre Plataformas que podem ser usados com 11.2.0.3 e superior.

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 o(s) tablespace(s) no banco de dados de origem que será(ão) transportado(s). 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. Crie a view transport_set_violations no banco de dados de origem.

    exec dbms_tts.transport_set_check('<list of tablespaces with comma saperated>');
    SELECT * FROM SYS.TRANSPORT_SET_VIOLATIONS;
    
  4. (Opcional) Ative o rastreamento de alteração de bloco 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.

  6. Remova os índices espaciais do parâmetro de índice de recriação e modifique os índices espaciais não utilizáveis.

    • Esta etapa verifica se você não tem o parâmetro de recriação de índice nos índices espaciais. Para ambientes multitenant, execute o comando a seguir primeiro para definir o campo SID do banco de dados como o nome do banco de dados plugável para seu banco de dados Oracle (NOME do PDB).

      export ORACLE_PDB_SID=[PDB NAME]
      
    • Para ver se você tem algum parâmetro de índice de recriação, no nó do servidor de banco de dados de origem, como proprietário do sistema de arquivos e da instância do banco de dados do servidor de banco de dados de origem, use o SQL*Plus para estabelecer conexão com o banco de dados de origem como sysdba e executar a consulta a seguir.

      select owner,index_name from dba_indexes where index_type='DOMAIN' and upper(parameters) like '%REBUILD%';
      
    • Para remover o parâmetro de índice de recriação, use o SQL*Plus para estabelecer conexão com o banco de dados de origem como proprietário do índice e execute a consulta a seguir.

      alter index [index name] rebuild parameters [parameters]
      
  7. Sincronizar índices de texto. Use o SQL*Plus para estabelecer conexão com o banco de dados de origem como SYSDBA e execute a consulta a seguir para localizar todos os índices com sincronização pendente.

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

    Para sincronizar os índices, execute a consulta a seguir.

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

Tarefa 2: Preparar o Banco de Dados de Destino

  1. Crie um novo tablespace de usuários temporários. Se o banco de dados de destino for um ambiente multitenant, conecte-se ao 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;
    

    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;
    

    Atribua o novo tablespace de usuários USERS_OCI a todos os usuários do banco de dados que têm 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 deve retornar 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. Crie tablespaces temporários no banco de dados de destino. Execute a consulta a seguir na origem e reúna os detalhes do 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. Crie o diretório nls/data/9idata para aplicativos do 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. Crie $ORACLE_HOME/appsutil/jre para aplicativos do Oracle E-Business Suite. Copie a pasta appsutil do banco de dados de origem no caminho $ORACLE_HOME para o servidor de banco de dados de destino no caminho $ORACLE_HOME. Execute os comandos a seguir em todos os nós dos servidores de banco de dados de destino, assim que a pasta for copiada.

    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 o esquema sys para aplicativos do Oracle E-Business Suite.

    export ORACLE_PDB_SID=[PDB_NAME]
    sqlplus / as sysdba
    show con_name
    @audb19c.sql
    
  6. Configure o esquema do sistema para aplicativos do Oracle E-Business Suite.

    export ORACLE_PDB_SID=[PDB_NAME]
    sqlplus / as sysdba
    show con_name
    @ausy19c.sql
    
  7. Defina o parâmetro CTXSYS para aplicativos do 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. Reúna estatísticas automaticamente para aplicativos do 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;
    

Tarefa 3: Etapas XTTS V4 Incrementais

Tarefa 3.1: Fase Inicial

  1. Faça download dos scripts perl v4 mais recentes e descompacte-os aqui: V4 Reduza o Tempo de Inatividade do Tablespace Transportável usando Backup Incremental entre Plataformas (ID do Documento 2471245.1). Crie diretórios para descompactar os scripts e o diretório temporário.

    Por Exemplo:

    mkdir -p <Backup_location>/XTTS_Migration
    mkdir -p <Backup_location>/XTTS_Migration/XTTS_TEMP
    
  2. Edite o arquivo xtt.properties no sistema de origem com a configuração específica do local. Para obter mais informações sobre os parâmetros no arquivo xtt.properties, consulte a descrição dos parâmetros na seção xtt.properties do arquivo de configuração aqui: V4 Reduza o Tempo de Inatividade do Tablespace Transportável usando Backup Incremental entre Plataformas (ID do Documento 2471245.1). Para este procedimento, apenas os parâmetros a seguir são obrigatórios. Outros são opcionais e/ou disponíveis para 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
    

Tarefa 3.2: Preparar Fase

  1. Execute o backup no sistema de origem. No sistema de origem, faça log-in como o usuário Oracle com o ambiente (ORACLE_HOME e ORACLE_SID variáveis de ambiente) apontando para o banco de dados de origem, execute o backup da seguinte 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. Transfira os arquivos a seguir para o servidor de banco de dados de destino.

    • Backups criados da origem src_scratch_location para o destino dest_scratch_location.

    • O arquivo res.txt da origem $TMPDIR para o destino $TMPDIR.

    No exemplo a seguir, scp é usado para transferir o backup level=0 criado pela etapa anterior do sistema de origem para o 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 os arquivos de dados no 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 &
    

Tarefa 3.3: Fase de Transferência

Durante essa fase, um backup incremental é criado a partir do banco de dados de origem, transferido para o sistema de destino, convertido para o formato endian do sistema de destino e, em seguida, aplicado às cópias do arquivo de dados de destino convertidas para encaminhá-las. Esta fase pode ser executada várias vezes. Cada backup incremental sucessivo deve levar menos tempo do que o backup incremental anterior e tornará as cópias do arquivo de dados de destino mais atuais com o banco de dados de origem. Os dados que estão sendo transportados (origem) estão totalmente acessíveis durante esta fase.

Observação: Vários backups podem ser executados na origem sem aplicá-los ao destino. Os arquivos de backup e res.txt devem ser copiados antes que o comando '–restore' seja executado no destino.

  1. Crie um backup incremental dos tablespaces que estão sendo transportados no sistema de origem.

    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 &
    

    Esta etapa criará um backup incremental para todos os tablespaces listados no arquivo xtt.properties.

  2. Transfira backups incrementais e res.txt para o sistema de destino. Transfira os backups incrementais (entre src_scratch_location e dest_scratch_location) e o res.txt (entre $TMPDIRs) da origem para o destino. A lista de arquivos de backup incrementais do backup atual pode ser encontrada no arquivo incrbackups.txt no sistema de origem.

    Por Exemplo:

    [oracle@source]$ scp `cat incrbackups.txt` oracle@dest:/dest_scratch_location
    [oracle@source]$ scp res.txt oracle@dest:/home/oracle/xtt
    
  3. Aplique o backup incremental às cópias do arquivo de dados no sistema de destino. No sistema de destino, conectado como o usuário Oracle com o ambiente (ORACLE_HOME e ORACLE_SID variáveis de ambiente) apontando para o banco de dados de destino, execute a etapa de transferência de arquivos de dados da seguinte forma.

    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
    

    A etapa de avanço estabelece conexão com o banco de dados de destino e aplica os backups incrementais nos arquivos de dados dos tablespaces para cada tablespace que está sendo transportado.

    Observação: Embora vários backups possam ser executados na origem sem serem aplicados no destino, o arquivo res.txt deve ser copiado após o último backup e antes que o --restore seja executado no destino.

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

Tarefa 3.4: Fase de Backup Incremental Final

  1. Altere o(s) tablespace(s) de origem para LEITURA SOMENTE no banco de dados de origem. Execute a consulta a seguir se todos os tablespaces forem transportados para o banco de dados de 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. Crie o backup incremental final dos tablespaces que estão sendo transportados no sistema de origem.

    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. Transfira backups incrementais e res.txt para o sistema de destino.

    Por Exemplo:

    [oracle@source]$ scp 'cat incrbackups.txt' oracle@dest:/dest_scratch_location
    [oracle@source]$ scp res.txt oracle@dest:/home/oracle/xtt
    
  4. Aplique o último backup incremental aos arquivos de dados 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 &
    

Tarefa 3.5: Fase de Transporte - Exportar Metadados e Tablespaces de Plug-in para o Banco de Dados de Destino

  1. Crie um diretório para armazenar os arquivos de backup de exportação.

    Por Exemplo:

    mkdir -p <Backup_location>/XTTS_DPUMP
    

    Execute a consulta a seguir para criar diretório no banco de dados de origem.

    create or replace directory XTTS_DUMP as '<Backup_location>/XTTS_DUMP';
    grant read,write on directory XTTS_DUMP to system;
    
  2. Preparar parfile de exportação.

    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. Execute a exportação do datapump no banco de dados de origem.

    nohup expdp system/<password>@<source_db_name> parfile= xtts_expdp.par &
    
  4. Execute o comando a seguir no servidor de banco de dados de destino que gera o parfile de amostra para importação.

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

    Atualize as linhas de parfile a seguir geradas na etapa 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
    

    O parfile de importação final deve ser semelhante a:

    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. Desative os seguintes parâmetros relacionados à auditoria até a conclusão da importação, conforme mencionado. 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
    
  6. Execute a importação do datapump no banco de dados de destino.

    1. Crie um diretório para copiar os arquivos de backup de exportação.

      Por Exemplo:

      mkdir -p <Backup_location>/XTTS_DPUMP
      
    2. Execute o comando a seguir para criar um diretório no banco de dados de origem.

      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. Ative os seguintes parâmetros relacionados à auditoria após a conclusão da importação.

    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 os dados 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. Atribua 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';
    

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

Confirmações

Mais Recursos de Aprendizagem

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

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