Fazer Upgrade e Migrar seu Banco de Dados para a Nuvem

Usando esse procedimento de migração direta de etapa única, você pode migrar seu banco de dados local para o Oracle Cloud Infrastructure com período de indisponibilidade quase zero e ao mesmo tempo em que faz upgrade do banco de dados para a versão mais recente. Este procedimento de migração reduz o custo, o tempo de migração de ponta a ponta e o esforço de teste necessário para migrar um banco de dados.

Fazer Upgrade para o Oracle Database 18c

Restaure o backup do RMAN do banco de dados de origem 11.2.0.3 sob o 18c Oracle Home e faça upgrade para o Oracle Database 18c.

Com o Oracle Database Exadata Cloud Service, presume-se que o banco de dados de contêiner de destino já tenha sido criado. O backup trazido do banco de dados local é submetido a upgrade para o 18c e plugado como um banco de dados plugável (PDB) neste contêiner pré-criado. Embora o backup do banco de dados local seja 11.2.0.3, você pode restaurá-lo em um Home do BD 18c no Oracle Database Exadata Cloud Service.

Utilize o SCN capturado do backup do RMAN de origem ao definir o Set until SCN. Isso é para garantir que estamos restaurando o banco de dados até um determinado ponto, também é o ponto inicial para começar a aplicar nossos deltas de alteração do Oracle GoldenGate.

  1. Restaure o backup do RMAN do banco de dados de origem 11.2.0.3 no Oracle Home do 18c.

    Só restaure o banco de dados. Não abra o banco de dados após a restauração e recuperação. Isso acontece porque queremos fazer upgrade de nosso banco de dados para 18c.

    Ao executar o comando RMAN, o valor de Set until SCN é o SCN capturado do backup RMAN de origem.

    RMAN> restore controlfile from '/rman_backups/cntrl_882_1_1005936032';
    
    RMAN> alter database mount;
    SQL "alter database rename file ''/oradata/bildb/bildb/onlinelog/thread1/redo1_1.log'' to ''+RECOC1''";
    SQL "alter database rename file ''/oradata/bildb_mirr/bildb/onlinelog/thread1/redo1_2.log'' to ''+RECOC1''";
    SQL "alter database rename file ''/oradata/bildb/bildb/onlinelog/thread1/redo2_1.log'' to ''+RECOC1''";
    SQL "alter database rename file ''/oradata/bildb_mirr/bildb/onlinelog/thread1/redo2_2.log'' to ''+RECOC1''";
    SQL "alter database rename file ''/oradata/bildb/bildb/onlinelog/thread1/redo3_1.log'' to ''+RECOC1''";
    SQL "alter database rename file ''/oradata/bildb_mirr/bildb/onlinelog/thread1/redo3_2.log'' to ''+RECOC1''";
    SQL "alter database rename file ''/oradata/bildb/bildb/onlinelog/thread1/redo30_1.log'' to ''+RECOC1''";
    SQL "alter database rename file ''/oradata/bildb_mirr/bildb/onlinelog/thread1/redo30_2.log'' to ''+RECOC1''";
    SQL "alter database rename file ''/oradata/bildb/bildb/onlinelog/thread1/redo31_1.log'' to ''+RECOC1''";
    SQL "alter database rename file ''/oradata/bildb_mirr/bildb/onlinelog/thread1/redo31_2.log'' to ''+RECOC1''";
    SQL "alter database rename file ''/oradata/bildb/bildb/onlinelog/thread1/redo32_1.log'' to ''+RECOC1''";
    SQL "alter database rename file ''/oradata/bildb_mirr/bildb/onlinelog/thread1/redo32_2.log'' to ''+RECOC1''";
    SQL "alter database rename file ''/oradata/bildb/bildb/onlinelog/thread1/redo40_1.dbf'' to ''+RECOC1''";
    SQL "alter database rename file ''/oradata/bildb_mirr/bildb/onlinelog/thread1/redo40_2.dbf'' to ''+RECOC1''";
    SQL "alter database rename file ''/oradata/bildb/bildb/onlinelog/thread1/redo41_1.dbf'' to ''+RECOC1''";
    SQL "alter database rename file ''/oradata/bildb_mirr/bildb/onlinelog/thread1/redo41_2.dbf'' to ''+RECOC1''";
    
    RMAN> run
    {
    allocate channel ch1 type DISK ;
    allocate channel ch24 type DISK ;
    set until scn 2579195632075;
    set newname for database to '+DATAC1';
    restore database;
    switch datafile all;
    switch tempfile all;
    recover database;
    release channel ch1;
    release channel ch24;
    }
    
  2. Faça upgrade para o Oracle Database versão 18c.

    Abra o banco de dados com a opção upgrade e execute o comando dbupgrade.

    SQL> alter database open resetlogs upgrade
    $ORACLE_HOME/bin/dbupgrade -n 20
    SQL> @?/rdbms/admin/utlu122s.sql
    SQL> @?/rdbms/admin/catuppst.sql 
    SQL> @?/rdbms/admin/utlrp.sql
    
  3. Verifique a versão do fuso horário executando a instrução a seguir no contêiner de destino.
    SQL> select * from v$timezone_file;
    
    FILENAME                VERSION     CON_ID
    -------------------- ---------- ----------
    timezlrg_31.dat              31          0
  4. Se o fuso horário do banco de dados de origem não for o fuso horário mais recente, atualize o fuso horário do banco de dados atualizado para o fuso horário mais recente no banco de dados na nuvem.
    Por exemplo, se o fuso horário do banco de dados de origem for 14, ele precisará ser atualizado para a versão mais recente do fuso horário na nuvem.

Converter o Banco de Dados em um Banco de Dados Contêiner

Conecte o banco de dados não contêiner no contêiner de destino como um banco de dados plugável (PDB).

Depois da atualização do fuso horário, o banco de dados que não é contêiner está pronto para ser conectado como um banco de dados plugável no container de destino. Como o tamanho do banco de dados é muito grande, você pode criar o PDB usando a cláusula NOCOPY. Quando você usa a cláusula NOCOPY, o mesmo conjunto de arquivos de dados que pertencem a um banco de dados que não é contêiner é redefinido novamente ao banco de dados plugável em vez de executar uma operação de cópia. Isso economiza tempo e espaço para bancos de dados muito grandes.

O banco de dados não contêiner deve estar no modo READ ONLY para a operação do plug-in.
  1. Gere um arquivo de descritor de banco de dados plugável (PDB) no banco de dados não-contêiner.
    SQL> alter database open read only;
    SQL>BEGIN
    DBMS_PDB.DESCRIBE(pdb_descr_file => '/tmp/bildb.xml');
    END;
    /
    SQL> shutdown immediate
    
  2. Crie um PDB no contêiner de banco de dados não contêiner e altere a sessão.
    SQL> SET SERVEROUTPUT ON;
    DECLARE
    compatible CONSTANT VARCHAR2(3) := CASE DBMS_PDB.CHECK_PLUG_COMPATIBILITY(pdb_descr_file => '/tmp/bildb.xml')
    WHEN TRUE THEN 'YES'
    ELSE 'NO'
    END;
    BEGIN
    DBMS_OUTPUT.PUT_LINE(compatible);
    END;
    /
    SQL> CREATE PLUGGABLE DATABASE bildb USING '/tmp/bildb.xml' SOURCE_FILE_NAME_CONVERT=('+DATA/bildb/DATAFILE','+DATA/bildb/DATAFILE','+DATA/bildb/TEMPFILE','+DATA/bildb/TEMPFILE') NOCOPY TEMPFILE REUSE;
    Pluggable database created.
    SQL>
    
    SQL> alter session set container=bildb;
    Session altered.
    
    SQL> show con_name
    CON_NAME
    ------------------------------
    BILDB
  3. Atualize os medata.
    SQL> @/u01/app/oracle/product/18.0.0.0/dbhome_1/rdbms/admin/noncdb_to_pdb.sql

Sincronizar com a Origem

Inicie a sincronização da alteração no banco de dados alvo para aplicar deltas de alteração e migrar os dados.

Depois que o banco de dados é restaurado e conectado como banco de dados plugável no container de destino, o carregamento inicial do Oracle GoldenGate é concluído. Inicie a sincronização da alteração do mesmo SCN capturado durante o backup do RMAN obtido do banco de dados de origem.

  1. Inicie o comando replicat no banco de dados de destino para sincronização da alteração
    GGSCI (mlib-gghubtgt) 2> START REPLICAT rep18c, ATCSN 2579195632075
    Após iniciar a replicação, as alterações do banco de dados local começarão a ser aplicadas ao Oracle Database 18c no Oracle Cloud Infrastructure.
  2. Para corte, é recomendável criar um caminho de replicação reverso de um Oracle Database 18c na nuvem para um Oracle Database 11.2.0.3 local. Após a cobertura gradual, o caminho de replicação inversa deve ser ativado para que as transações fluam do banco de dados na nuvem para o banco de dados 11.2.0.3 local.