Skip to main content

Command Palette

Search for a command to run...

Você realmente sabe quando usar Image Copy no RMAN?

Updated
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.

40 views