From d1e3952b22a1e14eecfea823c0330e76bbc80e04 Mon Sep 17 00:00:00 2001 From: amandaandrade9410 Date: Sat, 17 Oct 2026 21:53:48 -0300 Subject: [PATCH] docs/adicionando o doc de procedimentos de backup do banco --- doc/Procedimentos_backup.md | 81 +++++++++++++++++++++++++++++++++++++ sql/002_indices.sql | 19 ++++++++- 2 files changed, 99 insertions(+), 1 deletion(-) create mode 100644 doc/Procedimentos_backup.md diff --git a/doc/Procedimentos_backup.md b/doc/Procedimentos_backup.md new file mode 100644 index 0000000..98a594d --- /dev/null +++ b/doc/Procedimentos_backup.md @@ -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. \ No newline at end of file diff --git a/sql/002_indices.sql b/sql/002_indices.sql index bc568e2..09ca760 100644 --- a/sql/002_indices.sql +++ b/sql/002_indices.sql @@ -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); @@ -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); @@ -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);