Você está na página 1de 24

UPGRADE VLDB BANESTES

ESTRATÉGIAS PARA MIGRAÇÃO DE AMBIENTES CRÍTICOS COM GRANDES VOLUMETRIAS DE DADOS


Origem – Oracle RAC Fase 1 – Upgrade to Fase 2 – Transformar
11.2.0.4 19c Single Instance Single Instance em
Obs.: Ambiente CLONE, DataGuard PDB

OBJETIVO
PRÉ-REQUISITOS ( PROVEDOR BANESTES – AMBIENTES )

 Ambiente Origem em Produção (UAT/HML) instalado e operacional;


 ASM ambiente já instalado e configurado no ambiente com compatibilidade
oracle 19c;
 Prover cópia do banco de dados em OPERAÇÃO com similaridade com
ORIGEM, preferencialmente criando um novo destino de DATAGUARD no
mesmo ambiente, vemos como necessidade essencial a utilização do Oracle DG
para mantermos a origem de forma intacta até o final do processo evolutivo;
 Core ambiente Oracle 19, instalado e configurado no ambiente;
 CDB previamente criado e configurado;
FASE 1 – UPGRADE TO 19C SINGLE
INSTANCE
FASE 1 - ETAPAS PRELIMINARES

• Rodar utlrp.sql ( $HOME/rdbms/admin/utlrp.sql )


• Rodar Purge Origem como sys as sysdba
• purge dba_recyclebin;
• purge recyclebin;
• Rodar PREUPGRADE TOOL
• Será executado no ambiente atual ORIGEM ( 11g - Primary)
• Criar diretório repositório do upgrade;
• Ex.: /u01/preupgrade

OBS.: Este script não proverá alterações no ambiente de ORIGEM;


FASE 1 - ETAPAS PRELIMINARES - CONTINUA

• Rodar o script de pré-upgrade


• <HOME 11>/jdk/bin/java –jar <HOME 19C>/rdbms/admin/preupgrade.jar FILE DIR /u01/preupgrade
• O script gerará no repositório criado a saída de todo o script;
• Exemplo Saida:
FASE 1 - ETAPAS PRELIMINARES – CONTINUA (DOWNTIME)

• Parar TODO o ambiente PRODUTIVO;


• Fazer a QUEBRA do AMBIENTE DATAGUARD, criando o CLONE do banco
de PRODUÇÃO que sofrerá UPGRADE;
• Rodar o script de pré-upgrade, no ambiente CLONE;
• <HOME 11>/jdk/bin/java –jar <HOME 19C>/rdbms/admin/preupgrade.jar FILE DIR /u01/preupgrade
• O script gerará no repositório criado a saída de todo o script;
FASE 1 – UPGRADE – CONTINUA (DOWNTIME)

• Shutdown IMMEDIATE ( Ambiente CLONE);


• Subir ambiente com binário ORACLE 19;
• Para isso será preciso redirecionar SPFILE e ORAPW para HOME do ORACLE 19, ajustar parâmetros no
SPFILE, ajustar variáveis de ambiente ORACLE_HOME;
FASE 1 – UPGRADE – CONTINUA (DOWNTIME)

• Rodar DBUPGRADE;
• Setar variáveis ORACLE_HOME para ORACLE_HOME 19c;
• Fazer startup da instancia com startup upgrade;
• Startup upgrade
• Rodar DBUPGRADE
• Cd $ORACLE_HOME/bin
• ./dbupgrade ( estimativa 50 minutos )
FASE 1 – UPGRADE – CONTINUA (DOWNTIME)

• Rodar UTLRP;
• Manter variáveis ORACLE_HOME para ORACLE_HOME 19c;
• Conectar com SQL PLUS
• sqlplus / as sysdba
• @$ORACLE_HOME/rdbms/admin/utlrp ( 10 minutos )
FASE 1 – UPGRADE – CONTINUA (DOWNTIME)

• Set COMPATIBLE;
• Manter variáveis ORACLE_HOME para ORACLE_HOME 19c;
• Conectar com SQL PLUS
• sqlplus / as sysdba
• Rodar alter system
• ALTER SYSTEM SET COMPATIBLE = '19.0.0' SCOPE=SPFILE; ( 1 minuto(s ))
• Reiniciar o banco
FASE 1 – UPGRADE – CONTINUA (DOWNTIME)

• Compilar estatísticas objetos estáticos;


• Manter variáveis ORACLE_HOME para ORACLE_HOME 19c;
• Conectar com SQL PLUS
• sqlplus / as sysdba
• Rodar update stats
• EXECUTE DBMS_STATS.GATHER_FIXED_OBJECTS_STATS; ( 1 minuto(s ))
• Reiniciar o banco em upgrade mode
FASE 1 – UPGRADE – CONTINUA (DOWNTIME)
• Atualizar TIMEZONE
• Manter variáveis ORACLE_HOME para ORACLE_HOME 19c;
• Conectar com SQL PLUS
• sqlplus / as sysdba
• Rodar script
SET SERVEROUTPUT ON
DECLARE
l_tz_version PLS_INTEGER;
BEGIN
l_tz_version := DBMS_DST.get_latest_timezone_version;

DBMS_OUTPUT.put_line('l_tz_version=' || l_tz_version);
DBMS_DST.begin_upgrade(l_tz_version);
END;
/
• O script deve retornar 32 como resultado;
• Reiniciar o banco em Normal mode
FASE 1 – UPGRADE – CONTINUA (DOWNTIME)
• Atualizar TIMEZONE (continuação)
• Manter variáveis ORACLE_HOME para ORACLE_HOME 19c;
• Conectar com SQL PLUS
• sqlplus / as sysdba
• Rodar script
SET SERVEROUTPUT ON
DECLARE
l_failures PLS_INTEGER;
BEGIN
DBMS_DST.upgrade_database(l_failures);
DBMS_OUTPUT.put_line('DBMS_DST.upgrade_database : l_failures=' || l_failures);
DBMS_DST.end_upgrade(l_failures);
DBMS_OUTPUT.put_line('DBMS_DST.end_upgrade : l_failures=' || l_failures);
END;
/
• O script deve executar com sucesso;
• Verificar time zone atualizado:
• SELECT * FROM v$timezone_file;
FASE 1 – UPGRADE – CONTINUA (DOWNTIME)
• Rodar postupgrade
• Manter variáveis ORACLE_HOME para ORACLE_HOME 19c;
• Conectar com SQL PLUS
• sqlplus / as sysdba
• Rodar script
• @/u01/preupgrade/postupgrade_fixups.sql
• O script deve executar com sucesso;
• Se houverem recomendações considerar;
• Checar Banco Novo Oracle 19c;
• select name,version,open_mode from v$database,v$instance;
FASE 2 – TRANSFORMAR O AMBIENTE SINGLE INSTANCE EM PDB

• PRÉ-REQUISITO
• CDB criado
FASE 2 – PLUGAR PDB (DOWNTIME)
• Manter variáveis ORACLE_HOME para ORACLE_HOME 19c;
• Conectar com SQL PLUS
• sqlplus / as sysdba
• Rodar sequencia de comandos:
• Shutdown immediate;
• Startup open read Only;

• BEGIN
DBMS_PDB.DESCRIBE(pdb_descr_file => '/tmp/19cNonPDB.xml');
END;
/
• Os comandos acima irão gerar um XML que será utilizado no PLUG do PDB no
container, após isso iremos checar a compatibilidade desse XML para fazer o
PLUG, é improvável que tenhamos maiores problemas visto que estamos
falando de um mesmo binário 19, com patches compatíveis;
FASE 2 – PLUGAR PDB (DOWNTIME)
• Manter variáveis ORACLE_HOME para ORACLE_HOME 19c;
• Conectar com SQL PLUS
• sqlplus / as sysdba
• Rodar sequencia de comandos:
• Shutdown immediate;
• Startup open read Only;

• BEGIN
DBMS_PDB.DESCRIBE(pdb_descr_file => '/tmp/19cNonPDB.xml');
END;
/
• Os comandos acima irão gerar um XML que será utilizado no PLUG do PDB no
container, após isso iremos checar a compatibilidade desse XML para fazer o
PLUG, é improvável que tenhamos maiores no mesmo binário 19c;
• Shutdown ambiente NONCDB:
• Shutdown immediate
FASE 2 – PLUGAR PDB (DOWNTIME)
• Setar ORACLE_HOME para ambiente CDB;
• Conectar com SQL PLUS
• sqlplus / as sysdba
• Checar compatibilidade:
SET SERVEROUTPUT ON;
DECLARE
compatible CONSTANT VARCHAR2(3) := CASE
DBMS_PDB.CHECK_PLUG_COMPATIBILITY(pdb_descr_file => '/tmp/19cNonPDB.xml')
WHEN TRUE THEN 'YES'
ELSE 'NO'
END;
BEGIN
DBMS_OUTPUT.PUT_LINE(compatible);
END;
/
• Resultado esperado “COMPATIBLE”, caso não rodar query abaixo:
select name,cause,type,message,status from PDB_PLUG_IN_VIOLATIONS where name='<noncdb database
name>';
FASE 2 – PLUGAR PDB (DOWNTIME)
• Setar ORACLE_HOME para ambiente CDB;
• Conectar com SQL PLUS
• sqlplus / as sysdba
• Checar compatibilidade:
SET SERVEROUTPUT ON;
DECLARE
compatible CONSTANT VARCHAR2(3) := CASE
DBMS_PDB.CHECK_PLUG_COMPATIBILITY(pdb_descr_file => '/tmp/19cNonPDB.xml')
WHEN TRUE THEN 'YES'
ELSE 'NO'
END;
BEGIN
DBMS_OUTPUT.PUT_LINE(compatible);
END;
/
• Resultado esperado “COMPATIBLE”, caso não rodar query abaixo:
select name,cause,type,message,status from PDB_PLUG_IN_VIOLATIONS where name='<noncdb database
name>';
FASE 2 – PLUGAR PDB (DOWNTIME)
• Setar ORACLE_HOME para ambiente CDB;
• Conectar com SQL PLUS
• sqlplus / as sysdba
• PLUG PDB:
CREATE PLUGGABLE DATABASE NPDB00 USING '/tmp/19cNonPDB.xml'
MOVE
FILE_NAME_CONVERT = ('+DGORIGEM/12cNonPDB/', '+DGORIGEM/CDBXX/NPDB00/’);
• A opção MOVE servirá para reorganizar os diretórios para mantermos o
padrão do CDB, se utilizarmos COPY haverá cópia dos datafiles e NOCOPY os
datafiles serão mantidos no lugar de origem;
• Converter para PDB
ALTER SESSION SET CONTAINER= NPDB00;
@$ORACLE_HOME/rdbms/admin/noncdb_to_pdb.sql
ALTER PLUGGABLE DATABASE OPEN;
SELECT name, open_mode FROM v$pdbs;
• Resultado esperado: NPDB00 READ WRITE
FASE 2 – FIM

• AMBIENTE PRONTO PARA APONTAMENTOS DE APLICAÇÃO E


LIBERAÇÃO, A FASE 2 NÃO DEVE ESTENDER POR MAIS DE 30 MINUTOS;
CONTINGÊNCIA – ROLLBACK - SEGURANÇA

• O AMBIENTE PRIMÁRIO É INTACTO PARA


APLICAÇÃO, EM CASO DE EMERGÊNCIA
TEREMOS QUE REMOVER O CLONE E
INICIAR O AMBIENTE NOVAMENTE,
REMOVER O PDB CRIADO NO 19 E TAMBÉM
OS RESQUICIOS DA INSTANCIA SINGLE 19.
OBRIGADO
ANDRE.MACEDO@ATOS.NET

Você também pode gostar