Banco de Dados

Ξ Deixe um comentário

Resolvendo problemas com o comando Duplicate Database

publicado por Alexandre Luis Pires

Procedimento a ser executado no caso de falha ao criar o dataguard fisico pelo comando duplicate do RMAN, através do script restoreDGUARD.sh descrito abaixo:

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 <a href="mailto:sys@bdorigem">sys@bdorigem</a>
connect auxiliary / connect catalog <a href="mailto:spcrman@rman">spcrman@rman</a>
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

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/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
spool /oracle/catalogfiles.txt select 'catalog datafilecopy '||''''||name||''''||';' from v$datafile; 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;

Autor

ORACLE OCE RAC 10g R2, OCP 11g, 10g , 9i e 8i - Mais de 22 anos de experiência na área de TI.

Alexandre Luis Pires

Comentários

You must be logged in to post a comment.

Busca

Patrocínio

Publicidade



Siga-nos!

Newsletter: Inscreva-se

Para se inscrever em nossa newsletter preencha o formulário.

Artigos Recentes