top of page

ORACLE: Duplicate com RMAN

Dúvida: Como fazer um clone da base de produção para ser usado como TESTE/HOMOLOGAÇÃO à partir de um backup feito com RMAN ?

Resposta: Usando o comando DUPLICATE!


É fácil. Primeiro algumas observações:

* No exemplo que estou usando o ASM está configurado corretamente;

* Estou fazendo o DUPLICATE no mesmo servidor onde está a base de PRODUÇÃO. Isso exige alguns cuidados portanto, tome as devidas precauções;

* Embora o exemplo esteja em 10g, o mesmo funciona perfeitamente na versão 11g.


Segue o passo-a-passo:


1) Verifique se tem espaço disponível nos discos que vão receber o duplicate. No caso, abaixo, como faremos com ASM temos que verificar se o ASM possui espaço.

SQL> select name, total_mb, free_mb from v$asm_diskgroup

NAME                             TOTAL_MB    FREE_MB
------------------------------ ---------- ----------
DATA                               409596     253422
FLASH                              204798     169219

SQL>

2) Verifique se o backup à ser usado está disponível. No caso usei o mesmo do post anterior (Oracle: Backup Básico com RMAN) apenas verificando se o rman.log foi gerado com sucesso, sem erros.


3) A minha base de produção é a OR1, vou criar a base OR2. Para isso, tenho que executar alguns pré-requisitos, como definir o ORACLE_SID, criar um orapw e criar um init.ora:

[oracle@blade01 bin]$ cd $ORACLE_HOME/dbs
[oracle@blade01 dbs]$ orapwd file=orapwor2 password=teste
[oracle@blade01 dbs]$ cp initor1.ora initor2.ora
[oracle@blade01 dbs]$ export ORACLE_SID=or2

4) Criar os diretórios dos *_dump_dest:

[oracle@blade01 admin]$ cd /opt/app/oracle/admin/
[oracle@blade01 admin]$ mkdir or2
[oracle@blade01 admin]$ cd or2
[oracle@blade01 admin]$ mkdir bdump
[oracle@blade01 admin]$ mkdir cdump
[oracle@blade01 admin]$ mkdir udump
[oracle@blade01 admin]$ mkdir adump

5) Editar o arquivo initor2.ora alterando os seguintes parametros:

[oracle@blade01 admin]$ cd $ORACLE_HOME/dbs
[oracle@blade01 dbs]$ vi initor2.ora
[oracle@blade01 dbs]$ more initor2.ora
*.audit_file_dest='/opt/app/oracle/admin/or2/adump'
*.background_dump_dest='/opt/app/oracle/admin/or2/bdump'
*.control_files='+DATA','+FLASH'
*.core_dump_dest='/opt/app/oracle/admin/or2/cdump'
*.db_create_file_dest='+DATA'
*.db_create_online_log_dest_1='+DATA'
*.db_create_online_log_dest_2='+FLASH'
*.db_name='or2'
*.log_archive_format='archive_or2_%t_%s_%r.arc'
*.pga_aggregate_target=200m
*.processes=100
*.sessions=135
*.sga_max_size=1000m
*.sga_target=1000m
*.user_dump_dest='/opt/app/oracle/admin/or2/udump'
*.db_file_name_convert='+DATA/or1','+DATA/or2', '+FLASH/or1','+FLASH/or2'
*.log_file_name_convert='+DATA/or1','+DATA/or2', '+FLASH/or1','+FLASH/or2'
[oracle@blade01 dbs]$

Troquei basicamente os caminhos, reduzi o número de processos e uso de memória em relação à produção. OBS: é importante que tenha memória disponível no servidor onde vá subir esta instance. Os outros parametros que a base de produção tinha eu mantive.


6) Subo a base com o init e crio um spfile (será mais útil na hora do duplicate):

[oracle@blade01 dbs]$ export ORACLE_SID=or2
[oracle@blade01 dbs]$ sqlplus /nolog

SQL*Plus: Release 10.2.0.5.0 - Production on Mon Nov 21 12:43:10 2011

Copyright (c) 1982, 2010, Oracle.  All Rights Reserved.

SQL> connect sys as sysdba
Enter password:
Connected to an idle instance.
SQL> startup nomount
ORACLE instance started.

Total System Global Area 1577058304 bytes
Fixed Size                  2096600 bytes
Variable Size             385876520 bytes
Database Buffers         1174405120 bytes
Redo Buffers               14680064 bytes

SQL> create spfile from pfile = '$ORACLE_HOME/dbs/initor2.ora';

SQL> shutdown immediate;
ORA-01507: database not mounted

ORACLE instance shut down.
SQL> Startup nomount; ORACLE instance started.

Total System Global Area 1577058304 bytes
Fixed Size                  2096600 bytes
Variable Size             385876520 bytes
Database Buffers         1174405120 bytes
Redo Buffers               14680064 bytes
SQL>

7) Após a base estar em nomount, basta conectar no rman e executar o duplicate:

[oracle@blade01 bin]$ rman

Recovery Manager: Release 10.2.0.5.0 - Production on Mon Nov 21 15:52:41 2011

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

RMAN> connect target sys/teste@or1

connected to target database: OR1 (DBID=2981456125)

RMAN> connect auxiliary /

connected to auxiliary database: OR2 (not mounted)

RMAN> duplicate target database to or2;

Starting Duplicate Db at 21-NOV-11
using target database control file instead of recovery catalog
allocated channel: ORA_AUX_DISK_1
channel ORA_AUX_DISK_1: sid=110 devtype=DISK

contents of Memory Script:
{
   set until scn  1035586100;
   set newname for datafile  1 to
 "+data";
   set newname for datafile  2 to
 "+data";
   set newname for datafile  3 to
 "+data";
   set newname for datafile  4 to
 "+data";
   set newname for datafile  5 to
 "+data";
   set newname for datafile  6 to
 "+data";
   set newname for datafile  7 to
 "+data";
   set newname for datafile  8 to
 "+data";
   set newname for datafile  9 to
 "+data";
   set newname for datafile  10 to
 "+data";
   set newname for datafile  11 to
 "+data";
   set newname for datafile  12 to
 "+data";
   set newname for datafile  13 to
 "+data";
   set newname for datafile  14 to
 "+data";
   set newname for datafile  15 to
 "+data";
   set newname for datafile  16 to
 "+data";
   set newname for datafile  17 to
 "+data";
   set newname for datafile  18 to
 "+data";
   set newname for datafile  19 to
 "+data";
   set newname for datafile  20 to
 "+data";
   set newname for datafile  21 to
 "+data";
   set newname for datafile  22 to
 "+data";
   set newname for datafile  23 to
 "+flash";
   set newname for datafile  24 to
 "+flash";
   set newname for datafile  25 to
 "+flash";
   set newname for datafile  26 to
 "+flash";
   set newname for datafile  27 to
 "+flash";
   set newname for datafile  28 to
 "+data";
   set newname for datafile  29 to
 "+data";
   set newname for datafile  30 to
 "+data";
   set newname for datafile  31 to
 "+data";
   restore
   check readonly
   clone database
   ;
}
executing Memory Script

executing command: SET until clause

executing command: SET NEWNAME

(...)

Starting restore at 21-NOV-11
using channel ORA_AUX_DISK_1

channel ORA_AUX_DISK_1: starting datafile backupset restore
channel ORA_AUX_DISK_1: specifying datafile(s) to restore from backup set
restoring datafile 00011 to +DATA
restoring datafile 00019 to +DATA
restoring datafile 00023 to +FLASH
channel ORA_AUX_DISK_1: reading from backup piece /u02/app/oracle/backup/BkpSFT_DBF_4dms64nl_1_1.bak

(...)

Finished restore at 21-NOV-11
sql statement: CREATE CONTROLFILE REUSE SET DATABASE "OR2" RESETLOGS ARCHIVELOG
  MAXLOGFILES     16
  MAXLOGMEMBERS      3
  MAXDATAFILES      100
  MAXINSTANCES     8
  MAXLOGHISTORY     9344
 LOGFILE
  GROUP  1 ( '+DATA/or2/onlinelog/group_1.287.763827225' ) SIZE 500 M  REUSE,
  GROUP  2 ( '+DATA/or2/onlinelog/group_2.286.763827471' ) SIZE 500 M  REUSE,
  GROUP  3 ( '+DATA/or2/onlinelog/group_3.285.763827783' ) SIZE 500 M  REUSE,
  GROUP  4 ( '+DATA/or2/onlinelog/group_4.315.755630871' ) SIZE 500 M  REUSE,
  GROUP  5 ( '+DATA/or2/onlinelog/group_5.316.755630887' ) SIZE 500 M  REUSE,
  GROUP  6 ( '+DATA/or2/onlinelog/group_6.317.755630903' ) SIZE 500 M  REUSE,
  GROUP  7 ( '+DATA/or2/onlinelog/group_7.318.755630917' ) SIZE 500 M  REUSE,
  GROUP  8 ( '+DATA/or2/onlinelog/group_8.319.755630931' ) SIZE 500 M  REUSE,
  GROUP  9 ( '+DATA/or2/onlinelog/group_9.311.763828061' ) SIZE 500 M  REUSE,
  GROUP 10 ( '+DATA/or2/onlinelog/group_10.292.763828343' ) SIZE 500 M  REUSE
 DATAFILE
  '+DATA/or2/datafile/system.297.767809119'
 CHARACTER SET WE8ISO8859P1


contents of Memory Script:
{
   switch clone datafile all;
}
executing Memory Script

datafile 2 switched to datafile copy
input datafile copy recid=1 stamp=767813611 filename=+DATA/or2/datafile/undotbs1.307.767810635
(...)

contents of Memory Script:
{
   set until scn  1035586100;
   recover
   clone database
    delete archivelog
   ;
}
executing Memory Script

executing command: SET until clause

Starting recover at 21-NOV-11
using channel ORA_AUX_DISK_1

starting media recovery

archive log thread 1 sequence 29792 is already on disk as file /u01/app/oracle/FLASH_RECOVERY_AREA/OR1/archivelog/2011_11_21/o1_mf_1_29792_7dmnwkmt_.arc
(...)
media recovery complete, elapsed time: 00:09:14
Finished recover at 21-NOV-11

contents of Memory Script:
{
   shutdown clone;
   startup clone nomount ;
}
executing Memory Script

database dismounted
Oracle instance shut down

connected to auxiliary database (not started)
Oracle instance started

Total System Global Area    1577058304 bytes

Fixed Size                     2096600 bytes
Variable Size                385876520 bytes
Database Buffers            1174405120 bytes
Redo Buffers                  14680064 bytes
sql statement: CREATE CONTROLFILE REUSE SET DATABASE "OR2" RESETLOGS ARCHIVELOG
  MAXLOGFILES     16
  MAXLOGMEMBERS      3
  MAXDATAFILES      100
  MAXINSTANCES     8
  MAXLOGHISTORY     9344
 LOGFILE
  GROUP  1 ( '+DATA/or2/onlinelog/group_1.287.763827225' ) SIZE 500 M  REUSE,
  GROUP  2 ( '+DATA/or2/onlinelog/group_2.286.763827471' ) SIZE 500 M  REUSE,
  GROUP  3 ( '+DATA/or2/onlinelog/group_3.285.763827783' ) SIZE 500 M  REUSE,
  GROUP  4 ( '+DATA/or2/onlinelog/group_4.315.755630871' ) SIZE 500 M  REUSE,
  GROUP  5 ( '+DATA/or2/onlinelog/group_5.316.755630887' ) SIZE 500 M  REUSE,
  GROUP  6 ( '+DATA/or2/onlinelog/group_6.317.755630903' ) SIZE 500 M  REUSE,
  GROUP  7 ( '+DATA/or2/onlinelog/group_7.318.755630917' ) SIZE 500 M  REUSE,
  GROUP  8 ( '+DATA/or2/onlinelog/group_8.319.755630931' ) SIZE 500 M  REUSE,
  GROUP  9 ( '+DATA/or2/onlinelog/group_9.311.763828061' ) SIZE 500 M  REUSE,
  GROUP 10 ( '+DATA/or2/onlinelog/group_10.292.763828343' ) SIZE 500 M  REUSE
 DATAFILE
  '+DATA/or2/datafile/system.297.767809119'
 CHARACTER SET WE8ISO8859P1


contents of Memory Script:
{
   set newname for tempfile  1 to
 "+data";
(...)
   switch clone datafile all;
}
executing Memory Script

renamed temporary file 1 to +data in control file
renamed temporary file 2 to +data in control file
renamed temporary file 3 to +data in control file
renamed temporary file 4 to +data in control file

(...)

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

database opened
Finished Duplicate Db at 21-NOV-11

RMAN>
RMAN>

Pronto. Para fechar, apenas alterei a base para NOARCHIVELOG.


Dúvidas?  silverio@siltechconsult.com.br

 
 
 

Posts recentes

Ver tudo

Comments


© 2022 por Siltech Consult

  • LinkedIn
bottom of page