بسیاری از نرمافزارهای مالی، انبار، حقوق و دستمزد و اتوماسیون اداری از SQL Server استفاده میکنند. بکاپ گرفتن از کل ماشین مجازی لازم است، اما برای دیتابیس کافی نیست؛ اگر بخواهید اطلاعات را تا یک ساعت پیش برگردانید یا فقط یک دیتابیس را روی سرور دیگری بازیابی کنید، به بکاپ خود SQL Server نیاز دارید.
سه نوع بکاپ
- Full: نسخه کامل دیتابیس در لحظه بکاپ و پایه همه بازیابیها.
- Differential: فقط تغییرات از آخرین بکاپ Full. هر Differential تا Full بعدی بزرگتر میشود و برای بازیابی فقط Full و آخرین Differential لازم است.
- Transaction Log: تراکنشهای ثبتشده از آخرین بکاپ Log. با این نوع میتوانید دیتابیس را تا یک لحظه مشخص، مثلاً چند دقیقه قبل از حذف اشتباهی اطلاعات، برگردانید.
مدل بازیابی (Recovery Model) را بشناسید
هر دیتابیس یک مدل بازیابی دارد که تعیین میکند بکاپ Log ممکن است یا نه:
- Simple: فضای Log خودکار آزاد میشود و بکاپ Log ندارید. بازیابی فقط تا زمان آخرین Full یا Differential ممکن است.
- Full: تراکنشها در Log میمانند تا از آنها بکاپ گرفته شود و بازیابی تا یک لحظه مشخص ممکن است.
- Bulk-logged: شبیه Full است، اما برخی عملیات حجیم با ثبت حداقلی انجام میشوند؛ برای کاربردهای خاص.
اگر دیتابیس در مدل Full باشد و بکاپ Log گرفته نشود، فایل Log مدام بزرگ میشود تا دیسک پر شود. این یکی از دلایل رایج از کار افتادن ناگهانی نرمافزارهای مالی است.
یک طرح عملی
طرح مناسب به RPO هر دیتابیس بستگی دارد. برای دیتابیس اصلی یک شرکت متوسط، این زمانبندی نقطه شروع خوبی است:
- مدل بازیابی را روی Full بگذارید.
- بکاپ Full شبانه یا هفتگی، بسته به حجم دیتابیس.
- بکاپ Differential شبانه در روزهایی که Full گرفته نمیشود.
- بکاپ Log در ساعات کاری هر ۱۵ تا ۶۰ دقیقه، بسته به اینکه چه مقدار از دست رفتن داده قابل تحمل است.
- انتقال خودکار فایلهای بکاپ به ذخیرهساز دیگری بیرون از سرور دیتابیس.
برای دیتابیسهای کماهمیتتر، مدل Simple با Full شبانه کافی است. نمونه دستورها:
BACKUP DATABASE [FinanceDB] TO DISK = N'E:BackupFinanceDB_full.bak' WITH CHECKSUM, COMPRESSIONBACKUP DATABASE [FinanceDB] TO DISK = N'E:BackupFinanceDB_diff.bak' WITH DIFFERENTIAL, CHECKSUMBACKUP LOG [FinanceDB] TO DISK = N'E:BackupFinanceDB_log.trn' WITH CHECKSUM
در عمل نام فایلها را با تاریخ و ساعت بسازید تا هر بکاپ فایل جداگانه داشته باشد. فشردهسازی بکاپ در همه نسخهها پشتیبانی نمیشود؛ مثلاً در نسخه Express این گزینه را حذف کنید. در نسخههای دارای SQL Server Agent زمانبندی را با Maintenance Plan یا Job انجام دهید؛ در Express که Agent ندارد، میتوان sqlcmd را با Task Scheduler ویندوز اجرا کرد.
ترتیب بازیابی
- اگر دیتابیس هنوز در دسترس است، ابتدا یک بکاپ Tail-Log بگیرید تا تراکنشهای آخر از دست نرود.
- آخرین Full را با گزینه
NORECOVERYبازیابی کنید. - آخرین Differential بعد از آن را هم با
NORECOVERYبازیابی کنید. - بکاپهای Log بعدی را به ترتیب بازیابی کنید و در آخرین مرحله از
RECOVERYیاSTOPATبرای توقف در لحظه دلخواه استفاده کنید.
اشتباههای رایج
- نگهداری فایلهای بکاپ فقط روی دیسک خود سرور دیتابیس.
- گرفتن بکاپ Full دستی و موردی بدون
COPY_ONLY؛ این کار پایه Differentialهای بعدی را عوض میکند و بازیابی را گیجکننده میکند. - اتکا به موفق بودن Job بدون اجرای
RESTORE VERIFYONLYو بازیابی آزمایشی واقعی. - فراموش کردن دیتابیسهای سیستمی مثل
masterوmsdbکه لاگینها و Jobها در آنها هستند.
چکلیست
- مدل بازیابی هر دیتابیس آگاهانه انتخاب شده است.
- در مدل Full، بکاپ Log منظم گرفته میشود و حجم Log پایش میشود.
- فایلهای بکاپ به بیرون از سرور منتقل میشوند.
- بکاپها با
CHECKSUMگرفته و دورهای روی سرور آزمایشی بازیابی میشوند. - از دیتابیسهای سیستمی هم بکاپ دارید.
بکاپ درست دیتابیس، فاصله میان «چند دقیقه دوبارهکاری» و «چند روز ورود مجدد اسناد» است. کارشناسان ITPlus724 میتوانند طرح بکاپ و بازیابی دیتابیسهای شما را بررسی و پیادهسازی کنند.