Para melhor visualização, recomendo resolução de no mínimo 1280 x 800 e navegador Mozilla Firefox


quarta-feira, 6 de julho de 2011

Clonando um banco de dados Oracle com o RMAN - DUPLICATE DATABASE (10g vs 11g)

Por Eduardo Legatti

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



45 comentários:

Leonardo Rezende disse...

Parabéns pelo artigo Eduardo.

Fiquei com algumas dúvidas... Esse novo recurso do 11g(clone online) pode ser feito em máquina diferentes? Hoje eu faço um DUPLICATE DATABASE em máquina diferentes, mantendo/sincronizado a mesma estrutura de diretórios do backup. O problema hoje é que eu atualizo diariamente essa cópia e restauro o banco completo. Gostaria de poder fazer isso gerando um incremental da produção para aplicar no TESTE. Alguma sugestão?

Eduardo Legatti disse...

Olá Leonardo,

O Duplicate active database pode ser utilizado para clonagem remota também. Você poderá checar a documentação oficial para maiores detalhes. Quanto ao seu problema, de forma incremental eu acho difícil. Tem que ver quao é relamente o objetivo do clone. Acredito que otruque está nos archivelogs gerados. Você teria que pensar em algo como o CLONE ser um STANDBY (em alguma parte do dia/ da noite) para ir aplicandos os archive que viria do PRIMÁRIO. É algo a se pensar... ;-) Boa sorte!

Abraços e até mais ...

Unknown disse...

Olá Eduardo, como vai? Tenho aprendido várias coisas no blog. A forma como escreve é muito clara. Parabéns! Gostaria de aproveitar para tirar uma dúvida de uma situação muito estranha que aconteceu no mês passado. O usuário executou vários deletes e updates em uma tela de uma aplicação em Delphi (16 operações ao todo). Depois entrou numa outra tela e imprimiu o relatório correspondente, ou seja, as operações tinham sido salvas no banco. Mas, um tempo depois foi consultá-las e elas haviam sumido.
Bom, pesquisamos pelo logminer e vimos que as 16 operações apareciam numa mesma transação (mesmo XID) e, ao final da décima sexta, foram todas desfeitas (rollback=1). Mas o usuário havia impresso o relatório, o que confirma que as operações foram salvas. Você já viu algo semelhante? Tem dois pontos nessa situação que me intrigam: Primeiro, que o commit foi feito pelo Delphi e segundo que cada operação deveria ser uma transação, pois na tela do delphi é executado um post(save) a cada operação. Não consigo entender por que no logminer consta como se as 16 operações fossem de uma única transação e muito menos por que foi feito esse rollback e as transações foram perdidas. Se souber me dar uma dica, agradeço. Abraços, Loraine

Eduardo Legatti disse...

Olá Loraine,

Tudo bem que a sua dúvida não tem nada a ver com o post em questão ;-) Bom, pelo que me lembro, um simples TDataset.post não era suficiente para comitar uma transação, a não ser que a aplicação fosse fechada. Por isso não tenha tanta certeza de que realmente um commit foi feito. Na época utilizava muito o artifício de "cache update" dos componentes TQuery/TTable e após abrir uma transação com o TDatabase.StartTransaction, chamava os métodos applyUpdates e commitUpdates e ao final TDatabase.commit. Lembre-se que TDataset.post não significa commit a não ser que você explicitamente chame o método TDatabase.commit. Uma coisa é certa, o relatório funcionou porque a transação e os dados estavam visíveis na sessão corrente. Já o que levou a acontecer o Rollback da transação eu não sei. A aplicação deu algum crash?? Teria que ter sido feito um teste abrindo a aplicação em uma outra estação e tirar o relatório de lá, aí teríamos certeza de que a transação foi comitada. O Logminer mostrou que a transação não foi comitada e isto é fato. Algum dia você faz o teste. Abra a aplicação, salve os dados, e depois desligue a máquina (a quente mesmo) sem sair da aplicação. Depois verifique se os dados realmente foram gravados no banco. No mais, deve-se avaliar a lógica da aplicação na questão de abertura e fechamento das transações para ver se realmente está tudo Ok. Outra coisa é, quem garante que os dados não foram apagados após a impressão do relatório?

Abraços e até mais ...

Unknown disse...

Olá Eduardo, obrigada pela sua resposta e desculpa eu ter entrado com esse assunto que nada tinha a ver com o seu post, mas é que não encontrei um post sobre o logminer. Bom, isso que você disse só reforça a nossa resposta de que a transação não foi comitada no Banco de Dados. estava com medo que pudesse ser algum bug do Oracle, mas pelo visto o pessoal está pensando que comitou as transações no Banco e isso não está sendo feito. Muito obrigada. Att.

Eduardo Legatti disse...

Olá Loraine,

Foi um prazer ajudá-la ;-)

Abraços e até mais ...

Rodrigo Santana disse...

Olá Eduardo, tudo bem?
Parabéns pelo artigo, realmente essa nova feature do 11g é muito interessante, legal a abordagem. :)
Um abraço!

Felipe disse...

Valeu Eduardo, me ajudou de mais este post.

Unknown disse...

O duplicate de forma ativa, causa algum impacto no banco de origem (banco que está sendo clonado)?

Eduardo Legatti disse...

Olá Everaldo,

O único impacto que vejo está relacionado ao processo de cópia/envio dos datafiles para o banco clone. Se o banco de dados clone estiver em uma máquina remota, então haverá um consumo maior de banda de rede no momento da cópia.

Obrigado pela visita e até mais...

Legatti

Anônimo disse...

Legatti, parabéns pelo artigo!! Excelente. Ficou uma dúvida. O banco de dados clone ficará exatamente igual ao banco de dados de origem?

Obrigado

Marcelo

Eduardo Legatti disse...

Olá Marcelo,

Ótima pergunta. O RMAN duplicate nada mais faz do que um "incomplete recovery", ou seja, os arquivos de redo log online não são copiados como parte do processo de clonagem. Segundo a documentação, o archive log mais recente será aplicado no banco clone.

Abraços e até mais...

Legatti

Unknown disse...

Mais uma dúvida, há muita diferença de duplicar um banco rac com asm para single files system? versao 11.1.0.7

Eduardo Legatti disse...

Olá Everaldo,

Os passos são semelhantes. Os parâmetros db_file_name_convert e log_file_name_convert deverão ser utilizados para indicar a localização de destino dos data files, redo log files do banco clone (seja ele ASM ou file system). Ao criar o arquivo de inicialização da instância auxiliar, lembrar de comentar ou retirar os parâmetros relacionados à instância RAC.

Caso você tenha acesso ao My Oracle Support (Metalink), existem alguns artigos relacionados a esse tema. Notes 382669.1 e 840647.1

Abraços

Legatti

Anônimo disse...

Eduardo, boa tarde tudo bem?

Seu blog tem me ajudado muito, tenho aprendido muito com ele, parabens.
Tentei simular esse artigo para teste em um banco 10g, até o momento do duplicate target database to teste foi blz, porém ao executar esse comando deu o erro abaixo para todos os datafiles:

[oracle@vm]~/oradata> rman target sys/*****@orcl auxiliary /

connected to target database: ORCL (DBID=1347688869)
connected to auxiliary database: TESTE (not mounted)

RMAN-05001: auxiliary filename /u01/app/oracle/oradata/orcl/example01.dbf conflicts with a file used by the target database

O que devo ter feito de errado?

Obrigado.

Abraços!

Renan

Eduardo Legatti disse...

Olá Renan,

Verifique se você setou corretamente os parâmetros db_file_name_convert e log_file_name_convert. Bom, dependendo de algumas tentativas mal sucedidas, a instância auxiliar pode ter continuado em uso. Ao realizar os procedimentos, certifique-se de não deixar vestígios da tentativa mal sucedida realizada anteriormente.

Abraços

Legatti

Anônimo disse...

Legatti,

Grato pelo retorno, limpei tudo que ele criou na pasta admin/ do banco teste, abaixo segue meu arquivo de parametro, ja vi, revi e não consegui identificar onde esta a falha.

orcl.__db_cache_size=427819008
orcl.__java_pool_size=4194304
orcl.__large_pool_size=4194304
orcl.__shared_pool_size=167772160
orcl.__streams_pool_size=0
*.audit_file_dest='/u01/app/oracle/admin/teste/adump'
*.background_dump_dest='/u01/app/oracle/admin/teste/bdump'
*.compatible='10.2.0.1.0'
*.control_files='/u01/app/oracle/oradata/teste/control01.ctl','/u01/app/oracle/oradata/teste/control02.ctl','/u01/app/oracle/oradata/teste/control03.ctl'
*.core_dump_dest='/u01/app/oracle/admin/teste/cdump'
*.db_block_size=8192
*.db_domain=''
*.db_file_multiblock_read_count=16
*.db_name='teste'
*.db_recovery_file_dest='/u01/app/oracle/flash_recovery_area'
*.db_recovery_file_dest_size=2147483648
*.dispatchers='(PROTOCOL=TCP) (SERVICE=orclXDB)'
*.job_queue_processes=10
*.log_archive_dest_1='location=/u01/app/oracle/flash_recovery_area/ORCL'
*.open_cursors=300
*.pga_aggregate_target=201326592
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.sga_target=605028352
*.undo_management='AUTO'
*.undo_tablespace='UNDOTBS1'
*.user_dump_dest='/u01/app/oracle/admin/teste/udump'
*.db_file_name_convert =('\oradata\orcl\','\oradata\teste\')
*.log_file_name_convert =('\oradata\orcl\','\oradata\teste\')


Grato

Renan

Eduardo Legatti disse...

Olá Renan,

Você está usando o Linux, certo? Faça a alteração:

de

*.db_file_name_convert =('\oradata\orcl\','\oradata\teste\')
*.log_file_name_convert =('\oradata\orcl\','\oradata\teste\')

para

*.db_file_name_convert =('/oradata/orcl/','/oradata/teste/')
*.log_file_name_convert =('/oradata/orcl/','/oradata/teste/')


e faça o teste novamente ;-)

Abraços

Legatti

Unknown disse...

renan utilize o set newname.

run {
set newname for tempfile 1 to '/oradata/clone/temp01.dbf';
set newname for tempfile 2 to '/oradata/clone/temp02.dbf';
set newname for tempfile 3 to '/oradata/clone/temp03.dbf';
set newname for tempfile 4 to '/oradata/clone/temp04.dbf';
set newname for tempfile 5 to '/oradata/clone/temp05.dbf';
set newname for tempfile 6 to '/oradata/clone/temp06.dbf';
set newname for tempfile 7 to '/oradata/clone/temp07.dbf';
duplicate target database to clone;
}

Eduardo Legatti disse...

Olá Everaldo,

A idéia que o DUPLICATE faça isso pra nós ;-)

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
;
}


Abraços e até mais ...

Legatti

Unknown disse...

Pois eh Legatti, até eu receber esse erro. tava usando a 11.1.7 , coloquei este comando e ta rolando até agora e lá se vão 5 horas, pelo menos passou deste erro. abraço.

Anônimo disse...

Legatti,

Estou usando linux sim, putz que vacilo meu, copiei do seu artigo e esqueci de alterar a /, aff.
Isso porque li e reli umas 4x o arquivo de parametro.

Obrigado pela ajuda e desculpa pela falha.

Everaldo,

Obrigado pela ajuda, funcionou alterando as \ para /.

Renan

Eduardo Legatti disse...

Olá Everaldo,

Se você está clonando o banco em outro servidor e quer manter a mesma estrutura, você tem que usar a cláusula NOFILENAMECHECK.

Veja a documentação do DUPLICATE:

"If you want the duplicate filenames to be the same as the target filenames, and if the databases are in different hosts, then you must specify NOFILENAMECHECK."

Abraços e até mais

Legatti

Anônimo disse...

Legatti,

Caso meu banco de origem esteja em modo NOARCHIVELOG não consigo fazer o DUPLICATE DATABASE com ele OPEN? Terei que deixar em MOUNT?

Grato

Renan

Unknown disse...

Obrigado.

abraço

Eduardo Legatti disse...

Olá Renan,

No caso do banco de dados estar operando no modo NOARCHIVELOG, para o duplicate (ACTIVE 11g) funcionar, o mesmo precisa estar no mínimo em MOUNT. Se não for usar a opção ACTIVE do 11g, então se não me engano, tanto faz.

Abraços

Legatti

Anônimo disse...

Legatti, fiz alguns clonagens, mas porem alguns funcionam , outros nao. os q nao funcionam, me retornam o erro: ORA-01547: advertência: RECOVER obteve êxito mas OPEN RESETLOGS obteria erro abaixo
ORA-01194: o arquivo 1 necessita de mais recuperação para ser consistente
ORA-01110: 1 do arquivo de dados: '/oradata/orcl/system.213.87171'. e tb o erro
RMAN-06560: ADVERTÊNCIA: o conjunto de backup com a chave 4870 será lido 2 vezes
RMAN-06560: ADVERTÊNCIA: o conjunto de backup com a chave 4869 será lido 2 vezes
RMAN-06560: ADVERTÊNCIA: o conjunto de backup com a chave 4868 será lido 2 vezes
RMAN-06560: ADVERTÊNCIA: o conjunto de backup com a chave 4867 será lido 2 vezes
RMAN-06560: ADVERTÊNCIA: o conjunto de backup com a chave 4872 será lido 2 vezes. porém ha espaço em disco e utilizo o duplicate usando backup ful do banco de dados feito pelo rman, sem especificar uma hora para que ele abra o banco de dados.

poderia ajudar?

Eduardo Legatti disse...

Olá Anônimo,

Os backup estão válidos? Já tentou fazer um novo backup antes de realizar o DUPLICATE? O erro é RMAN-06560 é muito genérico.

Cause: This message should be followed by one or more 6562 messages.
Action: Check the accompanying messages.
Please add more information about this Error

Portanto, tente analisar as mensagens com atenção e tente verificar o que possa estar acontecendo.

Abraços

Legatti

Anônimo disse...

qual a diferença de usar o duplicate conectando no banco target, no catalogo e depois na auxiliar ao invés do catálogo? ao
invés de conectar somente no target e auxiliar?
ex: rman TARGET sys/password@orcl CATALOG rman/password@catalogo AUXILIARY /
duplicate target database to xxxx;
para
rman TARGET password@orcl AUXILIARY /
duplicate target database to xxxx;

Eduardo Legatti disse...

Olá Anônimo,

O CATALOG é opcional. Se estiver conectando apenas no banco TARGET, as informações de backup e meta dados virão apenas do control file. Se conectado nos dois (TARGET e CATALOG) então as informações poderão vir de um ou de outro.

Abraços

Legatti

Anônimo disse...

Legatti, recebo um erro no duplicate q sempre fala pra aumentar o maxsize no duplicate. onde fica esse maxsize e como alterá-lo. tem um exempplo? o erro é este RMAN-06560, RMAN-06561.

obrigado.

Eduardo Legatti disse...

Olá Anônimo,

Esse erro é muito estranho para o duplicate:

RMAN-06561 - available space must be larger than number kb

Cause
The recovery failed because it requires more disk space. One of the following could have caused this error:
1) The MAXSIZE option is used but is not large enough to restore files.
2) Files should be restored to recovery area, but available disk space is not large enough to restore files.

Action
One of the following:
1) Increase the MAXSIZE parameter and retry the command.
2) Free up disk space in the recovery area.

Bom, você não está usando em nenhum momento a cláusula MAXSIZE, que pode ser utilizado no comando "recover database", então não há como aumentar o valor desse parâmetro, já que o mesmo não é usado. Acredito que você possa estar tendo algum problema em relação a Flash Recovery Area na instância auxiliar. Faça alguns testes como aumentar o valor do parâmetro db_recovery_file_dest_size no init.ora da instância auxiliar. Um outro teste seria remover completamente do init.ora da instância auxiliar os parâmetros db_recovery_file_dest e db_recovery_file_dest_size.

Abraços e até mais

Legatti

Jose Augusto Germano disse...

Boa tarde Eduardo...

Tenho uma dúvida que está 'martelando' e queria sua ajuda quanto a isso.
Cenário: Tenho uma base BD01 em um servidor Windows Server 2003 com Oracle 10g. Quero atualizar tanto o BD01 quanto o SO (Oracle 11g e Windows Server 2008 R2). Primeiramente, é criado um server paralelo, com SO e BD atualizado(BD02). Qual o melhor procedimento para transportar os dados do BD01(antigo) para o BD02(atualizado). Via impdp/expdp ou RMAN? Visto que a base tem um tamanho de 20GB. Se pelo RMAN, seria backup as copy, clone database? Tenho muita dúvida quanto a isso.

Muito obrigado desde ja pela ajuda. Tiro muitas dúvidas através do seu BLOG. Textos bem explicados, boa didática. Parabéns.

Eduardo Legatti disse...

Olá José Augusto,

Para o seu cenário eu recomendo utilizar a técnica de exportação/importação através do expdp/impdp mesmo. É mais tranquilo e seguro. O banco de dados não é tão grande assim (20 GB) para que seja necessário usar uma outra técnica. Caso a base de dados fosse realmente maior, aí sim, poderia utilizar o DUPLICATE do RMAN para então fazer o upgrade do banco de dados no novo servidor.

Obrigado e atém mais...

Legatti

Bruno Costa disse...

Boa tarde Eduardo belo post parabéns..
Tenho uma difícil missão pela frente e queria saber se já passou por essa situação. Vou migrar uma base da versão 10.2.0.5 para 11r2 e queria aproveitar esse momento para migrar de file system para ASM. Sabe me falar se consigo clonar uma base que roda em file system para uma outra máquina + instância ASM ? Imagino que depois a migração de versão deve ser padrão que já fiz algumas vezes (DBUA). Minha intenção é montar uma estrutura paralela (com os mesmos recursos de hardware) para poder fazer testes de performance e só então, decidir por usar ou não ASM já que não sou obrigado pois minha base não está em RAC. Vale ressaltar que a única forma de migrar minha base é com o RMAN pois, com expdp o tempo de export/import tona a atividade inviável.

Att,
Bruno

Eduardo Legatti disse...

Olá Bruno,

Ainda não fiz este tipo de procedimento. (Non-ASM to ASM) via DUPLICATE. Mas acredito que seja possível sim. Você faz o upgrade para o 11g e depois faz o DUPLICATE na qual a instância auxiliar já vai estar preparada para com o ASM, etc.

Pesquise no Google o texto abaixo que você vai achar alguns links de pessoas que já passaram por isso.

"RMAN: how to duplicate a non-ASM active database to an ASM database"

Abraços e até mais

Legatti

Anônimo disse...

Boa tarde,
Eduardo.

Excelente post, muito bacana.
Cara estou em um cenário que preciso fazer um duplicate e estou com algumas duvidas.
Seguindo seu post, tenho um database chamado ctginst1 (origem) e um database chamado TESTE1 (destino).
Quando eu carrego as variaveis de ambiente do TESTE1 e digito (rman target sys/senha@ctginst1 auxiliary /) me retorna as seguintes mensagens de erro:
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-00554: initialization of internal recovery manager package failed
RMAN-04005: error from target database:
ORA-01017: invalid username/password; logon denied
[oracle@cciora12:TESTE1 ~]$

Erro de senha não é porque quando somente me conecto sem o @ctginst1 auxiliary / consigo perfeitamente me conectar.
A minha duvida é se preciso criar o catalogo para o banco TESTE1 e dar os privilégios pertinentes ou em que passo estou errando, porque se faço o processo inverso ou seja clonar o banco TESTE1 para o banco CTGINST1 ele se conecta perfeitamente.
Agradeço pela ajuda.


Atenciosamente,

Sandro

Eduardo Legatti disse...

Olá Sandro,

Certifique-se de que a senha do usuário SYS que você está digitando está correta, ou seja, se é a mesma que está gravada no arquivo de senhas. Existe uma diferença em conectar usando um serviço TNS e conectar localmente através da autenticação do sistema operacional (OS authentication). Localmente, a conexão é feita usando autenticação do sistema operacional, ou seja, qualquer senha que você colocar vai conectar. Usando um serviço TNS, a senha tem que se a correta. Exemplos:

[oracle@linux1 dbs]$ orapwd file=orapwBD01 password=senhacerta entries=10 force=y

Conectando localmente via OS Authentication

[oracle@linux1 dbs]$ export ORACLE_SID=BD01
[oracle@linux1 dbs]$ sqlplus / as sysdba

Conectado a:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - Production
With the Partitioning option

conectou!!!

[oracle@linux1 dbs]$ sqlplus sys/senhaerrada as sysdba

Conectado a:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - Production
With the Partitioning option

conectou!!!

[oracle@linux1 dbs]$ rman target /

Gerenciador de Recuperaão: Release 11.2.0.3.0 - Production on Sex Jul 3 22:22:00 2015
Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.
conectado ao banco de dados de destino: BD01 (DBID=3071087724)

conectou!!!

[oracle@linux1 dbs]$ rman target sys/senhaerrada

Gerenciador de Recuperaão: Release 11.2.0.3.0 - Production on Sex Jul 3 22:22:30 2015
Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.
conectado ao banco de dados de destino: BD01 (DBID=3071087724)

conectou!!!


Conectando via serviço TNS

[oracle@linux1 dbs]$ cat /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/tnsnames.ora
LINUX1 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = linux1)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = BD01)
)
)


[oracle@linux1 dbs]$ sqlplus sys/senhacerta@linux1 as sysdba

Conectado a:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - Production
With the Partitioning option

connectou!!!

[oracle@linux1 dbs]$ sqlplus sys/senhaerrada@linux1 as sysdba

SQL*Plus: Release 11.2.0.3.0 Production on Sex Jul 3 22:27:25 2015

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

ERROR:
ORA-01017: senha/nome do usurio invlido; log-on negado



[oracle@linux1 dbs]$ sqlplus sys/senhacerta@linux1 as sysdba

Conectado a:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - Production
With the Partitioning option

conectou!!!

[oracle@linux1 dbs]$ rman target sys/senhacerta@linux1

Gerenciador de Recuperaão: Release 11.2.0.3.0 - Production on Sex Jul 3 22:27:50 2015
Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.
conectado ao banco de dados de destino: BD01 (DBID=3071087724)

conectou!!!

[oracle@linux1 dbs]$ rman target sys/senhaerrada@linux1

Gerenciador de Recuperaão: Release 11.2.0.3.0 - Production on Sex Jul 3 22:28:12 2015

Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.

RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-00554: inicializaão do pacote do recovery manager interno falhou
RMAN-04005: erro no banco de dados de destino:
ORA-01017: senha/nome do usurio invlido; log-on negado



Abraços,

Legatti

Unknown disse...

bom dia Eduardo.

primeiramente gostaria de parabenizar o excelente trabalho realizado.
o conhecimento só é valido quando é compartilhado.

preciso aqui de uma ajudinha.

fiz o processo de duplicate database para um servidor remoto, após o tremino do processo notei
que o controlfile do servidor remoto estava com o DBNAME do "target" BDPRD, no caso, minha base de produção.
entao gerei um arquivo txt do controlfile atraves do comando "alter database backup controlfile to trace"
e fiz as alterações substituindo o dbname BDPRD para DBCLONE, instancia do servidor remoto.
obs:
durante o duplicate foram transferidos os datafiles para o servidor remoto mas
nao os arquivos de log.

após a criaçao do novo controlfile o banco pode ser montado, porém ao tentar abrir o banco recebo o erro abaixo.

SQL> ALTER DATABASE OPEN RESETLOGS;
ALTER DATABASE OPEN RESETLOGS
*
ERROR at line 1:
ORA-01152: file 1 was not restored from a sufficiently old backup
ORA-01110: data file 1:
'E:\ORADATA\DBCLONE\DATAFILE\O1_MF_SYSTEM_BTFRZO9Z_.DBF'

acha que é possivel conseguir abrir o banco ou sera preciso realizar todo processo novamente desde o inicio.

desde ja agradeço.

Um abraço!

Eduardo Legatti disse...

Olá Anderson,
Acho melhor você fazer o duplicate de novo. Se por algum motivo você precisar renomear o banco de dados, use o utilitário DBNEWID.

http://eduardolegatti.blogspot.com.br/2010/12/dbnewid-alterando-o-nome-de-um-banco-de.html?m=1

Abraços,

Legatti

Guilherme disse...

ótima explicação parabéns!!!

Porém fiquei com um pequeno problema... Perdi alguns archives iniciais da base e ao realizar o duplicate não consigo abrir a base, pois retorna erro do ORA-1152: file 2 was not restored from a sufficiently old backup. Como devo proceder? Gerai mais archivelogs da base e realizei o duplicate novamente, porém o erro persiste...

Obrigado e parabéns novamente!!!
Excelente blog!!!

Eduardo Legatti disse...

Olá Guilherme,

Como assim, perdeu archives? O Oracle é 11g? Você está fazendo o duplicate usando um backup ou usando o método ACTIVE DATABASE? Quais erros estão acontecendo exatamente e em qual estapa do duplicate?

Se você está usando o método de utilizar um backup recente, verifique se você incluiu archivelogs neste backup. ex: RMAN> backup full database plus archivelog

O ideal é o duplicate finalizar com sucesso sem nenhum problema, agora se o erro persiste, você vai ter que quebrar a cabeça para ver o que está acontecendo.

Já tentou aplicar os archivelogs faltantes na mão conforme exemplo abaixo? É uma tentativa, mas o ideal é você tentar fazer com que o Duplicate finalize com sucesso sem nenhuma intervenção manual ;-)

SQL> connect / as sysdba;
SQL> recover database until cancel using backup controlfile;
.. Informe o caminho dos archivelogs
.. Depois de aplicar, digiete "cancel"
SQL> alter database open resetlogs;


Abraços,

Legatti

Guilherme disse...

Olá Eduardo,
O Oracle é 11g r2. Estou testando com active database. O Erro acontece ao final do processo de duplicate (ORA-1152: file 2 was not restored from a sufficiently old backup) juntamente com o erro ORA-01110 (indicando o datafile com "problema"). Como é uma base de teste, acabei excluindo alguns archives por não achar necessários e verifiquei que com isso acabou gerando esse erro ao realizar o procedimento de duplciate...

Para realizar o duplicate com active database é necessário ter todos archives da base?
Para solucionar o meu problema você tem alguma dica? Gerei mais archives para tentar solucionar o problema, realizei o duplicate novamente, mas não adiantou, acredito que ficar gerando archives não irá solucionar...

Obrigado!
Abs

Eduardo Legatti disse...

Olá Guilherme,

Deve ser alguma configuração no seu ambiente. O seu banco está configurado para usar a FLASH RECOVERY AREA. Se não, acho bom configurá-la? O destino do banco clone tem a mesma estrutura do banco de origem? Se não, você usou corretamente os parâmetros *.db_file_name_convert e *.log_file_name_convert? A barra (\) Windows é diferente de Linux/Unix (/). Se for possível, tente fazer o clone colocando o banco de dados de origem no estado MOUNT para ver se acontece o mesmo erro. Se acontecer o mesmo erro, veja se você consegue realizar o duplicate sem utilizar a opção ACTIVE. Faça um backup FULL e siga os passos.

Lembre-se de que dependendo de algumas tentativas mal sucedidas, a instância auxiliar pode ainda ter ficado em uso. Ao realizar os procedimentos novamente, certifique-se de não ter deixado vestígios da tentativa mal sucedida realizada anteriormente.

Abraços,

Legatti

Floro Luiz disse...

Excelente conteúdo do do post, gostaria apenas de adicionar duas informações que só consegui usar com active database:

1 - Utilizei mesma senha para o target e para o auxiliary
2 - o ini dos dois estavam sem a configuração *.db_recovery_file_dest e
*.db_recovery_file_dest_size, tem que estar configurado pelo menos no auxiliary

Grande abraço e parabéns.

Postagens populares