Duplicate a partir de um active DataGuard – 11.2.0.4

Recentemente, ao realizar uma atividade de duplicate de uma base de produção para teste, encontrei algumas dificuldades, uma vez que neste ambiente seria inviável a utilização do backup (devido ao tempo de restore) e a utilização do ambiente de produção como target uma vez que a janela para o processo seria bastante restrita devido ao impacto na performance do ambiente.

Diante deste cenário, surgiu a ideia de utilizar o ambiente de Active Data Guard como target, evitando assim problemas de performance no ambiente de produção e também podendo aumentar minha janela para realização do processo de duplicate.

O ambiente citado é composto por um ambiente de produção, um standby (Active Data Guard) e uma base de teste, ambos na versão 11.2.0.4. Este processo de duplicate possuí alguns bugs que podem não permitir a  sua execução em versões inferiores a 11.2.0.4, conforme o doc 11715084.8, sendo necessário em alguns casos aplicar patch set.

O processo realizado para atender esta necessidade é relativamente simples, e consiste na criação de um Data Guard Cascading Standby Database e posterior ativação do mesmo. Um Data Guard Cascading Standby nada mais é do que um um banco de dados standby que recebe os logs (redo ou archive) de outro standby e não do servidor primário.

A imagem abaixo representa de forma simples a estrutura básica de um Cascading Standby.

standbycascate 300x123 Duplicate a partir de um active DataGuard   11.2.0.4

 

Agora, vamos simular o processo de duplicate usando como origem o ambiente de Standby. Para este processo estamos partindo do princípio de que, já temos um ambiente Oracle de produção (primário) com um Standby (Active Data Guard) previamente configurado e sincronizado, além da existência base de teste que vai receber a carga. Por isso, não será abordado neste artigo a criação dos mesmos.

O ambiente será composto por:

  • Base primária:
hostname: oraprimary
db_unique_name: primary
  • Base Data Guard:
hostname: dataguard
db_unique_name: primary_stb
  • Base de teste
hostname:cce
db_unique_name: teste

Antes de efetivamente iniciar o processo de duplicate, será necessário realizar o ajuste dos parâmetros abaixo:

oraprimary

alter system set log_archive_config='DG_CONFIG=(primary,primary_stb,teste)' scope=both;
O parâmetro log_archive_config será composto da seguinte maneira:
'DG_CONFIG=(<db_unique_name base primaria>,<db_unique_name base data guard>,<db_unique_name base teste>)'

dataguard

alter system set log_archive_config='DG_CONFIG=(primary,primary_stb,teste)' scope=both;
alter system set log_archive_dest_3='service=teste async VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=teste' scope=both;
service=<conexão com a base de teste>
db_unique_name=<db_unique_name base teste>
alter system set log_archive_dest_state_3='DEFER';

teste

alter system set log_archive_config='DG_CONFIG=(primary,primary_stb,teste)' scope=both;
alter system set fal_server='primary_stb';
alter system set standby_file_management=AUTO;

Após realizar o processo de parametrização, podemos realizar um restore usando como origem (target) a base standby primary_stb e como destino (auxiliary) a nossa base de teste.

[oracle@cce teste]$ rman target=sys/pwdlamim@primary_stb auxiliary=sys/pwdlamim@teste

Recovery Manager: Release 11.2.0.4.0 - Production on Thu Oct 9 20:00:47 2014

Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.

connected to target database: PRIMARY (DBID=1681226768)
connected to auxiliary database: PRIMARY (not mounted)

RMAN>
run {
allocate channel prmy1 type disk;
allocate channel prmy2 type disk;
allocate channel prmy3 type disk;
allocate channel prmy4 type disk;
allocate auxiliary channel stby type disk;
DUPLICATE DATABASE
FOR STANDBY
FROM ACTIVE DATABASE
DORECOVER;
}

using target database control file instead of recovery catalog
allocated channel: prmy1
channel prmy1: SID=43 device type=DISK

allocated channel: prmy2
channel prmy2: SID=46 device type=DISK

allocated channel: prmy3
channel prmy3: SID=47 device type=DISK

allocated channel: prmy4
channel prmy4: SID=40 device type=DISK

allocated channel: stby
channel stby: SID=19 device type=DISK

Starting Duplicate Db at 09-OCT-2014

contents of Memory Script:
{
backup as copy reuse
targetfile '/u01/app/oracle/product/11.2.0/dbhome_1/dbs/orapwprimary' auxiliary format
'/oraprd01/oracle/app/product/11.2.0/dbhome_1/dbs/orapwteste' ;
}
executing Memory Script

Starting backup at 09-OCT-2014
Finished backup at 09-OCT-2014

contents of Memory Script:
{
backup as copy current controlfile for standby auxiliary format '/oraprd04/oradata/teste/control01.ctl';
restore clone controlfile to '/oraprd04/oradata/teste/control02.ctl' from
'/oraprd04/oradata/teste/control01.ctl';
}
executing Memory Script

Starting backup at 09-OCT-2014
channel prmy1: starting datafile copy
copying standby control file
output file name=/u01/app/oracle/product/11.2.0/dbhome_1/dbs/snapcf_primary.f tag=TAG20141009T200053 RECID=61 STAMP=860529654
channel prmy1: datafile copy complete, elapsed time: 00:00:03
Finished backup at 09-OCT-2014

Starting restore at 09-OCT-2014

channel stby: copied control file copy
Finished restore at 09-OCT-2014

contents of Memory Script:
{
sql clone 'alter database mount standby database';
}
executing Memory Script

sql statement: alter database mount standby database

contents of Memory Script:
{
set newname for tempfile 1 to
"/oraprd04/oradata/teste/temp01.dbf";
switch clone tempfile all;
set newname for datafile 1 to
"/oraprd04/oradata/teste/system01.dbf";
set newname for datafile 2 to
"/oraprd04/oradata/teste/sysaux01.dbf";
set newname for datafile 3 to
"/oraprd04/oradata/teste/undotbs01.dbf";
set newname for datafile 4 to
"/oraprd04/oradata/teste/users01.dbf";
backup as copy reuse
datafile 1 auxiliary format
"/oraprd04/oradata/teste/system01.dbf" datafile
2 auxiliary format
"/oraprd04/oradata/teste/sysaux01.dbf" datafile
3 auxiliary format
"/oraprd04/oradata/teste/undotbs01.dbf" datafile
4 auxiliary format
"/oraprd04/oradata/teste/users01.dbf" ;
}
executing Memory Script

executing command: SET NEWNAME

renamed tempfile 1 to /oraprd04/oradata/teste/temp01.dbf in control file

executing command: SET NEWNAME

executing command: SET NEWNAME

executing command: SET NEWNAME

executing command: SET NEWNAME

Starting backup at 09-OCT-2014
channel prmy1: starting datafile copy
input datafile file number=00001 name=/u01/app/oracle/oradata/primary/system01.dbf
channel prmy2: starting datafile copy
input datafile file number=00002 name=/u01/app/oracle/oradata/primary/sysaux01.dbf
channel prmy3: starting datafile copy
input datafile file number=00003 name=/u01/app/oracle/oradata/primary/undotbs01.dbf
channel prmy4: starting datafile copy
input datafile file number=00004 name=/u01/app/oracle/oradata/primary/users01.dbf
output file name=/oraprd04/oradata/teste/users01.dbf tag=TAG20141009T200105
channel prmy4: datafile copy complete, elapsed time: 00:00:08
output file name=/oraprd04/oradata/teste/undotbs01.dbf tag=TAG20141009T200105
channel prmy3: datafile copy complete, elapsed time: 00:00:26
output file name=/oraprd04/oradata/teste/sysaux01.dbf tag=TAG20141009T200105
channel prmy2: datafile copy complete, elapsed time: 00:02:08
output file name=/oraprd04/oradata/teste/system01.dbf tag=TAG20141009T200105
channel prmy1: datafile copy complete, elapsed time: 00:02:28
Finished backup at 09-OCT-2014

contents of Memory Script:
{
switch clone datafile all;
}
executing Memory Script

datafile 1 switched to datafile copy
input datafile copy RECID=61 STAMP=860529818 file name=/oraprd04/oradata/teste/system01.dbf
datafile 2 switched to datafile copy
input datafile copy RECID=62 STAMP=860529818 file name=/oraprd04/oradata/teste/sysaux01.dbf
datafile 3 switched to datafile copy
input datafile copy RECID=63 STAMP=860529818 file name=/oraprd04/oradata/teste/undotbs01.dbf
datafile 4 switched to datafile copy
input datafile copy RECID=64 STAMP=860529819 file name=/oraprd04/oradata/teste/users01.dbf

contents of Memory Script:
{
set until scn 2406620;
recover
standby
clone database
noredo
delete archivelog
;
}
executing Memory Script

executing command: SET until clause

Starting recover at 09-OCT-2014

Finished recover at 09-OCT-2014
Finished Duplicate Db at 09-OCT-2014
released channel: prmy1
released channel: prmy2
released channel: prmy3
released channel: prmy4
released channel: stby

RMAN>

Após o processo de restore é necessário que pelo menos um archive seja gerado no ambiente primario (primary) para que o mesmo seja aplicado na base de teste quando realizar o recover da mesma.

select instance_name from v$instance;

INSTANCE_NAME
----------------
primary

archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination /archive/primary
Oldest online log sequence 1252
Next log sequence to archive 1254
Current log sequence 1254
alter system switch logfile;

System altered.

Gerado o archive em produção, devemos conectar na base de TESTE e executar os comandos abaixo:

  • ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;  – Realiza o processo de recover da base de teste.Devemos esperar a aplicação de pelo menos um archive na base de teste, antes de cancelar o processo de recover com o comando abaixo.
  • ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;                                         – Cancela o recover da base.
  • ALTER DATABASE ACTIVATE STANDBY DATABASE;                                                                           – Ativa a base de standby como produção.
  • ALTER DATABASE OPEN;                                                                                                                         – Abre a base em modo read write.
SQL> select instance_name from v$instance;

INSTANCE_NAME
----------------
teste

SQL> select open_mode, database_role from v$database;

OPEN_MODE DATABASE_ROLE
-------------------- ----------------
MOUNTED PHYSICAL STANDBY

SQL> alter database recover managed standby database using current logfile disconnect;

Database altered.

SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;

Database altered.

SQL> ALTER DATABASE ACTIVATE STANDBY DATABASE;

Database altered.

SQL> alter database open;

Database altered.

SQL> select open_mode, database_role from v$database;

OPEN_MODE DATABASE_ROLE
-------------------- ----------------
READ WRITE PRIMARY

Concluídas todas as etapas acima, nossa base de teste está em modo read write, pronta para ser utilizada. Você pode manter as alterações realizadas que não terá impacto no seu ambiente.

http://docs.oracle.com/cd/B19306_01/backup.102/b14194/rcmsynta028.htm

http://docs.oracle.com/cd/A97630_01/server.920/a96653/cascade_appx.htm

%name Duplicate a partir de um active DataGuard   11.2.0.4

Autor: Jhonata Lamim

MBA em Banco de Dados Oracle, formado pelo Centro Universitário de Araraquara (UNIARA), graduado em Sistemas de Informação pelo Centro Universitário de Brusque (UNIFEBE).

Atua com Banco de Dados Oracle desde Junho de 2010. Atualmente é DBA Senior na Exímio Soluções em TI (www.eximioti.com.br)

Principais atividade:

Implementação, migração, gerenciamento e suporte a produtos Oracle (10g, 11g, 12c, RAC), multiplataforma;
Monitoramento de ambientes 24×7;
Backup e Recovery;
Performance e Tuning;
Alta disponibilidade (HA);
EM database/grid/cloud control 12c/13c;
Conversão de databases;
Standby database / Oracle Data Guard;
Migração de dados para Oracle;

Experiência:

DBA Oracle Teiko Soluções em TI – Jun/2010 – Abr/2018
DBA Oracle, Outsourcing – Marfrig Group – Set/2013 – Abr/2018
DBA Oracle, Outsourcing – Grupo Notre Dame – Intermédica – Mar/2017 – Abr/2018
DBA Oralce, Outsourcing – Hospital Beneficiência Portuguesa de São Paulo – Set/2015 – Abr/2018
DBA Oracle, Outsourcing – Fundação São Francisco Xavier –  Set/2015 – Fev/2017
DBA Oracle, Outsourcing – Unimed Grande Florianopolis – Set/2014 – Jul/2016
DBA Oracle, Outsourcing – Hospital Moinhos de Vento – Set/2014 – Set/2015
DBA Oracle, Outsourcing – Santa Casa de Misericórdia de Porto Alegre – 2013

Certificações:

OCS 12C – Oracle Real Application Clusters 12c Certified Implementation Specialist
OCS 12C – Oracle Database 12c Certified Implementation Specialist
OCE 11G – Oracle Database 11g: Performance Tuning
OCA 11G – Oracle Certified Associate Administrator
OCP 11G/12C – Oracle Certified Professional Administrator
OCS 11G – Oracle Certified Specialist
OPNCS 11G – Oracle Partner Network Certified Specialist
OCS – Oracle Linux 6 Implementation Essentials

Linkedin: https://www.linkedin.com/in/jhonata-lamim-dba-oracle-61366484/