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