Início / Trilha 3 / Conteúdo / Tópico 2
2

Estratégias de Backup

Full, incremental, differential, archivelog mode, retention policy

📖

Definição

Tipos de Backup

Full Backup (Completo)

Copia todos os blocos de dados usados do banco. É independente de backups anteriores. Permite restore completo sem necessidade de outros backups.

  • Vantagem: Restore mais rápido (um único backup)
  • Desvantagem: Demora mais, ocupa mais espaço
  • Uso: Base semanal ou quinzenal

Incremental Level 0

Similar ao full backup, mas serve como base para backups incrementais Level 1. Copia todos os blocos usados e habilita estratégia incremental.

  • Diferença do Full: Pode ser base de incrementais
  • Uso: Início de ciclo de backup incremental

Incremental Level 1 (Diferencial)

Copia apenas blocos alterados desde o último backup incremental (Level 1 ou 0). Mais rápido e econômico que full backup.

  • Vantagem: Rápido, economiza espaço
  • Desvantagem: Restore mais complexo (precisa da cadeia)
  • Uso: Backup diário

Incremental Level 1 Cumulativo

Copia todos os blocos alterados desde o último Level 0. Ignora Level 1 anteriores.

  • Vantagem: Restore mais simples (só Level 0 + último Level 1)
  • Desvantagem: Maior que Level 1 diferencial
  • Uso: Quando restore speed > backup speed

ARCHIVELOG Mode

ARCHIVELOG mode é essencial para recuperação completa. Quando o redo log é preenchido, Oracle arquiva-o antes de reutilizá-lo.

NOARCHIVELOG (Padrão)

  • ✗ Sem ponto de recuperação no tempo
  • ✗ Apenas backup offline (cold)
  • ✗ Perda de dados entre backups
  • ✓ Usado apenas para dev/test

ARCHIVELOG (Produção)

  • ✓ Point-in-time recovery
  • ✓ Backup online (hot)
  • ✓ Zero data loss (com DataGuard)
  • ✓ Obrigatório para produção

Retention Policy

Define por quanto tempo manter backups antes de considerá-los obsoletos.

Recovery Window

CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS;
Mantém backups necessários para recuperar banco nos últimos N dias.

Redundancy

CONFIGURE RETENTION POLICY TO REDUNDANCY 2;
Mantém N cópias de cada backup antes de considerar obsoleto.

🛠️

Aplicação Prática

Ativando ARCHIVELOG Mode

-- Verificar modo atual
SELECT LOG_MODE FROM V$DATABASE;

-- Ativar ARCHIVELOG mode
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
ALTER DATABASE ARCHIVELOG;
ALTER DATABASE OPEN;

-- Configurar destino de archivelogs
ALTER SYSTEM SET LOG_ARCHIVE_DEST_1='LOCATION=/u01/app/oracle/archivelog' SCOPE=BOTH;
ALTER SYSTEM SET LOG_ARCHIVE_FORMAT='arch_%t_%s_%r.arc' SCOPE=SPFILE;

-- Forçar switch de log (gera archivelog)
ALTER SYSTEM SWITCH LOGFILE;

-- Verificar archivelogs gerados
SELECT NAME, SEQUENCE#, FIRST_TIME FROM V$ARCHIVED_LOG ORDER BY FIRST_TIME DESC;

Estratégia de Backup Recomendada

Estratégia Padrão (7 dias de recuperação)

  • Domingo: Incremental Level 0 (backup base)
  • Segunda a Sábado: Incremental Level 1 (apenas alterações)
  • Contínuo: Backup de archivelogs a cada hora
  • Mensal: Backup Level 0 mantido por 1 ano
#!/bin/bash
# Script de backup incremental automatizado

ORACLE_SID=ORCL
BACKUP_DIR=/backup/rman

# Domingo: Level 0
if [ $(date +%u) -eq 7 ]; then
  rman TARGET / <

Backup com Compressão e Otimização

-- Backup otimizado com múltiplas técnicas
RUN {
  -- Alocar 4 canais para paralelização
  ALLOCATE CHANNEL c1 TYPE DISK FORMAT '/backup/db_%U';
  ALLOCATE CHANNEL c2 TYPE DISK FORMAT '/backup/db_%U';
  ALLOCATE CHANNEL c3 TYPE DISK FORMAT '/backup/db_%U';
  ALLOCATE CHANNEL c4 TYPE DISK FORMAT '/backup/db_%U';
  
  -- Backup incremental Level 1 com compressão
  BACKUP INCREMENTAL LEVEL 1
    AS COMPRESSED BACKUPSET
    SECTION SIZE 1G  -- Divide em seções de 1GB (paraleliza melhor)
    TAG 'DAILY_COMPRESSED'
    DATABASE
    PLUS ARCHIVELOG DELETE INPUT;
  
  -- Liberar canais
  RELEASE CHANNEL c1;
  RELEASE CHANNEL c2;
  RELEASE CHANNEL c3;
  RELEASE CHANNEL c4;
  
  -- Limpeza
  DELETE NOPROMPT OBSOLETE;
  CROSSCHECK BACKUP;
}

Monitoramento de Backups

-- Verificar últimos backups
SELECT
  SESSION_KEY,
  INPUT_TYPE,
  STATUS,
  TO_CHAR(START_TIME, 'DD/MM/YYYY HH24:MI') START_TIME,
  TO_CHAR(END_TIME, 'DD/MM/YYYY HH24:MI') END_TIME,
  ELAPSED_SECONDS/3600 HOURS,
  OUTPUT_BYTES/1024/1024/1024 SIZE_GB
FROM V$RMAN_BACKUP_JOB_DETAILS
ORDER BY START_TIME DESC
FETCH FIRST 10 ROWS ONLY;

-- Espaço utilizado por backups
SELECT
  DEVICE_TYPE,
  ROUND(SUM(BYTES)/1024/1024/1024, 2) SIZE_GB,
  COUNT(*) NUM_BACKUPS
FROM V$BACKUP_PIECE
WHERE STATUS = 'A'
GROUP BY DEVICE_TYPE;

-- Verificar cobertura de recovery
SELECT
  TO_CHAR(MIN(COMPLETION_TIME), 'DD/MM/YYYY HH24:MI') OLDEST_BACKUP,
  TO_CHAR(MAX(COMPLETION_TIME), 'DD/MM/YYYY HH24:MI') NEWEST_BACKUP,
  ROUND((SYSDATE - MIN(COMPLETION_TIME))) DAYS_COVERAGE
FROM V$BACKUP_SET
WHERE STATUS = 'A';

-- Verificar archivelogs não backupeados
SELECT
  COUNT(*) ARCHIVELOGS_NOT_BACKED_UP,
  ROUND(SUM(BLOCKS * BLOCK_SIZE)/1024/1024/1024, 2) SIZE_GB
FROM V$ARCHIVED_LOG
WHERE DELETED = 'NO'
AND BACKUP_COUNT = 0;

Resultado Esperado

Competências Adquiridas

Projetar Estratégia

Definir frequência, tipo e retenção de backups

Configurar ARCHIVELOG

Ativar e gerenciar modo de archivelog

Automatizar Backups

Scripts shell para rotinas de backup

Otimizar Performance

Compressão, paralelização, section size

Monitorar Status

Queries para verificar cobertura e falhas

Balancear RTO/RPO

Equilibrar tempo de recovery e espaço