SQLite 3.51.3 sa ispravkom mogućeg oštećenja baze podataka u WAL režimu

SQLite 3.51.3 sa ispravkom mogućeg oštećenja baze podataka u WAL režimu

13. marca je izdan korektivni ispravak 3.51.3 kompaktne ugrađene DBMS. SQLite. Kod projekta je napisan u C jeziku i distribuira se kao javna domena (public domain).

Zbog problema sa unazadnom kompatibilnošću povezanih s nekim novim funkcijama, verzija 3.52.0 (izdata 6. marta) je povučena.

Spisak izmena verzije 3.51.3:

  • 3. marta jedan od razvijača SQLite (Dan) je otkrio i ispravio grešku koja je u retkim slučajevima mogla dovesti do oštećenja baze podataka i nazvana je «WAL-reset bug»:
    • Ova greška se javlja samo u bazama podataka koje rade u WAL režimu, ako je na istom fajlu otvoreno dvoje ili više konekcija u različitim nitima ili procesima, i ako te dve konekcije pokušavaju istovremeno da izvrše zapis ili kreiraju kontrolnu tačku.
    • Greška je povezana sa sukobom pristupa podacima pod strogim vremenskim ograničenjima. U uobičajenim uslovima rada se javlja veoma retko. Razvijačima nije uspelo da reprodukuju ovu grešku u prirodnim uslovima, tako da su morali da dodaju posebnu logiku testiranja u SQLite, koja namerno stvara uslove za pojavu greške kako bi osigurali da je problem rešen.
    • Greška se javlja kada:
      1. Jedna konekcija vrši proveru kontrolne tačke. Ova prva provera mora biti završena. Drugim rečima, tokom provere je potrebno uspešno kopirati sav sadržaj fajla WAL nazad u bazu podataka i dovesti fajl WAL u stanje u kojem se može resetovati.
      2. Odmah nakon završetka prve kontrolne tačke pokreće se druga.
      3. Dok se pokreće druga kontrolna tačka iz koraka 2, druga konekcija na bazu podataka evidentira transakciju koja resetuje fajl WAL i upisuje novi sadržaj na početak fajla WAL.
      4. Zbog sukoba pristupa podacima druga kontrolna tačka iz koraka 2 ne uzima u obzir da je fajl WAL resetovan kao rezultat evidentiranja transakcije u koraku 3. Druga kontrolna tačka postavlja pogrešnu vrednost za jedno od polja u zaglavlju indeksa WAL. Ovo polje označava da je deo fajla WAL već zabeležen u kontrolnoj tački, iako to zapravo nije tačno.
      5. Fiksacija dodatnih transakcij vodi do povećanja broja stranica u WAL datoteci, koje premašuju broj stranica koje su postojale u trenutku prve kontrolne tačke iz koraka 1.
      6. Kasnije, kada se dogodi treća kontrolna tačka, ona propušta celu ili deo transakcije zabeležene u koraku 3. Tako, delovi transakcije iz koraka 3 nikada ne završe u datoteci baze podataka, što dovodi do oštećenja datoteke baze podataka.
    • Greška je verovatno prisutna u svim verzijama SQLite-a, počevši od 3.7.0 (21.07.2010) do 3.51.2. Takođe su objavljena ispravka za neke ranije verzije: 3.44.6 in 3.50.7.
  • Ostale manje ispravke.

Izvor: linux.org.ru

Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki 🔥 Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki | ProHoster