Criando um Banco de Teste D-1
Autor: Alessandro Cordeiro | Publicado: 2014-07-28T14:11:00-07:00


Quantas vezes um DBA precisou criar um mais um Banco de Dados de teste ou atualizar os dados deste a partir de produção, pois os desenvolvedores não consegue realizar seus testes no Banco de Dados de teste, porque este encontra-se muito defasado com de Produção.

E comum em muitos sistemas, tem periodos onde é realizada várias atividade que identifica que mudou o periodo. E infelizmente para os desenvolvedores o banco de dados de teste encontra-se com os dados do periodo anterior. Pode acontecer algum erro na base de produção e a equipe de desenvovimento/suporte não conseguir reproduzir o mesmo justamente por falta de dados.

Este artigo, visa justamente atender essa situação, é a criação de um banco de dados que terá os dados de apenas um dia de atraso, Por isso o nome D -1.

A idéia e ter um banco de todos os dias ele realizar um DROP no Banco de Dados e faz um Restore a partir do Backup de Produção.

Os passos são praticamente os mesmos da segunda parte do artigo "Backup &amp; Recovery Parte 3 - Recuperação Incompleta" que é o tópico "Restaurando o Banco de Dados em
Outro Servidor". Contudo naquele artigo foi apresentado passos que precisava da intervesão manual do DBA, neste artigo, no final dele, é resultar em um script que o processo será totalmente automático. E ainda neste exemplo para ilustração os diretorios de restauração será diferente, pois em um ambiente real isto pode perfeitamente acontecer.

Vale lembrar que para realizar este processo é preciso que o Banco de Produção esteja configurado para fazer Backup em Rede, como demostrado em "Backup &amp; Recovery Parte 1 - Configurando o Banco Recuperação" e é interessante tem lidos os três artigos de Backup e Recovery.

Além disso é preciso realizar a configuração de AutoBackup do ControlFile em um diretorio da Rede, passo este que não apresentei nos artigos anteriores.

O resumo da operá consite basicamente :

&nbsp;&nbsp; * DROPAR o Banco PROD D-1
&nbsp; &nbsp;* Resturar o ControlFile
&nbsp;&nbsp; * Resturar os DataFiles
&nbsp;&nbsp; * Recuperar os DataFiles
&nbsp;&nbsp; * Abrir o Banco de Dados com ResetLog's


Configurar o Banco de Produção Para AutoBackup do ControlFile



Logue no Rman, confirme os parametros, altere os parametros necessários e obtenha o DBID do banco de dados.


C:\&gt;set oracle_sid=bdprod

C:\&gt;rman target sys nocatalog

Gerenciador de Recuperação: Release 11.2.0.1.0 - Production on Seg Jul 28 16:30: 05 2014

Copyright (c) 1982, 2009, Oracle and/or its affiliates. &nbsp;All rights reserved.

Senha do banco de dados de destino:
conectado ao banco de dados de destino: BDPROD (DBID=3924117592)
usar o arquivo de controle do banco de dados de destino em vez do catálogo de recuperação



RMAN&gt; show all;
Os parâmetros de configuração de RMAN para o banco de dados com db_unique_name BDPROD são:
CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # default
CONFIGURE BACKUP OPTIMIZATION OFF; # default
CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default
CONFIGURE CONTROLFILE AUTOBACKUP OFF; # default
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F';
CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET; # default
CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE MAXSETSIZE TO UNLIMITED; # default
CONFIGURE ENCRYPTION FOR DATABASE OFF; # default
CONFIGURE ENCRYPTION ALGORITHM 'AES128'; # default
CONFIGURE COMPRESSION ALGORITHM 'BASIC' AS OF RELEASE 'DEFAULT' OPTIMIZE FOR LOAD TRUE ; # default
CONFIGURE ARCHIVELOG DELETION POLICY TO NONE; # default
CONFIGURE SNAPSHOT CONTROLFILE NAME TO 'D:\APP\C8757887\PRODUCT\11.2.0\DBHOME_1\DATABASE\SNCFBDAGNUS.ORA'; # default


RMAN&gt; CONFIGURE CONTROLFILE AUTOBACKUP ON;
RMAN&gt;&nbsp;CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '\\172.16.1.21\BCK_ORACLE\AUTOBACKUP\CF_%F';

Agora toda vez que o Banco de dados realizar o Backup, uma cópia do controlfile é feito no diretório de Rede compartilhado.

&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Criandos os Script de Recriação do Banco de Teste.



Serão criados 5 arquivos, sendo 1 script CMD que pode ser chamado via agendador de tarefa e os demais contem tarefas especificas para cada passo da atualização.



1) Cria o arquivo CMD

Crie um arquivo com o nome "AtualizaBancoTESTE.cmd" (sugestão) e digite os comandos para invocar os arquivos/scripts que serão criados.


sqlplus sys/senhasecreta as sysdba @DropDataBase.txt
sqlplus sys/senhasecreta as sysdba @inicia_nomount.txt
rman target sys/senhasecreta nocatalog @ScriptRecover.txt
sqlplus sys/senhasecreta as sysdba @AbreBanco.txt

2)Criar o Arquivo&nbsp;DropDataBase.txt;

create pfile=C:\initBDPROD.ora' from spfile;
Shutdown immediate;
startup mount restrict pfile='C:\initBDPROD.ora';
drop database;

exit;

3)Criar o&nbsp;inicia_nomount.txt

startup nomount pfile='C:\initBDPROD.ora';

exit;

4) Criar o script&nbsp;ScriptRecover.txt.

Neste script deve ser informado o DBID do banco de dados de Produção e também o local onde está sendo feito o backup do controlfile.

Não será possivel realizar um restore completo, pois não temos o RedoLog, por isso setamos um restore incompleto, neste exemplo de 4 horas atras da atual.

Use o parametro&nbsp;DB_CREATE_FILE_DEST para indicar o diretorio onde deseja restaurar o banco de dados e comando "&nbsp;switch datafile all" para que o Oracle edite o controlfile com a nova localização.&nbsp;&nbsp;

O script ficará assim:
run {
&nbsp; set dbid=3924117592;&nbsp;
&nbsp; set controlfile autobackup format for device type disk to '\\172.16.1.21\BCK_ORACLE\AUTOBACKUP\CF_%F';';
&nbsp; restore controlfile from autobackup;
&nbsp; alter database mount;
&nbsp; crosscheck backup;
&nbsp; delete expired backup;
&nbsp; set until time 'SYSDATE - 4/24';
&nbsp; sql 'ALTER SYSTEM SET DB_CREATE_FILE_DEST="C:\app\ADMINISTRADOR\oradata"';
&nbsp; set newname for database to NEW;
&nbsp; restore database;
&nbsp; switch datafile all;
&nbsp; recover database;

&nbsp; &nbsp;}

5)O ultimo passo é criar o&nbsp;AbreBanco.txt;
Neste arquivo você deve renomear os RedoLog para um diretorio válido do servidor de teste, recriar-los com Resetlogs e então para o modo Archivelog (o Banco de Teste não deve faze-lo).


alter database rename file 'D:\APP\ADMINISTRATOR\ORADATA\BDPROD\REDO01.LOG' to 'C:\app\ADMINISTRADOR\oradata\BDPROD\ONLINELOG\REDO01.LOG';
alter database rename file 'D:\APP\ADMINISTRATOR\ORADATA\BDPROD\REDO02.LOG' to 'C:\app\ADMINISTRADOR\oradata\BDPROD\ONLINELOG\REDO02.LOG';
alter database rename file 'D:\APP\ADMINISTRATOR\ORADATA\BDPROD\REDO03.LOG' to 'C:\app\ADMINISTRADOR\oradata\BDPROD\ONLINELOG\REDO03.LOG';
alter database open resetlogs;
shutdown immediate;
startup mount;
alter database noarchivelog;
alter database open;
create spfile from pfile='C:\initBDPROD.ora'';
alter system set log_archive_dest_1='' scope=spfile;
alter system set log_archive_dest_2='' scope=spfile;
shutdown immediate;
startup;
exit;

Pronto, agora toda vez que precisar do banco de teste atualizado basta executar o script. Caso precise de D-1 basta somente colocar no agendador de tarefa.

Até a próxima.