SQLite 3.51.3 com correção de possível corrupção de banco de dados no modo WAL

SQLite 3.51.3 com correção de possível corrupção de banco de dados no modo WAL

No dia 13 de março, foi lançado um update corretivo 3.51.3 para o SGBD embutido compacto. SQLiteO código do projeto foi escrito na linguagem C e distribuído como domínio público.

Devido a problemas de compatibilidade reversa ligados a algumas novas funcionalidades, a versão 3.52.0 (lançada em 6 de março) foi retirada.

Lista de mudanças da versão 3.51.3:

  • Em 3 de março, um dos desenvolvedores do SQLite (Dan) descobriu e corrigiu um erro que, em raras ocasiões, poderia causar a corrupção do banco de dados, chamado «bug de restauração WAL»:
    • Esse erro ocorre apenas em bancos de dados operando no modo WAL, se dois ou mais processos ou threads tentarem acessar o mesmo arquivo simultaneamente para escrita ou criação de checkpoints.
    • O erro está relacionado a um conflito de acesso a dados sob rígidas restrições de tempo. Em condições normais de operação, ele é extremamente raro. Os desenvolvedores não conseguiram reproduzir esse erro em condições reais e tiveram que adicionar a lógica de teste especial ao SQLite, que intencionalmente cria condições para provocar o erro, a fim de garantir que o problema foi resolvido.
    • O erro ocorre quando:
      1. Uma conexão realiza a verificação do checkpoint. Essa primeira verificação deve ser concluída. Em outras palavras, durante a verificação, é necessário copiar com sucesso todo o conteúdo do arquivo WAL de volta para o banco de dados e colocar o arquivo WAL em um estado que permita um reset.
      2. Imediatamente após a conclusão do primeiro checkpoint, o segundo é iniciado.
      3. Enquanto o segundo checkpoint do passo 2 está sendo iniciado, outra conexão ao banco de dados registra uma transação que reseta o arquivo WAL e grava novo conteúdo no início do arquivo WAL.
      4. Devido ao conflito de acesso a dados, o segundo checkpoint do passo 2 não considera que o arquivo WAL foi resetado em decorrência da conclusão da transação no passo 3. O segundo checkpoint estabelece um valor incorreto para um dos campos no cabeçalho do WAL. Esse campo indica que parte do arquivo WAL já foi confirmada no checkpoint, embora isso não seja verdade.
      5. A fixação de transações adicionais leva ao aumento do número de páginas no arquivo WAL, que excede o número de páginas existentes no momento do primeiro ponto de verificação da etapa 1.
      6. Mais tarde, quando um terceiro ponto de verificação ocorre, ele ignora toda ou parte da transação registrada na etapa 3. Assim, partes da transação da etapa 3 não entram no arquivo do banco de dados, resultando em corrupção do arquivo do banco de dados.
    • O erro provavelmente está presente em todas as versões do SQLite, começando pela 3.7.0 (21.07.2010) e indo até a 3.51.2. Também foram lançadas correções para algumas versões anteriores: 3.44.6 e 3.50.7.
  • Outras correções menores.

Fonte: linux.org.ru

Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS 🔥 Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS | ProHoster