SQLite 3.51.3 s opravou možné chyba poškození databáze v režimu WAL.

SQLite 3.51.3 s opravou možné chyba poškození databáze v režimu WAL.

Dne 13. března došlo k aktualizaci 3.51.3 kompaktní integrované DBMS. SQLite. Kód projektu je napsán v jazyce C a je šířen jako veřejné vlastnictví (public domain).

Ve spojení s problémy zpětné kompatibility, souvisejícími s některými novými funkcemi, verze 3.52.0 (uvolněná 6. března) byla stažena.

Seznam změn verze 3.51.3:

  • Dne 3. března jeden z vývojářů SQLite (Dan) objevil a opravil chybu, která v ojedinělých případech mohla vést k poškození databáze a nazvaná "WAL-reset bug":
    • Tato chyba se vyskytuje pouze v databázích pracujících v režimu WAL, pokud je ke stejnému souboru otevřeno více než jedno připojení v různých vláknech nebo procesech, a pokud se tato dvě připojení pokoušejí provést zápis nebo vytvořit kontrolní bod současně.
    • Chyba je spojena s konfliktem přístupu k datům při přísných časových limitech. V běžných provozních podmínkách se vyskytuje velmi zřídka. Vývojářům se nepodařilo tuto chybu reprodukovat v přirozených podmínkách, a museli do SQLite přidat speciální testovací logiku, která záměrně vytváří podmínky pro vznik chyby, aby se ujistili, že problém je vyřešen.
    • Chyba vzniká, když:
      1. Jedno připojení provádí kontrolu kontrolního bodu. Tato první kontrola musí být dokončena. Jinými slovy, během této kontroly je nutné úspěšně zkopírovat celý obsah souboru WAL zpět do databáze a uvést soubor WAL do stavu, ve kterém může být resetován.
      2. Okamžitě po dokončení práce prvního kontrolního bodu začíná druhý.
      3. Zatímco se iniciuje druhý kontrolní bod z kroku 2, jiné připojení k databázi zapisuje transakci, která resetuje soubor WAL a zapisuje nový obsah na začátek souboru WAL.
      4. V důsledku konfliktu přístupu k datům druhý kontrolní bod z kroku 2 nevnímá, že soubor WAL byl resetován v důsledku potvrzení transakce v kroku 3. Druhý kontrolní bod nastavuje nesprávnou hodnotu pro jedno z polí v hlavičce WAL indexu. Toto pole naznačuje, že část souboru WAL byla již potvrzena v kontrolním bodu, i když ve skutečnosti tomu tak není.
      5. Potvrzení dalších transakcí vede k zvýšení počtu stránek v souboru WAL, který přesahuje počet stránek, jenž existoval v okamžiku prvního kontrolního bodu z kroku 1.
      6. Později, když se objeví třetí kontrolní bod, přeskočí celou nebo část transakce záznamu na etapě 3. Tím pádem části transakce z etapy 3 nikdy nebudou vloženy do databázového souboru, což způsobí jeho poškození.
    • Chyba pravděpodobně existuje ve všech verzích SQLite, počínaje 3.7.0 (21.07.2010) až po 3.51.2. Byly také vydány opravy pro některé starší verze: 3.44.6 a 3.50.7.
  • Další drobná vylepšení.

Zdroj: linux.org.ru

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster