3

Recovery e Restauração

RESTORE/RECOVER, point-in-time recovery, flashback, incomplete recovery

📖

Definição

Conceitos de Recovery

RESTORE

Copia arquivos de backup de volta para seus locais originais ou novos. Não deixa o banco consistente.

RECOVER

Aplica redo logs (online e archived) para tornar os datafiles consistentes com um ponto no tempo.

Complete Recovery

Recupera banco até última transação committed disponível. Sem perda de dados.

Incomplete Recovery (PITR)

Recupera até ponto específico no passado. Requer RESETLOGS após recovery. Perde dados após o ponto escolhido.

Flashback Technologies

Tecnologia Uso Requisito
Flashback Query Consultar dados em ponto anterior UNDO retention
Flashback Table Reverter tabela inteira Row movement ON
Flashback Drop Recuperar tabela DROPpada Recycle Bin
Flashback Database Reverter banco inteiro FRA + Flashback ON
🛠️

Aplicação Prática

Complete Recovery

-- Perda de datafile (mas controlfile e redo logs intactos)
-- 1. Identificar datafiles perdidos
SELECT FILE#, NAME, STATUS FROM V$DATAFILE WHERE STATUS = 'OFFLINE';

-- 2. Banco em MOUNT (se necessário offline do datafile)
ALTER DATABASE DATAFILE 4 OFFLINE;

-- 3. Restore e Recover
RMAN TARGET /
RUN {
  RESTORE DATAFILE 4;
  RECOVER DATAFILE 4;
}

-- 4. Trazer datafile online
ALTER DATABASE DATAFILE 4 ONLINE;

-- Recovery de banco inteiro
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
RESTORE DATABASE;
RECOVER DATABASE;
ALTER DATABASE OPEN;

Point-in-Time Recovery (PITR)

-- Cenário: DROP TABLE acidental às 14:30, queremos voltar para 14:25
-- IMPORTANTE: PITR perde todas transações após o ponto escolhido!

-- 1. Shutdown e mount
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;

-- 2. Restore e recover até ponto específico
RMAN TARGET /
RUN {
  SET UNTIL TIME "TO_DATE('17/12/2025 14:25:00', 'DD/MM/YYYY HH24:MI:SS')";
  RESTORE DATABASE;
  RECOVER DATABASE;
}

-- 3. Abrir com RESETLOGS (cria nova incarnation)
ALTER DATABASE OPEN RESETLOGS;

-- Alternativas para SET UNTIL:
-- SET UNTIL SCN 2547893;
-- SET UNTIL SEQUENCE 1234 THREAD 1;
-- SET UNTIL RESTORE POINT before_mistake;

Flashback Database

-- Habilitar Flashback Database
ALTER DATABASE FLASHBACK ON;

-- Criar guaranteed restore point (não expira)
CREATE RESTORE POINT before_upgrade GUARANTEE FLASHBACK DATABASE;

-- Flashback database para restore point
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
FLASHBACK DATABASE TO RESTORE POINT before_upgrade;
ALTER DATABASE OPEN RESETLOGS;

-- Flashback para timestamp
FLASHBACK DATABASE TO TIMESTAMP (SYSTIMESTAMP - INTERVAL '2' HOUR);

-- Verificar janela de flashback disponível
SELECT OLDEST_FLASHBACK_SCN, OLDEST_FLASHBACK_TIME 
FROM V$FLASHBACK_DATABASE_LOG;

Flashback Table

-- Habilitar row movement (necessário)
ALTER TABLE employees ENABLE ROW MOVEMENT;

-- Flashback table para 1 hora atrás
FLASHBACK TABLE employees TO TIMESTAMP (SYSTIMESTAMP - INTERVAL '1' HOUR);

-- Flashback múltiplas tabelas
FLASHBACK TABLE employees, departments TO TIMESTAMP 
  TO_TIMESTAMP('17/12/2025 10:00:00', 'DD/MM/YYYY HH24:MI:SS');

-- Recuperar tabela DROPpada (Flashback Drop)
SHOW RECYCLEBIN;
FLASHBACK TABLE employees TO BEFORE DROP;

-- Purgar recyclebin
PURGE RECYCLEBIN;
PURGE TABLE employees;

Block Media Recovery

-- Recovery de blocos corrompidos específicos (mais rápido que datafile inteiro)
-- Identificar blocos corrompidos
SELECT FILE#, BLOCK#, CORRUPTION_TYPE FROM V$DATABASE_BLOCK_CORRUPTION;

-- Recover blocos específicos
RMAN TARGET /
BLOCKRECOVER DATAFILE 5 BLOCK 234, 456, 789;

-- Recover com restore point
BLOCKRECOVER DATAFILE 5 BLOCK 234 
  FROM BACKUPSET 
  RESTORE UNTIL RESTORE POINT before_issue;

Resultado Esperado

Complete Recovery

Restaurar banco até última transação

PITR

Point-in-time recovery preciso

Flashback

Recovery rápido sem restore

Block Recovery

Reparar blocos corrompidos

Troubleshooting

Diagnosticar falhas de recovery

Teste Regular

Validar procedimentos de recovery

Anterior Próximo