Mục đích của việc sao lưu và phục hồi dữ liệu
Sao lưu và phục hồi dữ liệu là vấn đề rất quan trọng khi quản trị cơ sở dữ liệu. Hoạt động này đảm bảo cho dữ liệu khi xảy ra sự cố, ta có thể khôi phục lại trạng thái của cơ sở dữ liệu trước khi xảy ra sự cố. Công việc này phải dựa vào có chế sao lưu (backup) và khôi phục (restore) của hệ cơ sở dữ liệu và để thực hiện tốt công việc này thì người quản trị cơ sở dữ liệu phải có kịch bản sao lưu và khôi phục cơ sở dữ liệu cho hệ thống một cách cẩn thận và chi tiết.
Các cơ chế sao lưu dữ liệu
SQL Server cung cấp 3 cơ chế sao lưu dữ liệu như sau:
+ Full Backup: là thực hiện backup toàn bộ dữ liệu tại thời điểm thực hiện thao tác backup.
+ Differential Backup: là thực hiện backup các dữ liệu mới được cập nhật kể từ lần thực hiện Full Backup trước đó.
+ Transaction Log Backup: là thực hiện backup các log record hiện có trong log file. Cơ chế sao lưu này sẽ sao lưu các hành động chứ không sao lưu dữ liệu. Đồng thời cơ chế nyaf cũng tiến hành ghi đè các log record đã được backup, còn được gọi là thao tác Log Truncation, nhờ vậy vùng nhớ các log file được giải phóng để ghi nhạn các log record mới. Transaction log backup chỉ sao các log record kể từ lần Transaction log backup trước đó. Khi thấy log file quá lớn, rất có khả năng là chúng ta chưa từng thực hiện Transaction log backup nào.
Kịch bản sao lưu dữ liệu
Cách để giảm thiểu mất mát dữu liệu khi gặp sự cố hệ thống là tăng tần suất backup dữ liệu. Tuy nhiên với một database có dung lượng lớn và được cập nhật liên tục, thì việc backup bằng Full Backup với một tần suất cao như vậy thì là một điều không khả thi, vì cơ chế này sẽ sử dụng rất nhiều tài nguyên hệ thống. Nhờ có Differential Backup và Transaction Log Backup, chúng ta có thể lập ra một phương án sao lưu dữ liệu thích hợp, dảm bảo dữ liệu được backup thường xuyên hơn mà không chiếm nhiều tài nguyên của hệ thống.
Ví dụ, một kịch bản sao lưu và phụ hồi dữ liệu tham khảo như sau:
+ Full backup: thực hiện một lần mỗi ngày vào 2h sáng.
+ Differential Backup: thực hiện vào các thời điểm 6h, 10h, 14h, 18h, 22h.
+ Transaction Log Backup: thực hiện 15p một lần vào các thời điểm 5p, 20p, 35p, 50p của mỗi giờ (4 lần/ giờ).
Giả sử Database bị hỏng vào thời điểm 10h55p, ta cần khôi phục database theo trình tự sau:
Bước 1: Khôi phục từ bản Full Backup gần thời điểm có sự cố xảy ra (bản backup lúc 2h sáng).
Bước 2: Khôi phục từ bản Differential Backup gần với thời điểm có sự cố xảy ra (bản backup lúc 10h).
Bước 3: Khôi phục tất cả Transaction Log Backup kể từ sau lần Differential Backup gần nhất, lần lượt theo trình tự thời gian. Đó là các bản tại các thời điểm 10h5p, 10h20p, 10h35, 10h50p.
Bước 1 và 2 sẽ giúp chúng ta khôi phục được database trở về thời điểm lúc 10h. Còn bước 3 sẽ giúp chúng ta khôi phục database vào thời điểm lúc 10h50, tuy nhiên các thay đổi diễn ra trong vòng 5p sao đó tức là dữ liệu 10h50p đến 10h55p sẽ bị mất.
Sao lưu dữ liệu
Cú pháp:
BACKUP DATABASE DATABASE_NAME
TO DISK = 'DUONG_DAN_FILE'
[WITH DIFFERENTIAL | THAM_SO];
Ví dụ 1: Hãy viết lệnh thực hiện công việc sao lưu toàn phần cơ sở dữ liệu tên là QLDEAN.
BACKUP DATABASE QLDEAN
TO DISK = 'D:\QLDEAN.BAK'
WITH NAME = 'QLDEAN BACKUP',
STATS = 10
Ví dụ 2: Hãy viết lệnh thực hiện sao lưu một phần cơ sở dữ liệu tên là QLDEAN
BACKUP DATABASE QLDEAN
TO DISK = 'D:\QLDEAN.BAK'
WITH DIFFERENTIAL, NAME = 'QLDEAN BACKUP',
STATS = 10
Phục hồi dữ liệu
Cú pháp:
RESTORE DATABASE NEW_DATABASE_NAME
FROM DISK = 'DUONG_DAN_FILE'
[WITH THAM_SO]
Ví dụ 1: Phục hồi từ tập tin sao lưu 'QLDEAN.BAK' thành database có tên là 'NEWQLDEAN' (chưa chấm dứt phục hồi).
RESTORE DATABASE NEWQLDEAN
FROM DISK = 'D:\QLDEAN.BAK'
WITH FILE = 1, NORECOVERY,
STATS = 10
Ví dụ 2: Phục hồi từ tập tin sao lưu 'QLDEAN.BAK' thành database có tên là 'NEWQLDEAN' (chấm dứt phục hồi).
RESTORE DATABASE NEWQLDEAN
FROM DISK = 'D:\QLDEAN.BAK'
WITH FILE = 1, RECOVERY,
STATS = 10