بازیابی سریع پایگاه داده SQL Server با Diff Backup: راهنمای کامل
هدف اصلی هر متخصص پایگاه داده و مسئول زیرساخت، حصول اطمینان از قابلیت دسترسی بالای دادهها و به حداقل رساندن زمان بازیابی پس از خرابی است. معیارهایی مانند RTO (Recovery Time Objective) و RPO (Recovery Point Objective) نقشی حیاتی در برنامهریزی استراتژیهای بازیابی پایگاه داده ایفا میکنند. Diff Backup یکی از ابزارهای قدرتمند برای کاهش چشمگیر زمان بازیابی و بهینهسازی فرآیند پشتیبانگیری است.
چالش بازیابی با پشتیبانگیری کامل
اگرچه پشتیبانگیری کامل (Full Backup) اساس هر برنامه پشتیبانگیری است، اما میتواند زمانبر باشد، به خصوص برای پایگاههای داده بزرگ. تصور کنید در یک سناریوی فاجعهبار، برای بازیابی باید آخرین پشتیبانگیری کامل را بازگردانید و سپس تمامی پشتیبانگیریهای لاگ تراکنش (Transaction Log Backup) را به ترتیب اعمال کنید تا به نقطه بازیابی مورد نظر (RPO) برسید. این فرآیند میتواند زمان زیادی ببرد و RTO شما را به شدت افزایش دهد.
Diff Backup: راهکاری برای کاهش زمان بازیابی
Diff Backup دقیقاً برای حل این مشکل طراحی شدهاند. یک Diff Backup، تنها تغییراتی را ثبت میکند که از زمان آخرین پشتیبانگیری کامل موفق روی پایگاه داده رخ دادهاند. این بدان معناست که به جای ذخیره کل پایگاه داده، فقط بلوکهای دادهای که تغییر کردهاند، ذخیره میشوند. این رویکرد به طور قابل توجهی اندازه فایل پشتیبانگیری را کاهش داده و زمان لازم برای ایجاد آن را نیز کمتر میکند.
هنگامی که نیاز به بازیابی دارید، فقط به دو فایل پشتیبان نیاز خواهید داشت: آخرین پشتیبانگیری کامل و آخرین Diff Backup. این کار تعداد پشتیبانگیریهای لاگ تراکنش را که باید اعمال شوند، به حداقل میرساند و در نتیجه زمان بازیابی را تسریع میبخشد.
نحوه عملکرد Diff Backup
زمانی که یک پشتیبانگیری کامل انجام میشود، تمام صفحات داده در پایگاه داده علامتگذاری میشوند و یک شماره توالی لاگ (LSN) پایگاه داده تنظیم میشود. هنگام تغییر یک صفحه داده، SQL Server این صفحه را به عنوان “تغییر یافته” علامتگذاری میکند. Diff Backup فقط این صفحات علامتگذاری شده را شامل میشود که LSN آنها از LSN آخرین پشتیبانگیری کامل بزرگتر است. به این ترتیب، به جای اسکن کل پایگاه داده برای تغییرات، SQL Server به سرعت صفحات تغییر یافته را شناسایی و پشتیبانگیری میکند.
مزایای کلیدی Diff Backup
- کاهش زمان بازیابی (RTO): با نیاز به بازگرداندن تنها یک پشتیبانگیری کامل و یک Diff Backup، زمان لازم برای بازگرداندن پایگاه داده به نقطه مورد نظر به طور چشمگیری کاهش مییابد.
- کاهش حجم فایل پشتیبان: فقط تغییرات ذخیره میشوند، بنابراین فایلهای Diff Backup بسیار کوچکتر از فایلهای کامل هستند.
- کاهش زمان پشتیبانگیری: به دلیل حجم کمتر، فرآیند ایجادDiff Backup سریعتر انجام میشود.
- انعطافپذیری: امکان برنامهریزی Diff Backupهای مکرر بین پشتیبانگیریهای کامل روزانه یا هفتگی برای حفظ RPO بهتر.
معایب احتمالی و ملاحظات
Diff Backup با گذشت زمان و افزایش تغییرات در پایگاه داده، بزرگتر میشوند. اگر فاصله بین پشتیبانگیریهای کامل خیلی زیاد باشد، Diff Backup ممکن است تقریباً به اندازه یک پشتیبانگیری کامل بزرگ شود که مزایای آن را کمرنگ میکند. بنابراین، برنامهریزی منظم برای پشتیبانگیریهای کامل ضروری است تا زنجیره Diff Backup را “بازنشانی” کند و آن را کوچک نگه دارد.
اجرای عملی Diff Backup در SQL Server
برای درک بهتر، بیایید یک سناریوی عملی را با استفاده از T-SQL دنبال کنیم.
۱. ایجاد یک پایگاه داده نمونه
ابتدا، یک پایگاه داده ساده برای آزمایش ایجاد میکنیم:
USE master;
GO
CREATE DATABASE [TestDB_Differential];
GO
ALTER DATABASE [TestDB_Differential] SET RECOVERY FULL;
GO
USE [TestDB_Differential];
GO
CREATE TABLE dbo.TestTable (
Id INT IDENTITY(1,1) PRIMARY KEY,
Data NVARCHAR(100)
);
GO
INSERT INTO dbo.TestTable (Data) VALUES ('Initial Data 1'), ('Initial Data 2');
GO
۲. انجام اولین پشتیبانگیری کامل
برای شروع زنجیره پشتیبانگیری، ابتدا یک پشتیبانگیری کامل از پایگاه داده میگیریم.
BACKUP DATABASE [TestDB_Differential]
TO DISK = N'C:\Backup\TestDB_Differential_FULL_1.bak'
WITH NOFORMAT, NOINIT,
NAME = N'TestDB_Differential-Full Database Backup',
SKIP, NOREWIND, NOUNLOAD, STATS = 10;
GO
۳. ایجاد تغییرات در پایگاه داده
حالا چند رکورد جدید اضافه میکنیم تا تغییراتی در پایگاه داده ایجاد شود.
USE [TestDB_Differential];
GO
INSERT INTO dbo.TestTable (Data) VALUES ('Change 1 after Full Backup');
INSERT INTO dbo.TestTable (Data) VALUES ('Change 2 after Full Backup');
GO
۴. انجام اولین Diff Backup
اکنون، یک Diff Backup میگیریم. این پشتیبانگیری فقط شامل دو رکورد جدیدی است که اضافه کردهایم.
BACKUP DATABASE [TestDB_Differential]
TO DISK = N'C:\Backup\TestDB_Differential_DIFF_1.bak'
WITH DIFFERENTIAL, NOFORMAT, NOINIT,
NAME = N'TestDB_Differential-Differential Database Backup 1',
SKIP, NOREWIND, NOUNLOAD, STATS = 10;
GO
۵. ایجاد تغییرات بیشتر
برای شبیهسازی بیشتر، چند تغییر دیگر ایجاد میکنیم.
USE [TestDB_Differential];
GO
INSERT INTO dbo.TestTable (Data) VALUES ('Change 3 after Diff Backup 1');
INSERT INTO dbo.TestTable (Data) VALUES ('Change 4 after Diff Backup 1');
GO
۶. انجام دومین Diff Backup
این Diff Backup نیز شامل تمام تغییرات از زمان آخرین پشتیبانگیری کامل است، یعنی هر چهار رکورد جدیدی که پس از پشتیبانگیری کامل اضافه کردهایم.
BACKUP DATABASE [TestDB_Differential]
TO DISK = N'C:\Backup\TestDB_Differential_DIFF_2.bak'
WITH DIFFERENTIAL, NOFORMAT, NOINIT,
NAME = N'TestDB_Differential-Differential Database Backup 2',
SKIP, NOREWIND, NOUNLOAD, STATS = 10;
GO
۷. بازیابی پایگاه داده با پشتیبانگیری کامل و Diff Backup
حالا فرض کنید پایگاه داده خراب شده است. برای بازیابی به آخرین وضعیت، مراحل زیر را دنبال میکنیم:
ابتدا پایگاه داده موجود را حذف میکنیم (فقط برای اهداف آزمایشی):
USE master;
GO
ALTER DATABASE [TestDB_Differential] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
GO
DROP DATABASE [TestDB_Differential];
GO
سپس، آخرین پشتیبانگیری کامل را بازگردانی میکنیم:
RESTORE DATABASE [TestDB_Differential]
FROM DISK = N'C:\Backup\TestDB_Differential_FULL_1.bak'
WITH NORECOVERY,
MOVE N'TestDB_Differential' TO N'C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\DATA\TestDB_Differential.mdf',
MOVE N'TestDB_Differential_log' TO N'C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\DATA\TestDB_Differential_log.ldf',
STATS = 10;
GO
بعد از آن، آخرین Diff Backup را اعمال میکنیم. این پشتیبانگیری شامل تمام تغییرات پس از Full Backup است و پایگاه داده را به آخرین نقطه بازیابی شده در زمان Diff Backup بازمیگرداند.
RESTORE DATABASE [TestDB_Differential]
FROM DISK = N'C:\Backup\TestDB_Differential_DIFF_2.bak'
WITH RECOVERY, STATS = 10;
GO
حالا میتوانیم محتوای جدول را بررسی کنیم تا مطمئن شویم تمام دادهها بازیابی شدهاند:
USE [TestDB_Differential];
GO
SELECT * FROM dbo.TestTable;
GO
شما باید هر 6 ردیف داده را ببینید: دو ردیف اولیه و چهار ردیف اضافه شده در طول مراحل آزمایشی.
درک LSN (Log Sequence Number) در Diff Backup
هر رویداد در لاگ تراکنش SQL Server با یک LSN منحصربهفرد مشخص میشود. Diff Backup به LSN آخرین پشتیبانگیری کامل مراجعه میکند. این LSN در هدر فایل Diff Backup ذخیره میشود و SQL Server از آن برای شناسایی نقاط شروع و پایان تغییرات استفاده میکند.
SELECT
bs.database_name,
bs.backup_type,
bs.backup_start_date,
bs.backup_finish_date,
bs.first_lsn,
bs.last_lsn,
bs.differential_base_lsn
FROM msdb.dbo.backupset bs
WHERE bs.database_name = 'TestDB_Differential'
ORDER BY bs.backup_start_date;
GO
در نتایج این کوئری، ستون `differential_base_lsn` برای Diff Backup، LSN پشتیبانگیری کامل پایه را نشان میدهد که از آن زمان تغییرات ثبت شدهاند. این ویژگی به SQL Server کمک میکند تا به درستی تغییرات را ردیابی و بازیابی کند.
بهترین روشها برای برنامهریزی Diff Backup
- چرخه پشتیبانگیری: یک چرخه منظم شامل پشتیبانگیریهای کامل (مثلاً هفتگی)، Diff Backup (مثلاً روزانه) و پشتیبانگیریهای لاگ تراکنش (مثلاً هر ۱۵ دقیقه یا بیشتر، بسته به RPO) ایجاد کنید.
- نظارت بر اندازه: اندازه Diff Backup را نظارت کنید. اگر آنها بیش از حد بزرگ میشوند، ممکن است لازم باشد فرکانس پشتیبانگیریهای کامل را افزایش دهید.
- محل ذخیرهسازی: پشتیبانگیریها را در مکانی امن و جدا از سرور اصلی پایگاه داده ذخیره کنید.
- تست بازیابی: به طور منظم فرآیند بازیابی را با استفاده از پشتیبانگیریهای کامل وDiff Backupخود آزمایش کنید. این کار به شما اطمینان میدهد که در صورت بروز فاجعه، میتوانید با موفقیت پایگاه داده خود را بازیابی کنید.
- بازیابی به زمان خاص (Point-in-Time Recovery): برای رسیدن به RPO دقیق، پس از اعمال پشتیبانگیری کامل و Diff Backup، نیاز به اعمال پشتیبانگیریهای لاگ تراکنش تا نقطه زمانی مورد نظر خواهید داشت.
نتیجهگیری
Diff Backupها ابزاری ضروری در استراتژی بازیابی پایگاه داده SQL Server هستند. با استفاده صحیح از آنها، میتوانید زمان بازیابی (RTO) را به حداقل برسانید و در عین حال، به حفظ RPO مورد نیاز سازمان کمک کنید. درک نحوه عملکرد آنها و ترکیب آنها با پشتیبانگیریهای کامل و لاگ تراکنش، کلید یک طرح جامع برای مدیریت پایگاه داده مؤثر است.