PASSO A PASSO PARA RESOLVER PROBLEMAS COM DUPLICATE DATABASE 10G

PASSO A PASSO PARA RESOLVER PROBLEMAS COM DUPLICATE DATABASE 10G 

Na realidade esse procedimento é o mesmo que o comando duplicate faz internamente, depois de um final de semana completo apanhando desse  comando, e após várias tentativas malsucedidas, resolvi desmembrá-lo para continuar do ponto do erro pra frente.

Resolveu meu problema, e é óbvio que depois de meses eu fui descobrir que a causa real, que fazia com que o comando parasse no meio era uma configuração no listener do repositorio, que não permitia que a conexão se perdesse após 10 horas de inatividade (tempo do restore do banco).

Ai vai o procedimento:

Primeiramente crie um script através de um editor qualquer (eu usei o VI) para fazer rodar o  duplicate do RMAN,  no meu caso foi o DUPDGUARD.sh, veja abaixo:

———————————————————————————————

vi DUPDGUARD.sh
PATH=$PATH:$HOME/bin
export PATH unset USERNAME
# Definicoes Para o Usuario Oracle
TMP=/tmp; export TMP TMPDIR=$TMP; export TMPDIR
ORACLE_BASE=/oracle/product/app; export ORACLE_BASE ORACLE_HOME=$ORACLE_BASE/10R2/db; 
export ORACLE_HOME ORACLE_SID=BANCO1; export ORACLE_SID ORACLE_TERM=xterm; 
export ORACLE_TERM PATH=/usr/sbin:$PATH; 
export PATH PATH=$ORACLE_HOME/bin:$PATH; 
export PATH
LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib; 
export LD_LIBRARY_PATH CLASSPATH=$ORACLE_HOME/jre:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib; 
export CLASSPATH
DATABKP=`date +%Y%m%d%H%M%S` 
echo "$DATABKP" > /tmp/data.log rman  log=/tmp/logbkpDGUARD.${DATABKP}.log << EOF 
connect target sys@bdorigem
connect  auxiliary / 
connect catalog spcrman@rman
run { 
ALLOCATE auxiliary CHANNEL c1 DEVICE TYPE DISK FORMAT '/DADOS/FULL/rman/%U'; 
ALLOCATE auxiliary CHANNEL c2 DEVICE TYPE DISK FORMAT '/DADOS/FULL/rman/%U';
ALLOCATE auxiliary CHANNEL c3 DEVICE TYPE DISK FORMAT '/DADOS/FULL/rman/%U'; 
ALLOCATE auxiliary CHANNEL c4 DEVICE TYPE DISK FORMAT '/DADOS/FULL/rman/%U'; 
ALLOCATE auxiliary CHANNEL c5 DEVICE TYPE DISK FORMAT '/DADOS/FULL/rman/%U'; 
ALLOCATE auxiliary CHANNEL c6 DEVICE TYPE DISK FORMAT '/DADOS/FULL/rman/%U'; 
duplicate target database for standby; 
release channel c1; 
release channel c2; 
release channel c3; 
release channel c4; 
release channel c5; 
release channel c6;
} EOF
:wq

———————————————————————————————*-*-*-

Nesse caso até a parte o restore rodou sme problmas, porém ao tentar rodar o script interno de final do duplicate aparece a mensagem de erro abaixo:

Finished restore at 30-DEC-10
contents of Memory Script:
{
switch clone datafile all;
}
executing Memory Script
released channel: c1
released channel: c2
released channel: c3
released channel: c4
released channel: c5
released channel: c6
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of Duplicate Db command at 12/30/2010 18:40:06
RMAN-03015: error occurred in stored script Memory Script
RMAN-06004: ORACLE error from recovery catalog database: ORA-03135: connection lost contact
ORACLE error from recovery catalog database: ORA-03114: not connected to ORACLE

Para solucionar esse problema devemos seguir os 13 passos a seguir na ordem crescente:

PASSO 1.

Após o erro,o banco estará montado, deveremos então gerar um script do controlfile para ser editado nos passos posteriores através do seguinte comando:

alter database backup controlfile to trace;

PASSO 2

após o comando deve-se ir até a pasta udump abaixo do $ORACLE_BASE/admin/banco1/udump e fazer um rename desse arquivo para identificálo como controlfile atual.

Mv spcap1_ora_626734.trc controlfile03_01_2011.txt

PASSO 3

voltar para o home com o comando “/”

setar as variaveis do ASM com o comando “. .ASM”

——————————————————————————————————————–

#PATH=/usr/bin:/etc:/usr/sbin:/usr/ucb:$HOME/bin:/usr/bin/X11:/sbin:.
export PATH
if [ -s "$MAIL" ]
# This is at Shell startup.  In normal then echo "$MAILMSG"
# operation, the Shell checks fi
# periodically.
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then . ~/.bashrc fi
# Oracle specific environment # .profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then . ~/.bashrc fi
# Oracle specific environment
ORACLE_BASE=/oracle/product/app
ORACLE_HOME=/oracle/product/asm
ORACLE_ASM_HOME=/oracle/product/asm
ORACLE_CRS_HOME=/oracle/product/crs
ORACLE_SID=+ASM1 #
LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib export
TNS_ADMIN=$ORACLE_HOME/network/admin
ORACLE_NLS33=$ORACLE_HOME/nls/data
EDITOR=vi # User specific environment and startup programs
PATH=$PATH:$HOME/bin:$ORACLE_HOME/bin:$ORACLE_RAC_HOME/bin:$ORACLE_CRS_HOME/bin:$ORACLE_HOME/OPatch:/sbin
export PATH ORACLE_BASE ORACLE_HOME ORACLE_SID ORACLE_RAC_HOME ORACLE_CRS_HOME ORACLE_ASM_HOME LD_LIBRARY_PATH ORACLE_NLS33 EDITOR
export TEMP=/tmp export TMP=/tmp export TMPDIR=/tmp
umask 022
export PS1="$ORACLE_SID "'$PWD'" > "
echo " " echo " Hostname    : `hostname`" 
echo " ORACLE_SID  : $ORACLE_SID " 
echo " ORACLE_HOME : $ORACLE_HOME " 
echo " USER   : `whoami` " 
echo " " echo " " 
--------------------------------------------------------------------------------------------------------------------
entrar no ASM com o comando “AMSCMD”
ir para a pasta de datafiles com o comando “cd +dg1/dbale/datafile”
listar todos as datafiles com o comando “ls -lart”

copiar os nomes selecionando todos e copiando para um editor de texto qualquer

PASSO 4

Editar o controlfile gerado no PASSO 1 e substituir os nomes do datafiles pelos nomes e caminho copiados do ASM.

PASSO 5

 Se o banco for Cluster (que é o nosso caso) inibir todos os parametros de cluster_database*** do init.

PASSO 6

Tirar o banco do ar com o comando “shutdown immediate;”
Subir o banco em nomount com o comando “startup nomount;”

Recriar o banco usando o script de controlfile editado, já apontando para os novos caminhos.

PASSO 7

Criar scripts de rename dos datafiles e catalog do RMAN para serem usando nos passos posteriores atraves do script abaixo:

----------------------------------------------------------------------------------
spool /oracle/renamefiles.txt 
select 'SET NEWNAME FOR DATAFILE '||FILE#||' to '||''''||name||''''||';' from v$datafile; 
spool off
spool /oracle/catalogfiles.txt 
select 'catalog datafilecopy '||''''||name||''''||';' from v$datafile; 
spool off

-----------------------------------------------------------
----****esses aqui não iremos usar nesse documento****-----
----****mas eu sempre gosto de deixar ai, vai que...****-----
-----------------------------------------------------------
--spool /oracle/renamelogs.txt 
--select 'SET NEWNAME FOR LOGFILE '||group#||' to '||''''||member||''''||';' 
--from v$logfile ; 
--where IS_RECOVERY_DEST_FILE='YES'; 
--spool off
--spool /oracle/renametmpfiles.txt 
--select 'SET NEWNAME FOR TEMPFILE '||FILE#||' to '||''''||name||''''||';' 
--from v$tempfile; 
--spool off
----------------------------------------------------------------------------------------------------------------------------------------------------

PASSO 8

Tirar o banco do ar com o comando “shutdown immediate;”

Subir o banco em nomount com o comando “startup nomount;”

entrar no RMAN com o comando “rman target / ”

procurar o controlfile de standby gerado logo depois do backup restaurado e fazer o restore usando o seguinte comando :

“restore controlfile from '/caminho/stbcontrolfile20101229020000.ctf'”

PASSO 9

Rodar o script que cataloga os datafiles gerado no passo 7 com o seguinte comando dentro do rman:

“@/oracle/catalogfiles.txt”

OBS: Esse passo é o mais demorado e tem duração de mais de 2 horas.

PASSO 10

Rodar o script que renomeia os datafiles gerado também no passo 7 com o seguinte comando dentro do rman: “@/oracle/renamefiles.txt”

PASSO 11

Ainda dentro do RMAN, catalogar todos os archives da area atraves do comando catalog abaixo que no meu caso está apontando para o diretório “/DADOS/archives”:

“catalog start with '/DADOS/archives';”

PASSO 12

criar  o script de recover abaixo deve rodar como nohup:

PATH=$PATH:$HOME/bin
export PATH unset USERNAME
# Definicoes Para o Usuario Oracle
TMP=/tmp; export TMP TMPDIR=$TMP; export TMPDIR
ORACLE_BASE=/oracle/product/app;
export ORACLE_BASE
ORACLE_HOME=$ORACLE_BASE/10R2/db;
export ORACLE_HOME
ORACLE_SID=bancos1;
export ORACLE_SID
ORACLE_TERM=xterm;
export ORACLE_TERM
PATH=/usr/sbin:$PATH; export PATH PATH=$ORACLE_HOME/bin:$PATH;
export PATH
LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib;
export LD_LIBRARY_PATH
CLASSPATH=$ORACLE_HOME/jre:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib;
export CLASSPATH
DATABKP=`date +%Y%m%d%H%M%S` echo "$DATABKP" > /tmp/data.log rman log=/tmp/reclogbkpDGUARD.${DATABKP}.log << EOF
connect target /
run {
ALLOCATE CHANNEL c1 DEVICE TYPE DISK FORMAT '/DADOS/archives/';
ALLOCATE CHANNEL c2 DEVICE TYPE DISK FORMAT '/DADOS/archives/';
ALLOCATE CHANNEL c3 DEVICE TYPE DISK FORMAT '/DADOS/archives/';
ALLOCATE CHANNEL c4 DEVICE TYPE DISK FORMAT '/DADOS/archives/';
ALLOCATE CHANNEL c5 DEVICE TYPE DISK FORMAT '/DADOS/archives/';
ALLOCATE CHANNEL c6 DEVICE TYPE DISK FORMAT '/DADOS/archives/';
recover database;
release channel c1;
release channel c2;
release channel c3;
release channel c4;
release channel c5;
release channel c6;
} EOF
“ nohup scriptacima.sh &”

Obs > Acompanhar o log no diretorio /tmp

PASSO 13

Depois de aplicar todos os archives existentes e catalogados pelo rman, iniciar o processo de recover automatico pelo dataguard através do sqlplus com o seguinte comando:

“sqlplus / as sysdba”
“ALTER DATABASE RECOVER MANAGED STANDBY DATABASE PARALLEL 4 disconnect from session;”


Anúncios

Sobre Alexandre Pires

ORACLE OCS Goldengate Specialist, OCE RAC 10g R2, OCP 12C, 11g, 10g , 9i e 8i - Mais de 25 anos de experiência na área de TI. Participei de projetos na G&P alocado na TOK STOK, EDINFOR alocado na TV CIDADE "NET", 3CON Alocado no PÃO DE AÇUCAR, DISCOVER alocado na VIVO, BANCO IBI e TIVIT, SPC BRASIL, UOLDIVEO alocado no CARREFOUR e atualmente na ORACLE ACS atendendo os seguintes projetos: VIVO, CLARO, TIM, CIELO, CAIXA SEGUROS, MAPFRE, PORTO SEGURO, SULAMERICA, BRADESCO SEGUROS, BANCO BRADESCO, BASA, SANTANDER, CNJ, TSE, ELETROPAULO, EDP, SKY, NATURA, ODEBRESHT, NISSEI, SICREDI, CELEPAR, TAM, TIVIT, IBM, SMILES, CELEPAR, SERPRO,OKI,BANCO PAN, etc
Esse post foi publicado em PLSQL SCRIPTS, RMAN, TUTORIAL e marcado , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , . Guardar link permanente.

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s