SQLite documentation में संस्करण 3.7 में प्रस्तुत लिखने-आगे-लॉग सुविधा पर, कुछ टिप्पणियां हैं जो मुझे थोड़ा उलझन में डालती हैं।बिजली विफलताओं पर SQLite WAL कितना सुरक्षित है?
लिंक किए गए पृष्ठ का कहना है कि "डिस्क पर सामग्री को समन्वयित करने की आवश्यकता नहीं है, जब तक कि एप्लिकेशन बिजली के नुकसान के बाद स्थायित्व बलिदान के लिए तैयार हो।" फिर कुछ अनुच्छेद नीचे दिए गए हैं, यह कहता है "पावर लॉस या हार्ड रीबूट के बाद डेटाबेस भ्रष्टाचार की संभावना से बचने के लिए चेकपॉइंटिंग को सिंक ऑपरेशंस की आवश्यकता होती है।"
तो मेरा डेटाबेस बिजली के नुकसान पर भ्रष्टाचार के अधिक जोखिम पर है अगर मैं वाल का उपयोग करें?
मुझे पता है कि यह उत्तर पुराना है, लेकिन इसमें इसकी एक महत्वपूर्ण त्रुटि है। अंतिम चेकपॉइंट के बाद से आप लेनदेन नहीं खोलेंगे, आप लेनदेन खो देंगे जो अभी तक डब्ल्यूएएल को पूरी तरह से लिखे गए नहीं हैं। यदि तुल्यकालिक = सामान्य, यह WAL पर लेनदेन लिखते समय fsync() की प्रतीक्षा नहीं करता है, तो यदि आप पूरी तरह लिखे जाने से पहले पावर खो देते हैं तो आप उस लेनदेन को खो सकते हैं। एक बार यह वाल में हो जाने पर, चेकपॉइंटिंग के बावजूद, यह खो नहीं जाएगा। –
2016-02-17 तक https://www.sqlite.org/docsrc/info/3540d671bcc4835c SQLite प्रलेखन ने कहा कि WAL मोड में डिफ़ॉल्ट रूप से सिंक्रोनस = सामान्य ... यह अब सिंक्रोनस = पूर्ण - अधिक सुरक्षित डिफ़ॉल्ट कहता है। इसलिए, यदि आप सिंक्रोनस = सामान्य मोड सेट करते हैं तो आप केवल चेकपॉइंट से पहले लेनदेन खो देंगे –