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" &gt; /tmp/data.log rman log=/tmp/logbkpDGUARD.${DATABKP}.log &lt;&lt; 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'" &gt; " 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" &gt; /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;