Eduardo Lobo Blanco escreveu:
> Olá lista ...
> 
> Estou testando o funcionamento do PITR aqui na empresa, mas estou com 
> uma dúvida na recuperação dos dados pelos arquivos de WAL.
> Vou explicar passo a passo o que fiz e o resultado:
> 
> - Iniciei um banco novo em uma maquina de teste (/usr/local/pgsql/bin -D 
> /usr/local/pgsql/data)
> - Em seguida restaurei um banco que temos do nosso sistema apartir do 
> dump que fazemos diariamente. Utilizei o pg_restore e o banco restaurou 
> 100%.
> - Configurei o postgres.conf para executar o WAL ARCHIVING.
>    archive_command = 'cp -i %p /teste/wal/%f </dev/null'
> - O WAL ARCHIVING esta funcionando sem problemas.
> - Criei o base backup do banco com os seguintes passos usando o psql:
>     - select pg_start_backup('teste.tar.gz');
>     - tar -czf /teste/base/teste.tar.gz /usr/local/pgsql/data
>     - select pg_stop_backup();
> - o base backup ocorreu sem problemas, criando no diretorio de archive 
> do WAL o arquivo 000000010000000000000075.00918954.backup e o arquivo 
> 000000010000000000000075
> - Apos ter o WAL ARCHIVING funcionanado e ter criar o base backup, me 
> conectei no banco pelo pgAdmin.
>   Neste banco temos uma tabela com 5.153.747 registros. Ralizei um 
> DELETE de todos os registros do ano de 2007 desta tabela apagando assim 
> 2.767.015 registros.
>   Com essa ação foi gerado alguns arquivos de WAL no diretorio de 
> archive. No log do postgres foi registrado o archive do arquivos de WAL 
> corretamente.
>   - archived transaction log file "000000010000000000000076"
>   Essa mensagem se repetiu até o arquivo 000000010000000000000089
>   Nesse momento percebi que no diretorio /usr/local/pgsql/data/pg_xlog/ 
> existem 3 arquivos de WAL que não foram arquivados no diretorio de 
> archive do WAL.
> - Continuando com meu teste, parei o postgres para tentar agora 
> restaurar o banco apartir do base backup e dos WAL arquivados.
> - Renomiei o diretorio "/usr/local/pgsql/data" para 
> "/usr/local/pgsal/data.OLD"
> - Descompactei o base backup criando o novo "/usr/local/pgsal/data" e 
> acertei as permissoes do diretorio corretamente.
> - Apaguei o conteudo do "/usr/local/pgsal/data/pg_xlog/" e 
> /"usr/local/pgsal/data/pg_xlog/archive_status" pois continham dados da 
> hora que o base backup foi gerado.
> - Criei o arquivo recovery.conf com o conteudo
>    - restore_command = 'cp /teste/wal/%f "%p"'
> - Iniciei o Postgres novamente. No log do postgres observei:
>     - starting archive recovery
>     - restore_command = "cp /teste/wal/%f "%p""
>     - cp: impossível fazer stat em `/teste/wal/00000001.history': 
> Arquivo ou diretório não encontrado
>     - restored log file "000000010000000000000075.00918954.backup" from 
> archive
>     - restored log file "000000010000000000000075" from archive
>     - checkpoint record is at 0/75918954
>     - redo record is at 0/75918954; undo record is at 0/0; shutdown FALSE
>     - next transaction ID: 0/1806; next OID: 24576
>     - next MultiXactId: 1; next MultiXactOffset: 0
>     - automatic recovery in progress
>     - redo starts at 0/7591899C
>     - restored log file "000000010000000000000076" from archive
>     Esta ultima mensagem se repetiu ate o arquivo 
> 000000010000000000000089 que era o ultimo arquivo no diretorio de WAL.
>     - cp: impossível fazer stat em 
> `/spacecom/wal/00000001000000000000008A': Arquivo ou diretório não 
> encontrado
>     - could not open file "pg_xlog/00000001000000000000008A" (log file 
> 0, segment 138): Arquivo ou diretório não encontrado
>     - redo done at 0/89FFFAB0
>     - restored log file "000000010000000000000089" from archive
>     - archive recovery complete
>     - database system is ready
> - Após isso, me conectei no banco e fui verificar se o banco estava 
> correto,
>   mas para minha surpresa, os dados que havia apagado com o DELETE ainda 
> estao na base.
> 
> 
> Estou usando o Postgres 8.2.4
> Após escrever  todo este email, percebi uma conhecidencia que acho nao 
> ser por acaso. Ficaram 3 arquivos no diretorio /usr/local/pgsql/pg_log/  
> que nao foram arquivados no diretorio do WAL,
> e o no meu postgres.conf esta definido o valor de "checkpoint_segments = 3".
> 
> Apos essa luz, executei todo o processo de restauracao acima, mas 
> copiando os arquivos que faltaram a ser arquivados no diretorio do WAL, 
> e pronto. O DELETE foi executado.
> 
> Entao conclui que o checkpoint_segments é a quantidade de transacoes que 
> podemos perder em caso de uma catastrófe do banco, tipo na queima de um hd.
> É isso mesmo ?
> 
> Obrigado e desculpem pelo longo email.
> 
Ante de vc executar o select pg_start_backup('teste.tar.gz') vc ira 
parar o PG fazer uma copia da pasta data para data_Old.

Depois vc executa o Delete para deletar os arquivos de 2007 nesse 
intervalo ou depois vc executa o  select pg_start_backup('teste.tar.gz') 
e select pg_stop_backup().

Para o PG renomeia a pasta data para data_Old2 depois renomeia a pasta 
data_old para data essa pasta tem os dados antes do delete e segue o 
resto,o que vc esta fazendo que esta correto.


_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a