Am 13. MÀrz wurde eine Korrekturversion 3.51.3 der kompakten eingebetteten DBMS veröffentlicht. SQLite. Der Projektcode ist in C geschrieben und wird als Public Domain verbreitet.
Aufgrund von KompatibilitĂ€tsproblemen in Bezug auf einige neue Funktionen wurde die Version 3.52.0 (die am 6. MĂ€rz veröffentlicht wurde) zurĂŒckgezogen.
Ănderungsprotokoll fĂŒr Version 3.51.3:
- Am 3. MĂ€rz entdeckte und behob einer der SQLite-Entwickler (Dan) einen Fehler, der in seltenen FĂ€llen zur BeschĂ€digung der Datenbank fĂŒhren konnte und der als âWAL-reset bugâ:
- bezeichnet wird. Dieser Fehler tritt nur in Datenbanken auf, die im WAL-Modus arbeiten, wenn mehr als eine Verbindung zu derselben Datei in verschiedenen Threads oder Prozessen geöffnet ist und diese beiden Verbindungen versuchen, gleichzeitig zu schreiben oder einen Checkpoint zu erstellen.
- Der Fehler ist mit Konflikten beim Datenzugriff unter zeitlichen EinschrĂ€nkungen verbunden. Unter normalen Betriebsbedingungen tritt er Ă€uĂerst selten auf. Den Entwicklern gelang es nicht, diesen Fehler unter natĂŒrlichen Bedingungen zu reproduzieren, und sie mussten spezielle Testlogik in SQLite hinzufĂŒgen, die absichtlich Bedingungen schafft, um den Fehler zu provozieren, um sicherzustellen, dass das Problem behoben ist.
- Der Fehler tritt auf, wenn:
- Eine Verbindung einen Checkpoint ĂŒberprĂŒft. Diese erste PrĂŒfung muss abgeschlossen sein. Mit anderen Worten, wĂ€hrend der ĂberprĂŒfung muss der gesamte Inhalt der WAL-Datei erfolgreich zurĂŒck in die Datenbank kopiert werden und die WAL-Datei muss in einen Zustand versetzt werden, in dem sie zurĂŒckgesetzt werden kann.
- Sofort nach Abschluss der ersten PrĂŒfung wird die zweite gestartet.
- WĂ€hrend die zweite PrĂŒfung aus Schritt 2 gerade lĂ€uft, zeichnet eine andere Datenbankverbindung eine Transaktion auf, die die WAL-Datei zurĂŒcksetzt und neue Inhalte an den Anfang der WAL-Datei schreibt.
- Aufgrund des Konflikts beim Datenzugriff berĂŒcksichtigt die zweite PrĂŒfung aus Schritt 2 nicht, dass die WAL-Datei als Ergebnis der Transaktionsfixierung in Schritt 3 zurĂŒckgesetzt wurde. Die zweite PrĂŒfung setzt einen falschen Wert fĂŒr eines der Felder im Header der WAL-Datei. Dieses Feld weist darauf hin, dass ein Teil der WAL-Datei bereits in einem Checkpoint fixiert wurde, obwohl dies tatsĂ€chlich nicht der Fall ist.
- Die Festlegung zusĂ€tzlicher Transaktionen fĂŒhrt zu einer Zunahme der Seitenanzahl in der WAL-Datei, die die Anzahl der Seiten ĂŒbersteigt, die zum Zeitpunkt des ersten Checkpoints aus Schritt 1 existierten.
- SpĂ€ter, wenn ein dritter Kontrollpunkt auftritt, ĂŒberspringt er die gesamte oder einen Teil der Transaktion, die in Schritt 3 aufgezeichnet wurde. Somit gelangen Teile der Transaktion aus Schritt 3 nicht in die Datenbankdatei, was zu einer BeschĂ€digung der Datenbankdatei fĂŒhrt.
- Der Fehler ist wahrscheinlich in allen Versionen von SQLite vorhanden, beginnend mit 3.7.0 (21.07.2010) bis 3.51.2. Es wurden auch Korrekturen fĂŒr einige frĂŒhere Versionen veröffentlicht: 3.44.6 und 3.50.7.
- Weitere kleinere Korrekturen.
Quelle: linux.org.ru
