Olá pessoal.
Manja quando te pedem para criar uma base nova para desenvolvimento, simulação, etc. Tranquilo.
Vamos fazer um duplicate e resolvemos o assunto, certo?
Só que o cara da infra fala que o duplicate não vai ser possível (nem o "comum", nem o active) já que o processo vai trafegar muitos dados pela rede, e o backup fica em uma rede separada e vai sentar o link se fizer, e blá blá blá.
Ok, então vamos copiar o backup para a máquina de destino, e fazemos um restore pensa o pequeno gafanhoto, nosso DBA.
Opa um restore também complica, poque essa máquina é usada para um DataGuard do cliente, e ele já tem uma base chamada "BANCO49" lá, que é o mesmo nome claro da sua base de produção.
Claro, poderíamos usar um workaround (nome bonito né) e colocar o nosso DB_UNIQUE_NAME com o nome da nossa nova base e manter o DB_NAME com o nome original para "burlar" a restrição dos nomes.
Porém isso não é recomendável e não é legal também. Para resolver esse problema, desde a versão 11g temos uma alternativa legal e que nem todo mundo conhece.
Podemos fazer um duplicate sem acessar o target.
No note "RMAN 11GR2 : DUPLICATE Without Target And Recovery Catalog Connection (Doc ID 874352.1)" temos o procedimento descrito que é muito simples e eu descrevo abaixo para vocês, com alguns acertos feitos por mim.
Na verdade o procedimento é o mesmo de uma duplicate comum, com apenas alguns acertos.
1) Os backuppieces devem ser copiados para a máquina de destino. No nosso exemplo, irei copiar para "/nfbackup/rman/BANCO49".
2) O procedimento funciona com o "DB_FILE_NAME_CONVERT", porém eu gosto de ter um pouco mais de controle sobre o processo, por isso eu uso o "SET NEWNAME".
3) Podemos usar o OMF (Oracle Managed Files) para definição dos locais dos datafiles. Eu particularmente gosto disso e uso sempre o "SET NEWNAME TO NEW". Sendo assim, devemos configurar:
*.db_create_file_dest = '/BANCO49/oradata/banco49/'
*.db_create_online_log_dest_1 = '/BANCO49/oradata/banco49/'
*.db_create_online_log_dest_2 = '/BANCO49/oradata/banco49/'
4) Todos os outros procedimentos para o duplicate de uma base comum devem ser observados.
Tudo isso pronto, vamos ao duplicate. Só que antes, mais algumas observações importantes:
1) Repare que iremos nos conectar somente a base auxiliar ("rman AUXILIARY /").
2) Podemos alocar quantos canais precisarmos, mas não esqueça somente no EE.
3) Esse duplicate somente funciona com o "UNTIL TIME".
4) O comando de duplicate também é um pouquinho diferente.
5) O pulo do gato está na cláusula "BACKUP LOCATION '/local/do/backup' "
Todas as mudanças estão listadas abaixo.
RUN
{
ALLOCATE AUXILIARY CHANNEL aux1 DEVICE TYPE DISK
FORMAT '/nfbackup/rman/BANCO49/%d_%Y%M%D_%U.dat';
ALLOCATE AUXILIARY CHANNEL aux2 DEVICE TYPE DISK
FORMAT '/nfbackup/rman/BANCO49/%d_%Y%M%D_%U.dat';
ALLOCATE AUXILIARY CHANNEL aux3 DEVICE TYPE DISK
FORMAT '/nfbackup/rman/BANCO49/%d_%Y%M%D_%U.dat';
ALLOCATE AUXILIARY CHANNEL aux4 DEVICE TYPE DISK
FORMAT '/nfbackup/rman/BANCO49/%d_%Y%M%D_%U.dat';
set newname for datafile 1 to new;
set newname for datafile 2 to new;
set newname for datafile 3 to new;
set newname for datafile 4 to new;
set newname for datafile 5 to new;
set newname for datafile 6 to new;
set newname for datafile 7 to new;
set newname for tempfile 1 to new;
set newname for tempfile 2 to new;
DUPLICATE DATABASE TO banco49
UNTIL TIME "TO_DATE('02/10/2016 10:00:00','DD/MM/YYYY HH24:MI:SS')"
LOGFILE
GROUP 1 ('/BANCO49/oradata/sml49/redo01.log') SIZE 300M REUSE,
GROUP 2 ('/BANCO49/oradata/sml49/redo02.log') SIZE 300M REUSE,
GROUP 3 ('/BANCO49/oradata/sml49/redo03.log') SIZE 300M REUSE
BACKUP LOCATION '/nfbackup/rman/BANCO49';
}
EXIT;
EOF
É isso, agora basta criar um arquivo dup.sh e deixar rodando em nohup.
Pode parecer besteira, mas já quebrou alguns galhos....
Grande abraço.
Mario
Show de bola, também uso esse procedimento é sucesso!
ResponderExcluirLegal Paulo.. É um ótimo procedimento que nem todos conhecem né... Abraço
ResponderExcluirmuy bueno!
ResponderExcluir