Técnica de Flashback em Banco de Dados com GBase 8c

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:

  1. Identifica registros relevantes na área de reciclagem
  2. Executa restaurações individuais por tabela
  3. 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, TRUNCATE ou 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';

Tags: GBase8c flashback banco-de-dados recuperacao-de-dados MVCC

Publicado em 7-3 05:11