segunda-feira, 28 de julho de 2014

Criando um Banco de Teste D-1


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 & 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 & 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 :

   * DROPAR o Banco PROD D-1
   * Resturar o ControlFile
   * Resturar os DataFiles
   * Recuperar os DataFiles
   * 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:\>set oracle_sid=bdprod

C:\>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.  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> 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> CONFIGURE CONTROLFILE AUTOBACKUP ON;
RMAN> 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.

            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 DropDataBase.txt;

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

exit;

3)Criar o inicia_nomount.txt

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

exit;

4) Criar o script 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 DB_CREATE_FILE_DEST para indicar o diretorio onde deseja restaurar o banco de dados e comando " switch datafile all" para que o Oracle edite o controlfile com a nova localização.  

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

   }

5)O ultimo passo é criar o 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.



















Nenhum comentário:

Postar um comentário