Cenários de Aplicação
O GBase 8c oferece recursos de flashback em nível de banco de dados, permitindo a recuperação de tabelas para estados anteriores através de mecanismos MVCC. Essa funcionalidade é ideal para correção de erros lógicos em conjuntos específicos de tabelas, revertendo alterações incrementais posteriores a um ponto temporal definido.
Sintaxe para Flashback
Restauração por timestamp:
timecapsule database para timestamp expressao;
Restauração por CSN (Commmit Sequence Number):
timecapsule database para csn expressao;
Configuração do Recurso
Ative o recurso via parâmetro enable_timecapsule_database:
- Valores:
ON/TRUE(habilitado),OFF/FALSE(padrão) - Método de configuração:
gs_guc reload -c "enable_timecapsule_database=valor"
Mecanismo de Funcionamento
Operações DML são registradas em uma área de reciclagem com metadados de timestamp e tipo de operação ('i': inserção, 'u': atualização, 'D': exclusão). Durante o flashback, o sistema:
- Identifica registros relevantes na área de reciclagem
- Executa restaurações individuais por tabela
- Atualiza metadados de timestamp
Dados permanecem recuperáveis durante undo_retention_time + 15min. Após esse período, a restauração torna-se indisponível.
Restrições Técnicas
- Suporta apenas tabelas UStore
- Duração máxima:
undo_retention_time + período de retenção de snapshot - Não suporta recuperação após operações
DROP,TRUNCATEou alterações de estrutura - Versões antigas não podem ser removidas por
VACUUM
Demonstração Prática
Pré-requisitos
gs_guc set -N all -I all -c "enable_timecapsule_database=on"
gs_guc set -N all -I all -c "enable_recyclebin=on"
gs_guc set -N all -I all -c "undo_retention_time=600s"
gs_om -t restart
Sequência de Operações
1. Criação de dados de teste:
CREATE TABLE dados_rec_01(id serial, detalhes text, valor int) WITH (storage_type=ustore);
INSERT INTO dados_rec_01 SELECT v, 'amostra', 50 FROM generate_series(10,15) v;
CREATE TABLE dados_rec_02(id serial, detalhes text, valor int) WITH (storage_type=ustore);
INSERT INTO dados_rec_02 SELECT v, 'amostra', 50 FROM generate_series(10,15) v;
2. Registrar ponto de recuperação (timestamp T1):
SELECT NOW();
3. Executar alterações:
UPDATE dados_rec_01 SET valor = 30;
INSERT INTO dados_rec_01 VALUES (99, 'novo_reg', 100);
DELETE FROM dados_rec_01 WHERE id < 14;
4. Restauração via timestamp:
TIMECAPSULE DATABASE PARA TIMESTAMP 'T1';
5. Restauração via CSN:
-- Obter CSN após restauração inicial
SELECT int8in(xidout(next_csn)) FROM gs_get_next_xid_csn();
-- Executar flashback
TIMECAPSULE DATABASE PARA CSN 'csn_obtido';