Duplicando bases Oracle com RMAN

Olá! Neste artigo descreverei de maneira bem simples como duplicar uma base de dados de uma instância para outra.
Neste modelo usaremos o RMAN e seu comando DUPLICATE DATABASE.

Cenário

Bem, nosso cenário será bem simples. Contamos com apenas um servidor e duas instâncias:

ORCL1 : Origem de nossos dados

ORCL2 : Base que será atualizada

Por favor, observe que neste artigo vamos trazer algo bem simples de ser implementado e que pode quebrar um baita galho quando o assunto for atualizar uma base e o EXP/EXPDP não der conta. Infelizmente pela extensão de conteúdo do RMAN, não entraremos em muitos detalhes. 😉

Preparando

Neste caso, eu criei a base ORCL2 usando o bom e velho DBCA, afinal vamos substituir o conteúdo de qualquer jeito. Se quiser criar as pastas, gerar um SPFILE ou PFILE e abrir a base como NOMOUNT, por favor, fique a vontade!
Se você não tem o hábito ou desconhece os passos para criar as pastas e spfiles ou não tem muita experiência com isto, sugiro usar o DBCA. É prático, fácil e beeeem demorado hahaha


Passo 1: Inicie a base de destino como nomount;

[oracle@lx-ora12c oradata]$ export ORACLE_SID=orcl2
[oracle@lx-ora12c oradata]$ sqlplus / as sysdba

SQL*Plus: Release 12.1.0.1.0 Production on Thu Mar 6 15:13:20 2014

Copyright (c) 1982, 2013, Oracle.  All rights reserved.


Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Pro..
With the Partitioning, OLAP, Advanced Analytics and Real Application ..

SQL> startup force nomount;
ORACLE instance started.

Total System Global Area  417546240 bytes
Fixed Size		    2289064 bytes
Variable Size		  339739224 bytes
Database Buffers	   71303168 bytes
Redo Buffers		    4214784 bytes
SQL> 

Inicie a base de destino USANDO PFILE!

Com a base em estado NOMOUNT poderemos usar o RMAN para iniciar o processo.


Passo 2: Conecte-se nas bases simultaneamente usando RMAN
Observe que, como a base de destino está como NOMOUNT ( não aceitando conexões, por consequência ), deveremos exportar o ORACLE_SID dele e usar a conexão local:

[oracle@lx-ora12c ~]$ export ORACLE_SID=orcl2

Uma vez com o ORACLE_SID exportado, podemos conectar nas bases usando o RMAN:

[oracle@lx-ora12c dbs]$ rman target sys@orcl1 auxiliary sys

Recovery Manager: Release 12.1.0.1.0 - Production on Thu Mar 6 15:27:..

Copyright (c) 1982, 2013, Oracle and/or its affiliates.  All rights r..

target database Password: 
connected to target database: ORCL1 (DBID=1222554844)
auxiliary database Password: 
connected to auxiliary database: ORCL2 (not mounted)

RMAN>

Observe que utilizaremos a base TARGET como ORIGEM e a base AUXILIARY como DESTINO.


Passo 3: Fazer a cópia da base…

	DUPLICATE TARGET DATABASE TO orcl2
		FROM ACTIVE DATABASE
		DB_FILE_NAME_CONVERT 
			'/u01/app/oradata/ORCL1','/u01/app/oradata/ORCL2'
		SPFILE
			PARAMETER_VALUE_CONVERT 
				'/u01/app/oradata/ORCL1', 
				'/u01/app/oradata/ORCL2',
				'/u01/app/fast_recovery_area/ORCL1',
				'/u01/app/fast_recovery_area/ORCL2'
			SET LOG_FILE_NAME_CONVERT 
				'/u01/app/oradata/ORCL1',
				'/u01/app/oradata/ORCL2',
				'/u01/app/fast_recovery_area/ORCL1',
				'/u01/app/fast_recovery_area/ORCL2';
CUIDADO!

Com este comando, o RMAN recarregará os controlfiles da origem e ele não questionará sobre o caso de sobreescrita!

Tenha certeza de ter colocado todos os caminhos no parâmetro PARAMETER_VALUE_CONVERT .

E ao final….


….

contents of Memory Script:
{
Alter clone database open resetlogs;
}
executing Memory Script

database opened
Finished Duplicate Db at 06-MAR-14

RMAN>

Recovery Manager complete.

Descrição do que estamos fazendo….

Uma base pode ser duplicada de duas formas:

ATIVAMENTE: Usando a opção FROM ACTIVE DATABASE forçamos ao RMAN que copie o conteúdo da base que está em execução na TARGET para a AUXILIARY. [ Ele não gera backup ]

POR BACKUP: Se não usarmos a opção FROM ACTIVE DATABASE, o RMAN vai procurar o primeiro backup disponível da base TARGET e o usará para restaurar a AUXILIARY.

Durante estes processos o ARCHIVELOG SERÁ APLICADO!.

* Digo isto pois um dia eu fiz caquinha subindo a base com archivelog 😀

Parâmetros

DB_FILE_NAME_CONVERT: Define o caminho onde os arquivos ( datafiles ) serão criados. Ele substitui o parâmetro DB_FILE_NAME_CONVERT que estiver no PFILE. Informe os caminhos sempre em duplas: ‘CAMINHO ORIGINAL’,’CAMINHO NOVO’
SPFILE: Permite informarmos algumas opções para nosso novo SPFILE.
PARAMETER_VALUE_CONVERT: Altera os caminhos contidos dentro do arquivo de configuração. Informe os caminhos sempre em duplas: ‘CAMINHO ORIGINAL’,’CAMINHO NOVO’
SET: Define novos valores para o parâmetro informado, como no exemplo usado por LOG_FILE_NAME_CONVERT.
SET LOG_FILE_NAME_CONVERT: Informa que os caminhos de log ( redolog ) devem ser substituídos. Segue a mesma lógica do PARAMETER_VALUE_CONVERT.

FIM

Pois é, só isso. Essa é uma maneira simples prática e rápida de duplicar uma base e, em alguns casos, muito mais rápida que um datapump.

Deixe uma resposta