ORACLE: Duplicate com RMAN
- Siltech Consult
- 7 de out. de 2019
- 5 min de leitura
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
Comments