Olá,
Neste artigo irei demonstrar na prática como clonar um banco de dados Oracle no mesmo servidor através do comando DUPLICATE DATABASE do RMAN. Irei realizar alguns passos de forma a mostrar a clonagem com o uso de um backup previamente feito pelo RMAN que, aliás, é fundamental e obrigatório para realização da clonagem nas versões Oracle 10g e anteriores. Uma outra abordagem que farei, será a de mostrar os passos para a realização da clonagem sem a utilização de um backup através de um novo recurso do comando duplicate database no RMAN do Oracle 11g chamando de ACTIVE DATABASE. Para mostrar as duas abordagens, usarei o Oracle 11g Rel2 instalado em uma máquina sob o sistema operacional Windows. Já vou adiantando que a clonagem via o comando duplicate database pode ser feita em bancos que estejam operando nos modos NOARCHIVELOG ou ARCHIVELOG. No caso de bancos operando no modo NOARCHIVELOG, o banco de origem deverá estar no mínimo em estado MOUNT e a instância auxiliar deverá estar no estado NOMOUNT.
No primeiro cenário, irei clonar o banco de dados BD02 para TESTE. O primeiro passo é criar os diretórios necessários nos devidos locais de forma que eles possam ficar iguais aos diretórios do banco de dados de origem como admin\TESTE\adump e, no meu caso, oradata\TESTE. Nesta primeira abordagem irei realizar a clonagem utilizando um backup do banco de dados BD02 previamente realizado pelo RMAN como demonstrado abaixo. No caso, o banco de dados de origem BD02 está operando no modo ARCHIVELOG.
RMAN DUPLICATE (usando backup)
C:\>rman target /
Recovery Manager: Release 11.2.0.1.0 - Production on Qua Jul 6 20:33:30 2011
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
conectado ao banco de dados de destino: BD02 (DBID=2693065298)
RMAN> backup full database plus archivelog;
Iniciando backup em 06/07/11
log atual arquivado
usar o arquivo de controle do banco de dados de destino em vez do catálogo
canal alocado: ORA_DISK_1
canal ORA_DISK_1: SID=29 tipo de dispositivo=DISK
canal ORA_DISK_1: iniciando conjunto de backups de log arquivado
canal ORA_DISK_1: especificando log(s) arquivado no conjunto de backups
thread do log arquivado de entrada=1 sequência=16 RECID=1 STAMP=754598030
canal ORA_DISK_1: iniciando o componente 1 em 06/07/11
canal ORA_DISK_1: componente 1 finalizado em 06/07/11
handle de componente=E:\ORACLE\FLASH_RECOVERY_AREA\BD02\BACKUPSET\2011_07_06
canal ORA_DISK_1: conjunto de backups concluído, tempo decorrido: 00:00:01
Finalizado backup em 06/07/11
Iniciando backup em 06/07/11
utilizando o canal ORA_DISK_1
canal ORA_DISK_1: iniciando conjunto de backup completo de arquivo de dados
canal ORA_DISK_1: especificando arquivo[s] de dados no conjunto de backups
número do arquivo=00001 nome=E:\ORACLE\ORADATA\BD02\SYSTEM01.DBF
número do arquivo=00002 nome=E:\ORACLE\ORADATA\BD02\SYSAUX01.DBF
número do arquivo=00003 nome=E:\ORACLE\ORADATA\BD02\UNDOTBS01.DBF
número do arquivo=00004 nome=E:\ORACLE\ORADATA\BD02\USERS01.DBF
número do arquivo=00005 nome=E:\ORACLE\ORADATA\BD02\TBS01.DBF
número do arquivo=00006 nome=E:\ORACLE\ORADATA\BD02\TBS02.DBF
número do arquivo=00007 nome=E:\ORACLE\ORADATA\BD02\TBS03.DBF
canal ORA_DISK_1: iniciando o componente 1 em 06/07/11
canal ORA_DISK_1: componente 1 finalizado em 06/07/11
handle de componente=E:\ORACLE\FLASH_RECOVERY_AREA\BD02\BACKUPSET\2011_07_06
canal ORA_DISK_1: conjunto de backups concluído, tempo decorrido: 00:00:25
canal ORA_DISK_1: iniciando conjunto de backup completo de arquivo de dados
canal ORA_DISK_1: especificando arquivo[s] de dados no conjunto de backups
incluindo arquivo de controle atual no conjunto de backups
incluindo SPFILE atual do conjunto de backups
canal ORA_DISK_1: iniciando o componente 1 em 06/07/11
canal ORA_DISK_1: componente 1 finalizado em 06/07/11
handle de componente=E:\ORACLE\FLASH_RECOVERY_AREA\BD02\BACKUPSET\2011_07_06
canal ORA_DISK_1: conjunto de backups concluído, tempo decorrido: 00:00:01
Finalizado backup em 06/07/11
Iniciando backup em 06/07/11
log atual arquivado
utilizando o canal ORA_DISK_1
canal ORA_DISK_1: iniciando conjunto de backups de log arquivado
canal ORA_DISK_1: especificando log(s) arquivado no conjunto de backups
thread do log arquivado de entrada=1 sequência=17 RECID=2 STAMP=754598064
canal ORA_DISK_1: iniciando o componente 1 em 06/07/11
canal ORA_DISK_1: componente 1 finalizado em 06/07/11
handle de componente=E:\ORACLE\FLASH_RECOVERY_AREA\BD02\BACKUPSET\2011_07_06\
canal ORA_DISK_1: conjunto de backups concluído, tempo decorrido: 00:00:01
Finalizado backup em 06/07/11
Após a criação do backup pelo RMAN, irei conectar no banco de dados de origem e criar um arquivo de inicialização (pfile) na qual o editarei conforme exemplo a seguir.
C:\>sqlplus / as sysdba
SQL*Plus: Release 11.2.0.1.0 Production on Qua Jul 6 20:35:47 2011
Copyright (c) 1982, 2010, Oracle. All rights reserved.
Conectado a:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> create pfile from spfile;
Arquivo criado.
Conteúdo do arquivo de inicialização após a edição
--------------------------------------------------
*.audit_file_dest='E:\oracle\admin\TESTE\adump'
*.audit_trail='db'
*.compatible='11.2.0.0.0'
*.control_files='E:\oracle\oradata\TESTE\control01.ctl'
*.db_block_size=8192
*.db_domain=''
*.db_name='TESTE'
*.db_recovery_file_dest='E:\oracle\flash_recovery_area'
*.db_recovery_file_dest_size=107374182400
*.diagnostic_dest='E:\oracle'
*.memory_target=320864256
*.nls_language='BRAZILIAN PORTUGUESE'
*.nls_territory='BRAZIL'
*.open_cursors=300
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.undo_tablespace='UNDOTBS1'
*.db_file_name_convert =('\oradata\BD02\','\oradata\TESTE\')
*.log_file_name_convert =('\oradata\BD02\','\oradata\TESTE\')
Após a criação do arquivo initTESTE.ora, sua edição e cópia para o local apropriado em %ORACLE_HOME%\database, irei criar um serviço no Windows para poder inicializar a instância no estado NOMOUNT como demonstrado abaixo:
C:\>oradim -new -sid TESTE -syspwd minhasenha
Instância criada.
C:\>set ORACLE_SID=TESTE
Realizada a criação do serviço, irei iniciar a instância no estado NOMOUNT. Neste ponto, esta será a minha instância auxiliar.
C:\>sqlplus / as sysdba
SQL*Plus: Release 11.2.0.1.0 Production on Qua Jul 6 20:44:21 2011
Copyright (c) 1982, 2010, Oracle. All rights reserved.
Conectado a uma instância inativa.
SQL> startup nomount
Instância ORACLE iniciada.
Total System Global Area 322228224 bytes
Fixed Size 1374360 bytes
Variable Size 209717096 bytes
Database Buffers 104857600 bytes
Redo Buffers 6279168 bytes
Está tudo pronto para iniciarmos o processo de clonagem. Abaixo irei conectar na instância BD02. Para tanto, será necessário que tenha um serviço no arquivo TNSNAMES.ORA que aponte para a instância de origem BD02. Já que no prompt do DOS eu executei o comando set ORACLE_SID=TESTE, então no comando abaixo a parte auxiliary / irá se conectar na instância auxiliar TESTE.
C:\>rman target sys/manager@BD02 auxiliary /
Recovery Manager: Release 11.2.0.1.0 - Production on Qua Jul 6 21:08:20 2011
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
conectado ao banco de dados de destino: BD02 (DBID=2693065298)
conectado ao banco de dados auxiliar: TESTE (não montado)
Agora é só iniciar o processo de clonagem com o comando abaixo e o RMAN fará todo o trabalho para nós.
RMAN> duplicate target database to TESTE;
Iniciando Duplicate Db em 06/07/11
usar o arquivo de controle do banco de dados de destino em vez do catálogo
canal alocado: ORA_AUX_DISK_1
canal ORA_AUX_DISK_1: SID=19 tipo de dispositivo=DISK
conteúdo do Script de Memória:
{
sql clone "create spfile from memory";
}
executando Script de Memória
instrução sql: create spfile from memory
conteúdo do Script de Memória:
{
shutdown clone immediate;
startup clone nomount;
}
executando Script de Memória
encerramento de instância Oracle
conectado ao banco de dados auxiliar (não iniciado)
instância Oracle iniciada
Total da Área Global do Sistema 322228224 bytes
Fixed Size 1374360 bytes
Variable Size 218105704 bytes
Database Buffers 96468992 bytes
Redo Buffers 6279168 bytes
conteúdo do Script de Memória:
{
sql clone "alter system set db_name =
''BD02'' comment=
''Modified by RMAN duplicate'' scope=spfile";
sql clone "alter system set db_unique_name =
''TESTE'' comment=
''Modified by RMAN duplicate'' scope=spfile";
shutdown clone immediate;
startup clone force nomount
restore clone primary controlfile;
alter clone database mount;
}
executando Script de Memória
instrução sql: alter system set db_name = ''BD02''
comment= ''Modified by RMAN duplicate'' scope=spfile
instrução sql: alter system set db_unique_name = ''TESTE''
comment= ''Modified by RMAN duplicate'' scope=spfile
encerramento de instância Oracle
instância Oracle iniciada
Total da Área Global do Sistema 322228224 bytes
Fixed Size 1374360 bytes
Variable Size 218105704 bytes
Database Buffers 96468992 bytes
Redo Buffers 6279168 bytes
Iniciando restore em 06/07/11
canal alocado: ORA_AUX_DISK_1
canal ORA_AUX_DISK_1: SID=18 tipo de dispositivo=DISK
canal ORA_AUX_DISK_1: iniciando restauração de conjunto de backups
canal ORA_AUX_DISK_1: restaurando arquivo de controle
canal ORA_AUX_DISK_1: lendo backup E:\ORACLE\FLASH_RECOVERY_AREA\BD02\BACKUPSET
canal ORA_AUX_DISK_1: handle de componente=E:\ORACLE\FLASH_RECOVERY_AREA\BD02
canal ORA_AUX_DISK_1: restaurada a parte de backup 1
canal ORA_AUX_DISK_1: restauração concluída, tempo decorrido: 00:00:01
nome do arquivo de saída=E:\ORACLE\ORADATA\TESTE\CONTROL01.CTL
Finalizado restore em 06/07/11
banco de dados montado
conteúdo do Script de Memória:
{
set until scn 222488;
set newname for datafile 1 to
"E:\ORACLE\ORADATA\TESTE\SYSTEM01.DBF";
set newname for datafile 2 to
"E:\ORACLE\ORADATA\TESTE\SYSAUX01.DBF";
set newname for datafile 3 to
"E:\ORACLE\ORADATA\TESTE\UNDOTBS01.DBF";
set newname for datafile 4 to
"E:\ORACLE\ORADATA\TESTE\USERS01.DBF";
set newname for datafile 5 to
"E:\ORACLE\ORADATA\TESTE\TBS01.DBF";
set newname for datafile 6 to
"E:\ORACLE\ORADATA\TESTE\TBS02.DBF";
set newname for datafile 7 to
"E:\ORACLE\ORADATA\TESTE\TBS03.DBF";
restore
clone database
;
}
executando Script de Memória
executando comando: SET until clause
executando comando: SET NEWNAME
executando comando: SET NEWNAME
executando comando: SET NEWNAME
executando comando: SET NEWNAME
executando comando: SET NEWNAME
executando comando: SET NEWNAME
executando comando: SET NEWNAME
Iniciando restore em 06/07/11
utilizando o canal ORA_AUX_DISK_1
canal ORA_AUX_DISK_1: iniciando restauração de backups de arquivo de dados
canal ORA_AUX_DISK_1: especificando arquivo(s) para restauração
canal ORA_AUX_DISK_1: restaurando em E:\ORACLE\ORADATA\TESTE\SYSTEM01.DBF
canal ORA_AUX_DISK_1: restaurando em E:\ORACLE\ORADATA\TESTE\SYSAUX01.DBF
canal ORA_AUX_DISK_1: restaurando em E:\ORACLE\ORADATA\TESTE\UNDOTBS01.DBF
canal ORA_AUX_DISK_1: restaurando em E:\ORACLE\ORADATA\TESTE\USERS01.DBF
canal ORA_AUX_DISK_1: restaurando em E:\ORACLE\ORADATA\TESTE\TBS01.DBF
canal ORA_AUX_DISK_1: restaurando em E:\ORACLE\ORADATA\TESTE\TBS02.DBF
canal ORA_AUX_DISK_1: restaurando em E:\ORACLE\ORADATA\TESTE\TBS03.DBF
canal ORA_AUX_DISK_1: lendo backup E:\ORACLE\FLASH_RECOVERY_AREA\BD02\
canal ORA_AUX_DISK_1: handle de componente=E:\ORACLE\FLASH_RECOVERY_AREA\BD02\
canal ORA_AUX_DISK_1: restaurada a parte de backup 1
canal ORA_AUX_DISK_1: restauração concluída, tempo decorrido: 00:00:45
Finalizado restore em 06/07/11
conteúdo do Script de Memória:
{
switch clone datafile all;
}
executando Script de Memória
arquivo de dados 1 alternado para a cópia do arquivo de dados
cópia do arquivo de dados file name=E:\ORACLE\ORADATA\TESTE\SYSTEM01.DBF
arquivo de dados 2 alternado para a cópia do arquivo de dados
cópia do arquivo de dados file name=E:\ORACLE\ORADATA\TESTE\SYSAUX01.DBF
arquivo de dados 3 alternado para a cópia do arquivo de dados
cópia do arquivo de dados file name=E:\ORACLE\ORADATA\TESTE\UNDOTBS01.DBF
arquivo de dados 4 alternado para a cópia do arquivo de dados
cópia do arquivo de dados file name=E:\ORACLE\ORADATA\TESTE\USERS01.DBF
arquivo de dados 5 alternado para a cópia do arquivo de dados
cópia do arquivo de dados file name=E:\ORACLE\ORADATA\TESTE\TBS01.DBF
arquivo de dados 6 alternado para a cópia do arquivo de dados
cópia do arquivo de dados file name=E:\ORACLE\ORADATA\TESTE\TBS02.DBF
arquivo de dados 7 alternado para a cópia do arquivo de dados
cópia do arquivo de dados file name=E:\ORACLE\ORADATA\TESTE\TBS03.DBF
conteúdo do Script de Memória:
{
set until scn 222488;
recover
clone database
delete archivelog
;
}
executando Script de Memória
executando comando: SET until clause
Iniciando recover em 06/07/11
utilizando o canal ORA_AUX_DISK_1
iniciar recuperação de mídia
o log arquivado para thread 1 com sequência 17 já está no disco
recuperação da mídia concluída, tempo decorrido: 00:00:01
Finalizado recover em 06/07/11
conteúdo do Script de Memória:
{
shutdown clone immediate;
startup clone nomount;
sql clone "alter system set db_name =
''TESTE'' comment=
''Reset to original value by RMAN'' scope=spfile";
sql clone "alter system reset db_unique_name scope=spfile";
shutdown clone immediate;
startup clone nomount;
}
executando Script de Memória
banco de dados desmontado
encerramento de instância Oracle
conectado ao banco de dados auxiliar (não iniciado)
instância Oracle iniciada
Total da Área Global do Sistema 322228224 bytes
Fixed Size 1374360 bytes
Variable Size 218105704 bytes
Database Buffers 96468992 bytes
Redo Buffers 6279168 bytes
instrução sql: alter system set db_name = ''TESTE''
comment= ''Reset to original value by RMAN'' scope=spfile
instrução sql: alter system reset db_unique_name scope=spfile
encerramento de instância Oracle
conectado ao banco de dados auxiliar (não iniciado)
instância Oracle iniciada
Total da Área Global do Sistema 322228224 bytes
Fixed Size 1374360 bytes
Variable Size 218105704 bytes
Database Buffers 96468992 bytes
Redo Buffers 6279168 bytes
instrução: CREATE CONTROLFILE REUSE SET DATABASE "TESTE" RESETLOGS ARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 292
LOGFILE
GROUP 1 ( 'E:\ORACLE\ORADATA\TESTE\REDO01.LOG' ) SIZE 50 M REUSE,
GROUP 2 ( 'E:\ORACLE\ORADATA\TESTE\REDO02.LOG' ) SIZE 50 M REUSE,
GROUP 3 ( 'E:\ORACLE\ORADATA\TESTE\REDO03.LOG' ) SIZE 50 M REUSE
DATAFILE
'E:\ORACLE\ORADATA\TESTE\SYSTEM01.DBF'
CHARACTER SET WE8MSWIN1252
conteúdo do Script de Memória:
{
set newname for tempfile 1 to
"E:\ORACLE\ORADATA\TESTE\TEMP01.DBF";
switch clone tempfile all;
catalog clone datafilecopy "E:\ORACLE\ORADATA\TESTE\SYSAUX01.DBF",
"E:\ORACLE\ORADATA\TESTE\UNDOTBS01.DBF",
"E:\ORACLE\ORADATA\TESTE\USERS01.DBF",
"E:\ORACLE\ORADATA\TESTE\TBS01.DBF",
"E:\ORACLE\ORADATA\TESTE\TBS02.DBF",
"E:\ORACLE\ORADATA\TESTE\TBS03.DBF";
switch clone datafile all;
}
executando Script de Memória
executando comando: SET NEWNAME
arquivo temporário renomeado 1 para
E:\ORACLE\ORADATA\TESTE\TEMP01.DBF no arquivo de controle
cópia do arquivo de dados catalogado
nome do arquivo de cópia=E:\ORACLE\ORADATA\TESTE\SYSAUX01.DBF
cópia do arquivo de dados catalogado
nome do arquivo de cópia=E:\ORACLE\ORADATA\TESTE\UNDOTBS01.DBF
cópia do arquivo de dados catalogado
nome do arquivo de cópia=E:\ORACLE\ORADATA\TESTE\USERS01.DBF
cópia do arquivo de dados catalogado
nome do arquivo de cópia=E:\ORACLE\ORADATA\TESTE\TBS01.DBF
cópia do arquivo de dados catalogado
nome do arquivo de cópia=E:\ORACLE\ORADATA\TESTE\TBS02.DBF
cópia do arquivo de dados catalogado
nome do arquivo de cópia=E:\ORACLE\ORADATA\TESTE\TBS03.DBF
arquivo de dados 2 alternado para a cópia do arquivo de dados
cópia do arquivo de dados file name=E:\ORACLE\ORADATA\TESTE\SYSAUX01.DBF
arquivo de dados 3 alternado para a cópia do arquivo de dados
cópia do arquivo de dados file name=E:\ORACLE\ORADATA\TESTE\UNDOTBS01.DBF
arquivo de dados 4 alternado para a cópia do arquivo de dados
cópia do arquivo de dados file name=E:\ORACLE\ORADATA\TESTE\USERS01.DBF
arquivo de dados 5 alternado para a cópia do arquivo de dados
cópia do arquivo de dados file name=E:\ORACLE\ORADATA\TESTE\TBS01.DBF
arquivo de dados 6 alternado para a cópia do arquivo de dados
cópia do arquivo de dados file name=E:\ORACLE\ORADATA\TESTE\TBS02.DBF
arquivo de dados 7 alternado para a cópia do arquivo de dados
cópia do arquivo de dados file name=E:\ORACLE\ORADATA\TESTE\TBS03.DBF
conteúdo do Script de Memória:
{
Alter clone database open resetlogs;
}
executando Script de Memória
banco de dados aberto
Finalizado Duplicate Db em 06/07/11
Pronto. A clonagem foi realizada e poderemos conectar no banco de dados TESTE como demonstrado abaixo.
C:\>sqlplus / as sysdba
SQL*Plus: Release 11.2.0.1.0 Production on Qua Jul 6 21:16:54 2011
Copyright (c) 1982, 2010, Oracle. All rights reserved.
Conectado a:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> select open_mode,name,created from v$database;
OPEN_MODE NAME CREATED
-------------------- --------------------- ----------
READ WRITE TESTE 06/07/2011
SQL> select file_name from dba_data_files;
FILE_NAME
------------------------------------------------
E:\ORACLE\ORADATA\TESTE\SYSTEM01.DBF
E:\ORACLE\ORADATA\TESTE\SYSAUX01.DBF
E:\ORACLE\ORADATA\TESTE\UNDOTBS01.DBF
E:\ORACLE\ORADATA\TESTE\USERS01.DBF
E:\ORACLE\ORADATA\TESTE\TBS01.DBF
E:\ORACLE\ORADATA\TESTE\TBS02.DBF
E:\ORACLE\ORADATA\TESTE\TBS03.DBF
7 linhas selecionadas.
SQL> select file_name from dba_temp_files;
FILE_NAME
------------------------------------------------
E:\ORACLE\ORADATA\TESTE\TEMP01.DBF
RMAN DUPLICATE (Usando o Active Database)
A próxima abordagem será demonstrar a clonagem sem que seja necessário a realização prévia de um backup. Isto só é possível utilizando o Oracle 11g. Neste caso, irei clonar novamente o banco de dados BD02 só que agora como TESTE2. Após a criação dos diretórios necessários, irei realizar a modificação no arquivo de inicialização (pfile) gerado da mesma forma como fiz na primeira abordagem:
Conteúdo do arquivo de inicialização após a edição
--------------------------------------------------
*.audit_file_dest='E:\oracle\admin\TESTE2\adump'
*.audit_trail='db'
*.compatible='11.2.0.0.0'
*.control_files='E:\oracle\oradata\TESTE2\control01.ctl'
*.db_block_size=8192
*.db_domain=''
*.db_name='TESTE2'
*.db_recovery_file_dest='E:\oracle\flash_recovery_area'
*.db_recovery_file_dest_size=107374182400
*.diagnostic_dest='E:\oracle'
*.memory_target=320864256
*.nls_language='BRAZILIAN PORTUGUESE'
*.nls_territory='BRAZIL'
*.open_cursors=300
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.undo_tablespace='UNDOTBS1'
*.db_file_name_convert =('\oradata\BD02\','\oradata\TESTE2\')
*.log_file_name_convert =('\oradata\BD02\','\oradata\TESTE2\')
Diferente da primeira abordagem, precisaremos editar o arquivo LISTENER.ORA de forma a registrar a instância clone conforme demonstrado abaixo:
Conteúdo do arquivo listener.ora
--------------------------------
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = CLRExtProc)
(ORACLE_HOME = E:\oracle\product\11.2.0\dbhome_1)
(PROGRAM = extproc)
)
(SID_DESC =
(GLOBAL_DBNAME = TESTE2)
(ORACLE_HOME = E:\oracle\product\11.2.0\dbhome_1)
(SID_NAME = TESTE2)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = micro)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
ADR_BASE_LISTENER = E:\oracle
Precisaremos também adicionar um serviço no arquivo TNSNAMES.ORA para a instância TESTE2 conforme o exemplo abaixo:
Conteúdo do arquivo tnsnames.ora
--------------------------------
TESTE2 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = micro)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = TESTE2)
)
)
Após realizados os passos acima, irei criar um serviço no Windows da mesma forma que foi realizada na primeira abordagem, de forma a poder inicializar a instância TESTE2 (auxiliar) no estado NOMOUNT. Precisaremos também criar um arquivo de senha como demonstrado a seguir.
C:\>oradim -new -sid TESTE2 -syspwd minhasenha
Instância criada.
C:\>orapwd file=E:\oracle\product\11.2.0\dbhome_1\database\pwdTESTE2.ora
password=minhasenha
Pronto. Agora já poderei inicializar a instância TESTE2 no estado NOMOUNT como demonstrado abaixo:
C:\>set ORACLE_SID=TESTE2
C:\>sqlplus / as sysdba
SQL*Plus: Release 11.2.0.1.0 Production on Qua Jul 6 21:25:37 2011
Copyright (c) 1982, 2010, Oracle. All rights reserved.
Conectado a uma instância inativa.
SQL> startup nomount
Instância ORACLE iniciada.
Total System Global Area 322228224 bytes
Fixed Size 1374360 bytes
Variable Size 209717096 bytes
Database Buffers 104857600 bytes
Redo Buffers 6279168 bytes
Através do comando abaixo, realizarei a conexão com a instância de origem BD02 e com a instância auxiliar TESTE2 para dar início à clonagem de forma online.
C:\>rman target sys/manager@BD02 auxiliary sys/minhasenha@TESTE2
Recovery Manager: Release 11.2.0.1.0 - Production on Qua Jul 6 21:36:59 2011
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
conectado ao banco de dados de destino: BD02 (DBID=2693065298)
conectado ao banco de dados auxiliar: TESTE2 (não montado)
Agora é só iniciar o processo de clonagem utilizando a cláusula from active database do comando DUPLICATE abaixo, e o RMAN fará todo o trabalho para nós de forma online sem a necessidade de utilização de um backup realizado previamente.
RMAN> duplicate target database to TESTE2 from active database;
Iniciando Duplicate Db em 06/07/11
usar o arquivo de controle do banco de dados de destino em vez do catálogo
canal alocado: ORA_AUX_DISK_1
canal ORA_AUX_DISK_1: SID=19 tipo de dispositivo=DISK
conteúdo do Script de Memória:
{
sql clone "create spfile from memory";
}
executando Script de Memória
instrução sql: create spfile from memory
conteúdo do Script de Memória:
{
shutdown clone immediate;
startup clone nomount;
}
executando Script de Memória
encerramento de instância Oracle
conectado ao banco de dados auxiliar (não iniciado)
instância Oracle iniciada
Total da Área Global do Sistema 322228224 bytes
Fixed Size 1374360 bytes
Variable Size 218105704 bytes
Database Buffers 96468992 bytes
Redo Buffers 6279168 bytes
conteúdo do Script de Memória:
{
sql clone "alter system set db_name =
''BD02'' comment=
''Modified by RMAN duplicate'' scope=spfile";
sql clone "alter system set db_unique_name =
''TESTE2'' comment=
''Modified by RMAN duplicate'' scope=spfile";
shutdown clone immediate;
startup clone force nomount
backup as copy current controlfile auxiliary format
'E:\ORACLE\ORADATA\TESTE2\CONTROL01.CTL';
alter clone database mount;
}
executando Script de Memória
instrução sql: alter system set db_name = ''BD02''
comment= ''Modified by RMAN duplicate'' scope=spfile
instrução sql: alter system set db_unique_name = ''TESTE2''
comment= ''Modified by RMAN duplicate'' scope=spfile
encerramento de instância Oracle
instância Oracle iniciada
Total da Área Global do Sistema 322228224 bytes
Fixed Size 1374360 bytes
Variable Size 218105704 bytes
Database Buffers 96468992 bytes
Redo Buffers 6279168 bytes
Iniciando backup em 06/07/11
canal alocado: ORA_DISK_1
canal ORA_DISK_1: SID=37 tipo de dispositivo=DISK
canal ORA_DISK_1: iniciando cópia de arquivo de dados
copiando arquivo de controle atual
nome do arquivo=E:\ORACLE\PRODUCT\11.2.0\DBHOME_1\DATABASE\SNCFBD02.ORA
canal ORA_DISK_1: cópia de arquivo de dados concluída; decorrido: 00:00:03
Finalizado backup em 06/07/11
banco de dados montado
conteúdo do Script de Memória:
{
set newname for datafile 1 to
"E:\ORACLE\ORADATA\TESTE2\SYSTEM01.DBF";
set newname for datafile 2 to
"E:\ORACLE\ORADATA\TESTE2\SYSAUX01.DBF";
set newname for datafile 3 to
"E:\ORACLE\ORADATA\TESTE2\UNDOTBS01.DBF";
set newname for datafile 4 to
"E:\ORACLE\ORADATA\TESTE2\USERS01.DBF";
set newname for datafile 5 to
"E:\ORACLE\ORADATA\TESTE2\TBS01.DBF";
set newname for datafile 6 to
"E:\ORACLE\ORADATA\TESTE2\TBS02.DBF";
set newname for datafile 7 to
"E:\ORACLE\ORADATA\TESTE2\TBS03.DBF";
backup as copy reuse
datafile 1 auxiliary format
"E:\ORACLE\ORADATA\TESTE2\SYSTEM01.DBF" datafile
2 auxiliary format
"E:\ORACLE\ORADATA\TESTE2\SYSAUX01.DBF" datafile
3 auxiliary format
"E:\ORACLE\ORADATA\TESTE2\UNDOTBS01.DBF" datafile
4 auxiliary format
"E:\ORACLE\ORADATA\TESTE2\USERS01.DBF" datafile
5 auxiliary format
"E:\ORACLE\ORADATA\TESTE2\TBS01.DBF" datafile
6 auxiliary format
"E:\ORACLE\ORADATA\TESTE2\TBS02.DBF" datafile
7 auxiliary format
"E:\ORACLE\ORADATA\TESTE2\TBS03.DBF";
sql 'alter system archive log current';
}
executando Script de Memória
executando comando: SET NEWNAME
executando comando: SET NEWNAME
executando comando: SET NEWNAME
executando comando: SET NEWNAME
executando comando: SET NEWNAME
executando comando: SET NEWNAME
executando comando: SET NEWNAME
Iniciando backup em 06/07/11
utilizando o canal ORA_DISK_1
canal ORA_DISK_1: iniciando cópia de arquivo de dados
nome=E:\ORACLE\ORADATA\BD02\SYSTEM01.DBF do arquivo de dados de entrada
nome do arquivo de saída=E:\ORACLE\ORADATA\TESTE2\SYSTEM01.DBF
canal ORA_DISK_1: cópia de arquivo de dados concluída; decorrido: 00:01:15
canal ORA_DISK_1: iniciando cópia de arquivo de dados
número do arquivo=00002 nome=E:\ORACLE\ORADATA\BD02\SYSAUX01.DBF
nome do arquivo de saída=E:\ORACLE\ORADATA\TESTE2\SYSAUX01.DBF
canal ORA_DISK_1: cópia de arquivo de dados concluída; decorrido: 00:00:55
canal ORA_DISK_1: iniciando cópia de arquivo de dados
número do arquivo=00003 nome=E:\ORACLE\ORADATA\BD02\UNDOTBS01.DBF
nome do arquivo de saída=E:\ORACLE\ORADATA\TESTE2\UNDOTBS01.DBF
canal ORA_DISK_1: cópia de arquivo de dados concluída; decorrido: 00:00:25
canal ORA_DISK_1: iniciando cópia de arquivo de dados
número do arquivo=00004 nome=E:\ORACLE\ORADATA\BD02\USERS01.DBF
nome do arquivo de saída=E:\ORACLE\ORADATA\TESTE2\USERS01.DBF
canal ORA_DISK_1: cópia de arquivo de dados concluída; decorrido: 00:00:04
canal ORA_DISK_1: iniciando cópia de arquivo de dados
número do arquivo=00005 nome=E:\ORACLE\ORADATA\BD02\TBS01.DBF
nome do arquivo de saída=E:\ORACLE\ORADATA\TESTE2\TBS01.DBF
canal ORA_DISK_1: cópia de arquivo de dados concluída; decorrido: 00:00:03
canal ORA_DISK_1: iniciando cópia de arquivo de dados
número do arquivo=00006 nome=E:\ORACLE\ORADATA\BD02\TBS02.DBF
nome do arquivo de saída=E:\ORACLE\ORADATA\TESTE2\TBS02.DBF
canal ORA_DISK_1: cópia de arquivo de dados concluída; decorrido: 00:00:03
canal ORA_DISK_1: iniciando cópia de arquivo de dados
número do arquivo=00007 nome=E:\ORACLE\ORADATA\BD02\TBS03.DBF
nome do arquivo de saída=E:\ORACLE\ORADATA\TESTE2\TBS03.DBF
canal ORA_DISK_1: cópia de arquivo de dados concluída; decorrido: 00:00:03
Finalizado backup em 06/07/11
instrução sql: alter system archive log current
conteúdo do Script de Memória:
{
backup as copy reuse
archivelog like "E:\ORACLE\FLASH_RECOVERY_AREA\BD02\ARCHIVELOG\2011_07_06\
O1_MF_1_18_707LDYHN_.ARC" auxiliary format
E:\ORACLE\FLASH_RECOVERY_AREA\TESTE2\ARCHIVELOG\2011_07_06\O1_MF_1_18_%U_.ARC;
catalog clone recovery area;
switch clone datafile all;
}
executando Script de Memória
Iniciando backup em 06/07/11
utilizando o canal ORA_DISK_1
canal ORA_DISK_1: iniciando cópia de log arquivado
thread do log arquivado de entrada=1 sequência=18 RECID=3 STAMP=754604271
nome do arquivo de saída=E:\ORACLE\FLASH_RECOVERY_AREA\TESTE2\ARCHIVELOG\
canal ORA_DISK_1: cópia de log arquivado concluída, decorrido: 00:00:01
Finalizado backup em 06/07/11
procurando todos os arquivos na área de recuperação
Lista de Arquivos Desconhecidos para o Banco de Dados
=====================================================
Nome do Arquivo: E:\ORACLE\FLASH_RECOVERY_AREA\TESTE2\ARCHIVELOG\2011_07_06\
O1_MF_1_18_ARCH_D-BD02_ID-2693065298_S-18_T-1_A-752966866_0FMFKM7G_.ARC
catalogando arquivos...
catalogação concluída
Lista de Arquivos Catalogados
=============================
Nome do Arquivo: E:\ORACLE\FLASH_RECOVERY_AREA\TESTE2\ARCHIVELOG\2011_07_06\
O1_MF_1_18_ARCH_D-BD02_ID-2693065298_S-18_T-1_A-752966866_0FMFKM7G_.ARC
arquivo de dados 1 alternado para a cópia do arquivo de dados
cópia do arquivo de dados file name=E:\ORACLE\ORADATA\TESTE2\SYSTEM01.DBF
arquivo de dados 2 alternado para a cópia do arquivo de dados
cópia do arquivo de dados file name=E:\ORACLE\ORADATA\TESTE2\SYSAUX01.DBF
arquivo de dados 3 alternado para a cópia do arquivo de dados
cópia do arquivo de dados file name=E:\ORACLE\ORADATA\TESTE2\UNDOTBS01.DBF
arquivo de dados 4 alternado para a cópia do arquivo de dados
cópia do arquivo de dados file name=E:\ORACLE\ORADATA\TESTE2\USERS01.DBF
arquivo de dados 5 alternado para a cópia do arquivo de dados
cópia do arquivo de dados file name=E:\ORACLE\ORADATA\TESTE2\TBS01.DBF
arquivo de dados 6 alternado para a cópia do arquivo de dados
cópia do arquivo de dados file name=E:\ORACLE\ORADATA\TESTE2\TBS02.DBF
arquivo de dados 7 alternado para a cópia do arquivo de dados
cópia do arquivo de dados file name=E:\ORACLE\ORADATA\TESTE2\TBS03.DBF
conteúdo do Script de Memória:
{
set until scn 226711;
recover
clone database
delete archivelog
;
}
executando Script de Memória
executando comando: SET until clause
Iniciando recover em 06/07/11
canal alocado: ORA_AUX_DISK_1
canal ORA_AUX_DISK_1: SID=21 tipo de dispositivo=DISK
iniciar recuperação de mídia
o log arquivado para thread 1 com sequência 18 já está no disco
nome do arquivo de log =E:\ORACLE\FLASH_RECOVERY_AREA\TESTE2\ARCHIVELOG\
recuperação da mídia concluída, tempo decorrido: 00:00:03
Finalizado recover em 06/07/11
conteúdo do Script de Memória:
{
shutdown clone immediate;
startup clone nomount;
sql clone "alter system set db_name =
''TESTE2'' comment=
''Reset to original value by RMAN'' scope=spfile";
sql clone "alter system reset db_unique_name scope=spfile";
shutdown clone immediate;
startup clone nomount;
}
executando Script de Memória
banco de dados desmontado
encerramento de instância Oracle
conectado ao banco de dados auxiliar (não iniciado)
instância Oracle iniciada
Total da Área Global do Sistema 322228224 bytes
Fixed Size 1374360 bytes
Variable Size 218105704 bytes
Database Buffers 96468992 bytes
Redo Buffers 6279168 bytes
instrução sql: alter system set db_name = ''TESTE2''
comment= ''Reset to original value by RMAN'' scope=spfile
instrução sql: alter system reset db_unique_name scope=spfile
encerramento de instância Oracle
conectado ao banco de dados auxiliar (não iniciado)
instância Oracle iniciada
Total da Área Global do Sistema 322228224 bytes
Fixed Size 1374360 bytes
Variable Size 218105704 bytes
Database Buffers 96468992 bytes
Redo Buffers 6279168 bytes
instrução: CREATE CONTROLFILE REUSE SET DATABASE "TESTE2" RESETLOGS ARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 292
LOGFILE
GROUP 1 ( 'E:\ORACLE\ORADATA\TESTE2\REDO01.LOG' ) SIZE 50 M REUSE,
GROUP 2 ( 'E:\ORACLE\ORADATA\TESTE2\REDO02.LOG' ) SIZE 50 M REUSE,
GROUP 3 ( 'E:\ORACLE\ORADATA\TESTE2\REDO03.LOG' ) SIZE 50 M REUSE
DATAFILE
'E:\ORACLE\ORADATA\TESTE2\SYSTEM01.DBF'
CHARACTER SET WE8MSWIN1252
conteúdo do Script de Memória:
{
set newname for tempfile 1 to
"E:\ORACLE\ORADATA\TESTE2\TEMP01.DBF";
switch clone tempfile all;
catalog clone datafilecopy "E:\ORACLE\ORADATA\TESTE2\SYSAUX01.DBF",
"E:\ORACLE\ORADATA\TESTE2\UNDOTBS01.DBF",
"E:\ORACLE\ORADATA\TESTE2\USERS01.DBF",
"E:\ORACLE\ORADATA\TESTE2\TBS01.DBF",
"E:\ORACLE\ORADATA\TESTE2\TBS02.DBF",
"E:\ORACLE\ORADATA\TESTE2\TBS03.DBF";
switch clone datafile all;
}
executando Script de Memória
executando comando: SET NEWNAME
arquivo temporário renomeado 1 para E:\ORACLE\ORADATA\TESTE2\TEMP01.DBF
cópia do arquivo de dados catalogado
nome do arquivo de cópia=E:\ORACLE\ORADATA\TESTE2\SYSAUX01.DBF
cópia do arquivo de dados catalogado
nome do arquivo de cópia=E:\ORACLE\ORADATA\TESTE2\UNDOTBS01.DBF
cópia do arquivo de dados catalogado
nome do arquivo de cópia=E:\ORACLE\ORADATA\TESTE2\USERS01.DBF
cópia do arquivo de dados catalogado
nome do arquivo de cópia=E:\ORACLE\ORADATA\TESTE2\TBS01.DBF
cópia do arquivo de dados catalogado
nome do arquivo de cópia=E:\ORACLE\ORADATA\TESTE2\TBS02.DBF
cópia do arquivo de dados catalogado
nome do arquivo de cópia=E:\ORACLE\ORADATA\TESTE2\TBS03.DBF
arquivo de dados 2 alternado para a cópia do arquivo de dados
cópia do arquivo de dados file name=E:\ORACLE\ORADATA\TESTE2\SYSAUX01.DBF
arquivo de dados 3 alternado para a cópia do arquivo de dados
cópia do arquivo de dados file name=E:\ORACLE\ORADATA\TESTE2\UNDOTBS01.DBF
arquivo de dados 4 alternado para a cópia do arquivo de dados
cópia do arquivo de dados file name=E:\ORACLE\ORADATA\TESTE2\USERS01.DBF
arquivo de dados 5 alternado para a cópia do arquivo de dados
cópia do arquivo de dados file name=E:\ORACLE\ORADATA\TESTE2\TBS01.DBF
arquivo de dados 6 alternado para a cópia do arquivo de dados
cópia do arquivo de dados file name=E:\ORACLE\ORADATA\TESTE2\TBS02.DBF
arquivo de dados 7 alternado para a cópia do arquivo de dados
cópia do arquivo de dados file name=E:\ORACLE\ORADATA\TESTE2\TBS03.DBF
conteúdo do Script de Memória:
{
Alter clone database open resetlogs;
}
executando Script de Memória
banco de dados aberto
Finalizado Duplicate Db em 06/07/11
Pronto. A clonagem foi realizada de forma online e poderemos conectar no banco de dados TESTE2 como demonstrado abaixo.
C:\>sqlplus / as sysdba
SQL*Plus: Release 11.2.0.1.0 Production on Qua Jul 6 21:47:54 2011
Copyright (c) 1982, 2010, Oracle. All rights reserved.
Conectado a:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> select open_mode,name,created from v$database;
OPEN_MODE NAME CREATED
-------------------- --------------------- ----------
READ WRITE TESTE2 06/07/2011
SQL> select file_name from dba_data_files;
FILE_NAME
------------------------------------------------
E:\ORACLE\ORADATA\TESTE2\SYSTEM01.DBF
E:\ORACLE\ORADATA\TESTE2\SYSAUX01.DBF
E:\ORACLE\ORADATA\TESTE2\UNDOTBS01.DBF
E:\ORACLE\ORADATA\TESTE2\USERS01.DBF
E:\ORACLE\ORADATA\TESTE2\TBS01.DBF
E:\ORACLE\ORADATA\TESTE2\TBS02.DBF
E:\ORACLE\ORADATA\TESTE2\TBS03.DBF
7 linhas selecionadas.
SQL> select file_name from dba_temp_files;
FILE_NAME
------------------------------------------------
E:\ORACLE\ORADATA\TESTE2\TEMP01.DBF