Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
81 changes: 81 additions & 0 deletions doc/Procedimentos_backup.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
# Procedimentos de Backup e Recuperação do Banco

Este documento descreve como gerar backups e realizar a restauração do banco de dados PostgreSQL do ACTA, garantindo a segurança dos dados caso ocorra algum problema.

## Backup

O backup deve ser feito diariamente, de preferência em horários de baixo uso, e obrigatoriamente antes de qualquer deploy ou alteração.

Comando para gerar o backup:

```
pg_dump -Fc -f meu_backup.dump nome_do_banco
```

O que esse comando faz:

* `-Fc` gera o backup em formato customizado;
* `-f` define o nome do arquivo que será criado;
* `nome_do_banco` nome do banco de dados que você quer copiar.

## O backup deve guardar:

O arquivo .dump gerado inclui toda a estrutura e massa de dados do banco:

* Schemas (public, pdca, auditoria);
* Tabelas, colunas, chaves primárias e estrangeiras;
* Triggers, funções, procedures e views;
* Tabela de logs de auditoria.

## Validação do Arquivo de Backup

Depois de criar o backup, é necessário verificar se o arquivo foi gerado corretamente:

```
pg_restore --list meu_backup.dump
```

Se o terminal listar as tabelas, funções e schemas sem erros, o arquivo está íntegro e pronto para uso.

## Procedimento de Restauração

Caso ocorra uma falha, os dados podem ser recuperados utilizando o arquivo de backup. Porém, por precaução, é sempre importante ter uma banco de teste para executar esses comandos e depois passar para o banco em produção.

```
createdb -h localhost -U postgres acta_restaurado
```

Depois, o backup pode ser restaurado nesse banco:

```
pg_restore -h localhost -U postgres -d acta_restaurado --clean --if-exists -v "meu_backup.dump"
```

Nesse comando:

* `--clean` limpa objetos antigos antes de recriá-los;
* `--if-exists` evita mensagens de erro caso algum objeto ainda não exista na base limpa;
* `-v` ativa o detalhamento do log do processo, assim o terminal mostra o que está sendo restaurado;

## Testes após a recuperação

Após restaurar o banco, devem ser realizados alguns testes:

* verificar se as principais tabelas existem;
* verificar se os registros foram recuperados;
* testar o cadastro de uma informação;
* verificar se os relacionamentos continuam funcionando;
* verificar se os registros de auditoria continuam sendo criados;
* testar o acesso do sistema ao banco.

## Registro da operação

Cada backup ou recuperação deve ser registrado com:

* data da operação;
* nome do responsável;
* tipo de operação;
* nome do arquivo utilizado;
* resultado da operação;

Esse registro ajuda a saber quando o backup foi realizado, quem realizou a operação e se ocorreu algum problema.
19 changes: 18 additions & 1 deletion sql/002_indices.sql
Original file line number Diff line number Diff line change
Expand Up @@ -136,7 +136,6 @@ CREATE INDEX IF NOT EXISTS idx_tarefa_plano ON pdca.tarefa (id_plano_acao);
-- ANTES: execution time -> 0.545
-- DEPOIS: execution time -> 0.075


-- Tarefa por Responsável
EXPLAIN ANALYZE SELECT * FROM pdca.tarefa WHERE id_responsavel = 1;
CREATE INDEX IF NOT EXISTS idx_tarefa_responsavel ON pdca.tarefa (id_responsavel);
Expand All @@ -149,6 +148,12 @@ CREATE INDEX IF NOT EXISTS idx_tarefa_status ON pdca.tarefa (status);
-- ANTES: execution time -> 0.419
-- DEPOIS: execution time -> 0.049

-- Tarefa Dependência
EXPLAIN ANALYZE SELECT * FROM pdca.tarefa_dependencia WHERE id_tarefa_dependencia = 1 AND id_tarefa = 1;
CREATE INDEX IF NOT EXISTS idx_tarefa_dependencia_reversa ON pdca.tarefa_dependencia (id_tarefa_dependencia, id_tarefa);
-- ANTES: execution time -> 0.699
-- DEPOIS: execution time -> 0.034

-- Problema por Ciclo
EXPLAIN ANALYZE SELECT * FROM pdca.problema WHERE id_ciclo = 1;
CREATE INDEX IF NOT EXISTS idx_problema_ciclo ON pdca.problema (id_ciclo);
Expand Down Expand Up @@ -233,6 +238,18 @@ CREATE INDEX IF NOT EXISTS idx_usuario_tipo ON usuario_sistema (tipo_usuario);
-- ANTES: execution time -> 0.479
-- DEPOIS: execution time -> 0.031

-- Usuário Treinamento
EXPLAIN ANALYZE SELECT * FROM pdca.usuario_treinamento WHERE id_treinamento = 1 AND id_usuario = 1;
CREATE INDEX IF NOT EXISTS idx_usuario_treinamento_reverso ON pdca.usuario_treinamento (id_treinamento, id_usuario);
-- ANTES: execution time -> 1.287
-- DEPOIS: execution time -> 0.047

-- Usuário Ciclo
EXPLAIN ANALYZE SELECT * FROM pdca.usuario_ciclo WHERE id_ciclo = 1 AND id_usuario = 1;
CREATE INDEX IF NOT EXISTS idx_usuario_ciclo_reverso ON pdca.usuario_ciclo (id_ciclo, id_usuario);
-- ANTES: execution time -> 0.546
-- DEPOIS: execution time -> 0.024

-- Empresa por Status
EXPLAIN ANALYZE SELECT * FROM empresa WHERE status = 'ATIVO';
CREATE INDEX IF NOT EXISTS idx_empresa_status ON empresa (status);
Expand Down
Loading