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.
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=(STANDBY_LOGFILES,STANDBY_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 primário (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; 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.
FONTE:
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
Comentários
Postar um comentário