رفتن به محتوای اصلی
بازگشت به وبلاگ

داده و اتصال فنی

COMMIT شد؛ چرا کپیِ فایل SQLite هنوز پشتیبانِ کامل نیست؟

در fixture تازهٔ WAL،کپیِ فایلِ اصلی و backup API را بازخوانی کنید؛ردیفِ ثبت‌شده و ثبت‌نشده با integrity_check و انتظارِ مستقل تفکیک می‌شوند.

درSQLiteبا حالتِWAL،COMMITمی‌تواند تغییر را در فایلِWALثبت کند،درحالی‌که فایلِ اصلی هنوز نسخهٔ پیشین را دارد. بنابراین کپیِ تنهافایلِdbدرآنلحظه لزوماً پشتیبانِ همهٔ تغییرهای ثبت‌شده نیست. درتمرینِ این صفحه،کپیِ خام فقط ردیفِ اول را دارد؛پشتیبانِAPIپس از بازخوانیِ مستقل،ردیفِ ثبت‌شدهٔ دوم را هم دارد و ردیفِ ثبت‌نشده را ندارد.

سه مفهوم را جدا نگه داریم

COMMITمرزِ تراکنشِ ثبت‌شده است. checkpointتغییرهایِWALرا بهفایلِ اصلی منتقل می‌کند. backupهم باید تصویرِ سازگاری برای بازیابی بسازد. این سه واژه یک رویداد نیستند؛پیامِ موفقِ ثبت،به‌تنهایی کیفیتِ نسخهٔ پشتیبانِ خارج از آن مسیر را ثابت نمی‌کند.

منبعِ رسمیِSQLiteتصریح می‌کند کهWALبخشی از وضعیتِ پایدارِ پایگاه است و جداکردنِ بی‌قاعدهٔ آن می‌تواند تغییرهای ثبت‌شده را از دست بدهد. این نوشته دستورِ حذفِWALیااصلاحِ پایگاهِ درحالِکار نیست؛همهٔ فایل‌هایِ آزمون را نویسنده درپوشهٔ تازه می‌سازد و هیچ مسیرِ پایگاهِ موجودی از کاربر نمی‌گیرد.

خطِ پایه را عمداً مشخص کنیم

کد باPython۳٫۱۲٫۱۴وSQLite۳٫۵۳٫۱اجرا شده است. یک جدولِitemورکوردِ۱با مقدارِbaselineمی‌سازد. journal_mode=WALواقعاً خوانده وwalبودنش کنترل می‌شود؛wal_autocheckpointدرهمینfixtureصفر است. سپسcheckpointِTRUNCATEخطِ پایه را با نتیجهٔ۰،۰،۰ثبت می‌کند.

این تنظیم‌ها برای قابل‌دیدن‌بودنِ آزمایش‌اند،نه توصیهٔ خاموش‌کردنِ checkpointدرسامانهٔ اصلی. پس از خطِ پایه،ردیفِ۲با مقدارِcommitted-walدر یکBEGIN/COMMITثبت می‌شود؛بعد ردیفِ۳با مقدارِnot-committedدرتراکنشیِ باز قرار می‌گیرد. تا لحظهٔ مشاهده،اتصال‌ها باز وWALدارای محتواست.

هر اتصال چه چیزی می‌بیند؟

محلِ مشاهدهٔ واقعیشناسه‌های دیده‌شدهمعنی درهمینfixture
اتصالِ نویسنده با تراکنشِ باز۱،۲،۳تغییرِ ثبت‌نشدهٔ خودش را هم می‌بیند
خوانندهٔ مستقل۱،۲تغییرِ ثبت‌شده حاضر است
کپیِ فقطِ فایلِ اصلی۱تغییرِWALدرآن کپی نیست
پشتیبانِAPIبا اتصالِ تازه۱،۲ثبت‌شده حاضر،ثبت‌نشده غایب

کپیِ خام دراینآزمون خراب یا بازنشدنی نبود؛قدیمی و ناقص نسبت بهثبتِ دوم بود. ازاینشاهد نتیجه نمی‌گیریم هرکپیِفایلِSQLiteهمیشه خراب است. مسئله،زمانِ مشاهده و اجزای وضعیتِ واقعی است؛همان جدول برای ادعایِ مشخصِ اینتمرین معیار می‌شود.

backupاز خوانندهٔ جدا

روشِbackupروی اتصالِ خواننده وبهیک مقصدِ تازه اجرا می‌شود؛رویهماناتصالِ دارایِ writeباز تکرار نمی‌شود. کد صفحات را یک‌به‌یک کپی می‌کند وprogresscallbackبا سقفِ۱۰۰فراخوانی وسه‌ثانیه،توقفِ نامحدودِتمرین را محدود می‌کند. هیچ بارِتولیدی یا نویسندهٔ موازیِ واقعی راه نیفتاده است.

پس از پایان،اتصالِمقصد بسته وبااتصالِ تازه باز می‌شود. تنهاوجودِ فایل کافی نیست:ردیف‌ها باانتظارِ مستقل،متنِschemaوPRAGMA integrity_checkکنترل می‌شوند. نتیجهٔ integrityبرابرِokاست؛ردیفِ۲حاضر وردیفِ۳غایب است. سپس تراکنشِ بازِمبدأrollbackمی‌شود.

قابلیتِ بازیابی را با حدودش گزارش کنیم

این نتیجه مربوط بههمانلحظهٔ ثابت و سه‌ردیفِ اصیل است. قطعِ برق،خرابیِ دیسک،سامانهٔ فایلِ شبکه،رمزنگاری،فشارِهم‌زمان یا بازیابیِ خراب‌شدگی آزمایش نشده‌اند. integrity_checkهم جایِ بررسیِ درست‌بودنِ معنایِ اطلاعات و همهٔ قواعدِ برنامه را نمی‌گیرد.

هر اجرا پوشهٔ کوچکِ تازه‌ای کنارِ اسکریپت با نامِتصادفی می‌سازد؛فقط فایل‌هایِ تولیدشدهٔ همانپوشه را باز می‌کند وآنfixtureبرایبررسی باقی می‌ماند. کد هرگزDBِسایت،CRM،فایلِمشتری یامسیرِ ورودی را باز نمی‌کند. سازوکارِ خودِSQLiteپس ازبستنِاتصال‌ها ممکن استcheckpointوپاک‌سازیِجانبیِ همانfixtureرا انجام دهد؛WALمبدأ درحینآزمون دستی جابه‌جا یاحذف نشده است.

این پشتیبان،تمامِ برنامه نیست

پشتیبانِ مدل و تنظیمات وزن،توکنایزر ووابستگیِ اجرا را دنبال می‌کند؛این صفحه فقط وضعیتِیکپایگاه را بازیابی می‌کند. فایل‌هایِبرنامه،اسناد،تنظیمات،مجوزهای‌دسترسی ورازها باهمینمثال خودکارپوشش داده نمی‌شوند. SAVEPOINTهم دامنهٔrollbackاست،نهروشِپشتیبانِدیسک.

برای بررسیِ اتصالِداده در راهکارهای اپرا،مالکِپایگاه،زمانِتصویرِموردنظر ومعیارِبازیابی را روشن کنید. این راهنما استفادهٔاپراازSQLiteیاارائهٔخدمتِپشتیبان‌گیری رااعلام نمی‌کند؛خروجی‌اش یکشاهدِقابلِتکرار ازتفاوتِثبت،checkpointوbackupاست.

فایل تمرین و منبع

کدِ کاملِ محلیِ تمرین و کنترل‌هایش · دادهٔ اصیل و نتیجهٔ اجرای واقعی؛ نویسه‌های کنترلی escape شده‌اند

منابع در 2026-11-04 خوانده شدند؛ این تاریخ، تاریخ انتشار منبع نیست. مثال‌ها و فایل‌های این راهنما آموزشی و ساختهٔ تحریریه‌اند.

برای این نیاز، کدام خدمت مناسب‌تر است؟

تماس و منشی، چت سایت و تحلیل مکالمه سه مسیر متفاوت‌اند. ابتدا خدمت متناسب نیازتان را انتخاب کنید.

انتخاب میان سه خدمتراهنمای شروع با تیم اپرا

برآورد هزینه