Você realmente sabe quando usar Image Copy no RMAN?

Fundamentos
Você realmente sabe a diferença entre Backupset e Image Copy no RMAN?
Mais do que isso: sabe quando usar cada estratégia e quais são as limitações práticas de cada uma em ambientes reais?
Muita gente conhece os comandos, mas nem sempre entende o impacto que a escolha do tipo de backup pode ter no tempo de recuperação do banco (RTO) e na estratégia de proteção de dados (RPO).
Por isso resolvi montar um laboratório prático, inspirado em um projeto real que atendi recentemente:
Neste projeto o requisito era diminuir o RTO de um banco de dados produtivo que tinha mais ou menos 10 TB. Nos testes realizados em um ambiente controlado de simulação de falhas, substituímos a estratégia tradicional baseada em backupset por uma abordagem utilizando Image Copy. Os resultados foram bastante expressivos: o tempo necessário para restaurar e recuperar o banco apresentou uma redução significativa, principalmente em cenários de perda de datafiles ou necessidade de recuperação completa.
A estratégia adotada foi: Image Copy + Incremental Merge
Neste artigo vou compartilhar esse laboratório, mostrando na prática, sem enrolação, as diferenças entre Backupset e Image Copy, quando cada um faz mais sentido e como essa escolha pode impactar diretamente a sua estratégia de backup e recovery.
Backupset (BACKUP AS BACKUPSET)
O que é
Um backupset é um formato proprietário do RMAN que não é uma cópia direta do datafile.
Ele contém:
. Apenas Blocos Utilizados
. Pode ter compressão
. Pode ter multiplexação
. Pode ser criptografado
. Pode ser gravado em fita (SBT)
Características
. RMAN lê os datafiles
. Extrai somente blocos necessários
. Grava em arquivos .bkp ou .backupset
Exemplo:
BACKUP DATABASE;
ou
BACKUP AS BACKUPSET DATABASE;
Vantagens
✔ Menor espaço
✔ Mais rápido para transferir
✔ Suporta compressão
✔ Ideal para backup em fita✔ Permite compressão
✔ Permite multiplexação
Desvantagens
❌ Não é utilizável diretamente pelo Oracle
❌ Precisa ser restaurado antes de usar
Image Copy (BACKUP AS COPY)
O que é
Uma Image Copy é uma cópia física idêntica do datafile um datafile original -> copia byte a byte.
Exemplo:
BACKUP AS COPY DATABASE;
ou
BACKUP AS COPY DATAFILE 5;
Isso gera um arquivo igual ao datafile original.
Vantagens
✔ Pode ser usado imediatamente
✔ Permite SWITCH DATABASE TO COPY
✔ Excelente para estratégia de recuperação rápida
Desvantagens
❌ Maior uso de disco
❌ Não comprime
❌ Não multiplexa
Quando escolher Backupset
Use quando:
• O banco é grande e espaço de backup é limitado
• Você precisa de compressão
• Você faz backup para fita
• O tempo de restore não é extremamente crítico
• O ambiente tem janela de manutenção suficiente para restore completo.
• Quando o ambiente tem data guard e ele é utilizado como estratégia de contingência.
Exemplo de cenários
• Backups enviados para tape library
• Backups replicados para cloud storage
• Ambientes com RTO mais flexível
• Bancos de dados muito grandes onde armazenar cópias completas seria caro
Quando escolher Image Copy
Use quando:
• O RTO precisa ser muito baixo
• O banco é crítico
• Downtime precisa ser mínimo
• Você quer usar Incremental Merge
• Há bastante espaço em disco
• Quando você quer economizar tempo de restore.
Exemplo de cenários
• Sistemas financeiros
• E-commerce
• Bancos críticos de produção
• Ambientes de alta disponibilidade
Montagem de Laboratório
SQL> CREATE TABLESPACE ts_lab
DATAFILE '+DATADISK'
SIZE 100M;
Tablespace created.
SQL> select file_name from dba_data_files;
FILE_NAME
----------------------------------------------------
+DATADISK/ORADB/DATAFILE/system.256.1044815187
+DATADISK/ORADB/DATAFILE/sysaux.257.1044815223
+DATADISK/ORADB/DATAFILE/undotbs1.258.1044815237
+DATADISK/ORADB/DATAFILE/users.259.1044815239
+DATADISK/ORADB/DATAFILE/ts_lab.327.1228064151
Vamos criar uma tabela simples para consultar o seus dados, após restore.
CREATE TABLE objeto_simples (
id NUMBER(10) PRIMARY KEY,
nome VARCHAR2(100),
tipo VARCHAR2(20),
criado_em DATE
)
TABLESPACE TS_LAB;
--Insere dados de exemplo
INSERT INTO objeto_simples VALUES (2, 'VIEW_EXEMPLO', 'VIEW', SYSDATE - 1);
INSERT INTO objeto_simples VALUES (1, 'TABELA_TESTE', 'TABLE', SYSDATE);
INSERT INTO objeto_simples VALUES (3, 'PROCEDIMENTO1', 'PROCEDURE', SYSDATE - 2);
INSERT INTO objeto_simples VALUES (4, 'INDICE_PRINC', 'INDEX', SYSDATE);
COMMIT;
--Verifica objeto criado (opcional)
SQL> SELECT count(*) FROM objeto_simples;
COUNT(*)
----------
4
Backup Usando BACKUPSET
--No Oracle Recovery Manager:
RMAN> BACKUP TABLESPACE ts_lab;
Starting backup at 16-MAR-2026 10:05:38 using target database control file instead of recovery catalog allocated channel: ORA_DISK_1 channel
ORA_DISK_1: SID=283 device type=DISK channel ORA_DISK_1: starting full
datafile backup set channel ORA_DISK_1: specifying datafile(s) in backup
set input datafile file number=00013
name=+DATADISK/ORADB/DATAFILE/ts_lab.327.1228064151 channel ORA_DISK_1:
starting piece 1 at 16-MAR-2026 10:05:41 channel ORA_DISK_1: finished piece
1 at 16-MAR-2026 10:05:42 piece
handle=+DATADISK/ORADB/BACKUPSET/2026_03_16/nnndf0_tag20260316t100541_0.329.1228064743 tag=TAG20260316T100541 comment=NONE channel ORA_DISK_1: backup
set complete, elapsed time: 00:00:01 Finished backup at 16-MAR-2026
10:05:43 Starting Control File and SPFILE Autobackup at 16-MAR-2026
10:05:43 piece
handle=+DATADISK/ORADB/AUTOBACKUP/2026_03_16/s_1228064741.330.1228064743
comment=NONE
Finished Control File and SPFILE Autobackup at 16-MAR-2026 10:05:44
RMAN> LIST BACKUP OF TABLESPACE ts_lab;
List of Backup Sets
===================
BS Key Type LV Size Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ --------------------
11 Full 1.15M DISK 00:00:02 16-MAR-2026 17:05:41
BP Key: 11 Status: AVAILABLE Compressed: NO Tag: TAG20260316T100541
Piece Name: +DATADISK/ORADB/BACKUPSET/2026_03_16/nnndf0_tag20260316t100541_0.329.1228064743
List of Datafiles in backup set 11
File LV Type Ckp SCN Ckp Time Abs Fuz SCN Sparse Name
---- -- ---- ---------- -------------------- ----------- ------ ----
13 Full 13757442 16-MAR-2026 17:05:41 NO +DATADISK/ORADB/DATAFILE/ts_lab.327.1228064151
Simular problema
--Validar status da Tablespaces:
select TABLESPACE_NAME, STATUS from dba_tablespaces
where tablespace_name ='TS_LAB';
TABLESPACE_NAME STATUS
------------------------------ ---------
TS_LAB ONLINE
--Vamos remover o datafile.
ALTER TABLESPACE ts_lab OFFLINE IMMEDIATE;
--No ASM:
ASMCMD> rm -rf +DATADISK/oradb/datafile/TS_LAB.327.1228064151
--Vamos tentar colocar esta tbs online e vermos o erro:
SQL> ALTER TABLESPACE ts_lab online;
ALTER TABLESPACE ts_lab online
*
ERROR at line 1:
ORA-01157: cannot identify/lock data file 13 - see DBWR trace file
ORA-01110: data file 13: '+DATADISK/ORADB/DATAFILE/ts_lab.327.1228064151'
Recovery usando BACKUPSET
Agora vem o fluxo clássico - No padrão backupset
--RMAN pega o backupset e recria o datafile.
RMAN> RESTORE TABLESPACE ts_lab;
Starting restore at 16-MAR-2026 10:12:02
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=66 device type=DISK
channel ORA_DISK_1: restored backup piece 1
channel ORA_DISK_1: starting datafile backup set restore
channel ORA_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_DISK_1: restoring datafile 00013 to +DATADISK/ORADB/DATAFILE/ts_lab.327.1228064151
channel ORA_DISK_1: reading from backup piece +DATADISK/ORADB/BACKUPSET/2026_03_16/nnndf0_tag20260316t100541_0.329.1228064743
channel ORA_DISK_1: piece handle=+DATADISK/ORADB/BACKUPSET/2026_03_16/nnndf0_tag20260316t100541_0.329.1228064743 tag=TAG20260316T100541
channel ORA_DISK_1: restore complete, elapsed time: 00:00:01
Finished restore at 16-MAR-2026 10:12:06
Agora vamos aplicar redo logs, caso exista para deixar a tbs consistente e conseguir colocar a tbs ONLINE.
RMAN> RECOVER TABLESPACE ts_lab;
Starting recover at 16-MAR-2026 10:12:45
using channel ORA_DISK_1
starting media recovery media recovery
complete, elapsed time: 00:00:00
Finished recover at 16-MAR-2026 10:12:46
--Metricas obtidas.
--fim do RESTORE: 10:12:06
--início do RECOVER: 10:12:45
Colocar a tbs online:
RMAN> ALTER TABLESPACE ts_lab ONLINE;
Statement processed
Validar status da tbs recuperada.
SQL> select TABLESPACE_NAME, STATUS from dba_tablespaces
where tablespace_name ='TS_LAB';
TABLESPACE_NAME STATUS
------------------------------ ---------
TS_LAB ONLINE
SQL> SELECT count() FROM objeto_simples;
COUNT(*)
----------
4
Repare que ao validarmos o file name do datafile, ele foi criado usando um novo nome, isso é característico do método via backupset.
SQL> select file_name from dba_data_files;
FILE_NAME
-----------------------------------------------
+DATADISK/ORADB/DATAFILE/system.256.1044815187
+DATADISK/ORADB/DATAFILE/sysaux.257.1044815223
+DATADISK/ORADB/DATAFILE/undotbs1.258.1044815237
+DATADISK/ORADB/DATAFILE/users.259.1044815239
+DATADISK/ORADB/DATAFILE/ts_lab.327.1228065125
Fluxo do Backupset
backupset
↓
RESTORE
↓
datafile recriado
↓
RECOVER
↓
tablespace online
Backup usando IMAGE COPY
Primeiro criar backup do tipo - image copy.
RMAN> BACKUP AS COPY TABLESPACE ts_lab;
Starting backup at 16-MAR-2026 10:17:44
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=66 device type=DISK
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=66 device type=DISK
channel ORA_DISK_1: starting datafile copy
input datafile file number=00013 name=+DATADISK/ORADB/DATAFILE/ts_lab.327.1228065125
output file name=+DATADISK/ORADB/DATAFILE/ts_lab.331.1228065467 tag=TAG20260316T101746 RECID=4 STAMP=1228040266
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:01
Finished backup at 16-MAR-2026 10:17:47
Starting Control File and SPFILE Autobackup at 16-MAR-2026 10:17:47
piece handle=+DATADISK/ORADB/AUTOBACKUP/2026_03_16/s_1228040267.332.1228065467 comment=NONE
Finished Control File and SPFILE Autobackup at 16-MAR-2026 10:17:48
--Verificar o backup gerado:
RMAN> LIST COPY OF TABLESPACE ts_lab;
List of Datafile Copies
Key File S Completion Time Ckp SCN Ckp Time Sparse
4 13 A 16-MAR-2026 10:17:46 13761413 16-MAR-2026 10:17:46 NO
Name: +DATADISK/ORADB/DATAFILE/ts_lab.331.1228065467
Tag: TAG20260316T101746
Detalhe importante:
Agora no ASM temos 2 arquivos da mesma Tablespace, um copia do outro:
ASMCMD> cd datafile
ASMCMD> ls -l
Type Redund Striped Time Sys Name
DATAFILE UNPROT COARSE MAR 16 17:00:00 Y TS_LAB.327.1228065125
DATAFILE UNPROT COARSE MAR 16 17:00:00 Y TS_LAB.331.1228065467
Simular problema
--Vamos novamente remover o datafile simulando um erro.
SQL> ALTER TABLESPACE ts_lab OFFLINE IMMEDIATE;
# ASMCMD> rm -rf +DATADISK/oradb/datafile/TS_LAB.327.1228065125
Recovery usando IMAGE COPY
Vamos agora recuperar o datafile, repare que o processo será mais rápido, pois não precisa recriar o datafile, apenas fazer um switch copy e alterar a referencia no controlfile.
RMAN> SWITCH TABLESPACE ts_lab TO COPY;
using target database control file instead of
recovery catalog
datafile 13 switched to datafile copy "+DATADISK/ORADB/DATAFILE/ts_lab.331.1228065467"
Aqui fica evidente que em um banco enorme, economizaríamos um tempo considerado de RESTORE que em uma estratégia de RTO é o fator que mais consome tempo para recuperar um banco por completo.
RMAN> RECOVER TABLESPACE ts_lab;
Starting recover at 16-MAR-2026 10:30:43
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=47 device type=DISK
starting media recovery
media recovery complete, elapsed time: 00:00:01
Finished recover at 16-MAR-2026 10:30:46
RMAN> ALTER TABLESPACE ts_lab ONLINE;
Statement processed
--Valide a quantidade de registros na tabela, após restore.
SQL> SELECT count(*) FROM objeto_simples;
COUNT(*)
----------
4
Fluxo do Image Copy
image copy já existe
↓
SWITCH TO COPY
↓
RECOVER
↓
tablespace online
Conclusão
Quando falamos de estratégias de backup e recuperação, não existe uma única abordagem que funcione para todos os cenários. Cada ambiente possui suas próprias características, limitações e requisitos de negócio.
Por isso, evite ficar preso a apenas um método ou padrão. Analise o ambiente, entenda os objetivos de RPO e RTO, avalie as limitações de infraestrutura e identifique quais estratégias realmente fazem sentido para aquele contexto.
Se necessário, teste diferentes abordagens em ambientes controlados. Muitas vezes é justamente nesses testes que surgem oportunidades de melhoria que passam despercebidas no dia a dia operacional.
No final das contas, nada está escrito em pedra. O papel de quem administra bancos de dados é justamente questionar, analisar criticamente e buscar constantemente formas mais eficientes de proteger e recuperar os dados.
Faça as perguntas certas, valide as hipóteses e esteja sempre disposto a evoluir suas estratégias.





