# 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:**

```sql
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:**

```sql
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
SQL> CREATE TABLESPACE ts_lab
DATAFILE '+DATADISK'
SIZE 100M;

Tablespace created.
```

```sql
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.

```sql
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;
```

```sql
--Verifica objeto criado (opcional)

SQL> SELECT count(*) FROM objeto_simples;

  COUNT(*)
----------
         4
```

## Backup Usando BACKUPSET

```sql
--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
```

```sql
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**

```sql
--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

```sql
--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.

```sql
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:

```sql
RMAN> ALTER TABLESPACE ts_lab ONLINE;

Statement processed
```

Validar status da tbs recuperada.

```sql
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
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**.

```sql
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
```

```sql
--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:

```sql
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**

```sql
--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.

```sql
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.

```sql
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.
