خانه/ وبلاگ/ Full، Differential و Log Backup
پشتیبان‌گیری

تفاوت Full، Differential و Transaction Log Backup

Backup و Restore ۲ شهریور ۱۴۰۴ ۱۰ دقیقه مطالعه

SQL Server سه نوع اصلی Backup دارد که هرکدام هدف متفاوتی دارند. یک استراتژی خوب معمولاً هر سه را با هم ترکیب می‌کند، نه فقط یکی از آن‌ها.

Full Backup

یک نسخه‌ی کامل از کل پایگاه‌داده در لحظه‌ی گرفتن Backup. این نوع، پایه و اساس هر استراتژی بازیابی است — هر Restore ای با یک Full Backup شروع می‌شود.

sql
BACKUP DATABASE ShopDB
TO DISK = N'D:\Backups\ShopDB_full.bak'
WITH INIT, COMPRESSION;

Differential Backup

فقط تغییرات نسبت به آخرین Full Backup را ذخیره می‌کند (نه نسبت به آخرین Differential). چون معمولاً حجمش خیلی کمتر از Full است، سریع‌تر گرفته می‌شود و فضای کمتری اشغال می‌کند.

sql
BACKUP DATABASE ShopDB
TO DISK = N'D:\Backups\ShopDB_diff.bak'
WITH DIFFERENTIAL, COMPRESSION;

Transaction Log Backup

فقط قابل استفاده روی Recovery Model های FULL یا BULK_LOGGED است. تمام تراکنش‌های ثبت‌شده از آخرین Log Backup را ذخیره می‌کند و به‌طور همزمان، Log را Truncate می‌کند (توضیح کامل در این راهنما). این تنها روشی است که امکان بازیابی تا لحظه‌ی دقیق (Point-in-Time Recovery) را فراهم می‌کند.

sql
BACKUP LOG ShopDB
TO DISK = N'D:\Backups\ShopDB_log.trn';

مقایسه‌ی سریع

نوع Backupچه چیزی ذخیره می‌کندحجمسرعت Restore
Fullکل پایگاه‌دادهزیادپایه‌ی همیشه لازم
Differentialتغییرات از آخرین Fullمتوسطسریع‌تر از Log های زیاد
Transaction Logهمه‌ی تراکنش‌ها از آخرین Log Backupکم (ولی تعداد زیاد)امکان Point-in-Time Recovery

یک استراتژی رایج و عملی

یک الگوی متداول برای سیستم‌های Production: Full Backup هفتگی + Differential Backup روزانه + Transaction Log Backup هر ۱۵ تا ۳۰ دقیقه. این ترکیب، هم فضای ذخیره‌سازی را معقول نگه می‌دارد و هم امکان بازگشت تا نزدیک‌ترین لحظه به خرابی را می‌دهد.

ترتیب Restore کردن

برای بازگرداندن کامل پایگاه‌داده، باید Backup ها را به همان ترتیبی که گرفته شده‌اند Restore کنی:

sql
-- ۱. بازگرداندن آخرین Full Backup (بدون بازکردن پایگاه‌داده هنوز)
RESTORE DATABASE ShopDB
FROM DISK = N'D:\Backups\ShopDB_full.bak'
WITH NORECOVERY;

-- ۲. بازگرداندن آخرین Differential Backup
RESTORE DATABASE ShopDB
FROM DISK = N'D:\Backups\ShopDB_diff.bak'
WITH NORECOVERY;

-- ۳. بازگرداندن Log Backup ها به‌ترتیب، تا لحظه‌ی موردنظر
RESTORE LOG ShopDB
FROM DISK = N'D:\Backups\ShopDB_log.trn'
WITH RECOVERY;

برای جزئیات بیشتر و رفع خطاهای رایج این فرآیند، راهنمای رفع خطاهای رایج هنگام Restore کردن Database را ببین.

جمع‌بندی

  • Full Backup پایه‌ی هر استراتژی است.
  • Differential حجم کمتری دارد و روی آخرین Full ساخته می‌شود.
  • Transaction Log Backup تنها راه Point-in-Time Recovery است و Log را هم Truncate می‌کند.
  • ترتیب Restore باید دقیقاً مطابق ترتیب گرفتن Backup ها باشد.

می‌خوای مفاهیم تراکنش و بازیابی را کامل یاد بگیری؟

دوره‌ی رایگان SQLFarsi را با درس تراکنش‌ها ادامه بده.

ادامه‌ی یادگیری