SQLite 3.51.3 hibákkal, amelyek a WAL módban adatbázis-károsodáshoz vezethetnek.

SQLite 3.51.3 hibákkal, amelyek a WAL módban adatbázis-károsodáshoz vezethetnek.

Március 13-án egy korrekciós kiadást tettünk közzé a 3.51.3-as kompakt beágyazott DBMS-ről. SQLite. A projekt kódja C nyelven íródott és közszabadságként (public domain) terjesztett.

A visszafelé kompatibilitással kapcsolatos problémák miatt, amelyek néhány új funkcióval álltak összefüggésben, a verzió 3.52.0 (március 6-án megjelent) visszavonásra került.

A 3.51.3 változásainak listája:

  • Március 3-án az SQLite egyik fejlesztője (Dan) felfedezett és kijavított egy hibát, amely ritka esetekben adatbázis sérüléshez vezethetett, és ezt nevezték "WAL-reset hibának":
    • Ez a hiba csak WAL módban működő adatbázisoknál fordul elő, ha ugyanahhoz a fájlhoz több kapcsolat nyitva van különböző szálakban vagy folyamatokban, és ha ezek a kapcsolatok egyszerre próbálnak írási műveletet végrehajtani, vagy ellenőrző pontot létrehozni.
    • A hiba az adatokhoz való hozzáférés ütközésével kapcsolatos szigorú időkorlátok mellett jön létre. Normál működési feltételek között nagyon ritkán fordul elő. A fejlesztőknek nem sikerült reprodukálniuk ezt a hibát természetes környezetben, és kényszerültünk olyan tesztelési logikát bevezetni az SQLite-ba, amely szándékosan létrehozza a hiba előfordulásához szükséges feltételeket, hogy megbizonyosodjunk arról, hogy a probléma megoldódott.
    • A hiba akkor lép fel, amikor:
      1. Egy kapcsolat ellenőrzi az ellenőrző pontot. Ezen első ellenőrzésnek be kell fejeződnie. Más szavakkal, az ellenőrzés során sikeresen le kell másolni a WAL fájl összes tartalmát az adatbázisba, és a WAL fájlt olyan állapotba kell hozni, amely lehetővé teszi az alaphelyzetbe állítást.
      2. Az első ellenőrző pont befejezése után a második ellenőrző pont azonnal elindul.
      3. Amíg a 2. lépésből a második ellenőrző pont elindul, egy másik adatbázis-kapcsolat tranzakciót rögzít, amely visszaállítja a WAL fájlt, és új tartalmat ír a WAL fájl elejére.
      4. Az adatokhoz való hozzáférés ütközése miatt a 2. lépésből származó második ellenőrző pont nem veszi figyelembe, hogy a WAL fájlt a 3. lépéssel történő tranzakció rögzítése miatt visszaállították. A második ellenőrző pont helytelen értéket állít be a WAL index fejlécének egyik mezőjében. Ez a mező azt jelzi, hogy a WAL fájl egy része már rögzítve lett az ellenőrző pontban, pedig valójában nem így van.
      5. További tranzakciók rögzítése a WAL fájl lapjainak számának növekedéséhez vezet, amely meghaladja az első ellenőrző pont időpontjában létező lapok számát az 1. lépésből.
      6. Később, amikor a harmadik ellenőrző pont megjelenik, az megkerüli az összes vagy egy részét a harmadik szakaszban rögzített tranzakciónak. Így a harmadik szakaszból származó tranzakciók egy része nem kerül a database fájlba, ami a database fájl sérüléséhez vezet.
    • A hiba valószínűleg minden SQLite verzióban megtalálható, kezdve a 3.7.0-tól (2010.07.21) egészen a 3.51.2-ig. Továbbá, a korábbi verziók egyes javításai is ki lettek adva: 3.44.6 és 3.50.7.
  • Más kisebb javítások.

Forrás: linux.org.ru

Megbízható hosting vásárlása weboldalak számára, DDoS védelemmel, VPS VDS szerverek. 🔥 Megbízható webtárhely vásárlása DDoS védelemmel, VPS VDS szerverek | ProHoster