Bài viết được sự cho phép của tác giả Lê Hồng Kỳ
Sao lưu và phục hồi dữ liệu trong sql server là một trong những thao tác quan trọng mà người quản trị cơ sở dữ liệu phải thực hiện.
Nếu như thao tác sao lưu (Backup database) được thực hiện để lưu dữ liệu và được thực hiện thường xuyên thì thao tác phục hồi dữ liệu (Restore database) chỉ được thực hiện khi nào máy chủ bị sự cố như hư ổ cứng hoặc dữ liệu bị mất do người dùng vô tình hoặc cố ý xoá,…
Ngoài ra thao tác phục hổi dữ liệu cũng được thực hiện để sao chép database từ máy chủ này sang máy chủ khác.
Sao lưu và phục hồi dữ liệu trong sql server – Các loại sao lưu dữ liệu
Loại 1: Full backup
Loại backup này sẽ backup dữ liệu đầy đủ nhất, vì vậy máy chủ sẽ mất nhiều thời gian để thực hiện nếu database lớn
Cú pháp
backup database Tên_Cơ_Sở_Dữ_Liệu to disk = 'Đường_dẫnTên_file.bak'
Ví dụ câu lệnh full backup cơ sở dữ liệu QuanLyBanHang và lưu vào “d:bk” (Lưu ý chúng ta phải tạo thư mục bk trong ổ đĩa D trước khi thực thi câu lệnh sau)
backup database QuanLyBanHang to disk = 'd:bkQLBH.bak'
Thực hiện full backup bằng giao diện
Chọn full backup, tên tập tin
Loại 2: Different backup
Backup những dữ liệu phát sinh tính từ lần backup full gần nhất. Như vậy trước khi chúng ta thực hiện different backup thì full backup phải được thực hiện trước. Chính vì vậy, khi chúng ta sử dụng loại backup này sẽ tiết kiệm được thời gian backup dữ liệu.
Cú pháp
backup database Tên_Cơ_Sở_Dữ_Liệu to disk = 'Đường_dẫnTên_File.bak' with differential
Ví dụ
backup database QuanLyBanHang to disk = 'D:sqlQLBH_Diff.bak' with differential
Thực hiện different backup bằng giao diện
Loại 3: Log backup
Backup dữ liệu sử dụng tập tin log và log backup được sử dụng để backup dữ liệu tại thời điểm cụ thể ví dụ như mỗi giờ trong ngày.
Cú pháp
backup log Tên_Cơ_Sở_Dữ_Liệu to disk = 'Đường_dẫnTên_File.trn'
Ví dụ
backup log QuanLyBanHang to disk = 'D:sqlQLBH.trn'
Thực hiện log backup bằng giao diện
Sao lưu và phục hồi dữ liệu trong sql server – Kịch bản backup
Kịch bản backup này được thực hiên trên cơ sở dữ liệu QuanLyBanHang
- Thực hiện full backup vào lúc 3h sáng ngày chủ nhật (1 lần trong ngày)
- Thực hiện different backup vào lúc 2h sáng ngày thứ 4 (1 lần trong ngày)
- Thực hiện log backup vào các thời điểm như 2h10′, 2h20′, 2h40′ và 2h50′ (4 lần trong một ngày sau thời điểm different backup)
Giả sử máy chủ bị hư ổ cứng vào lúc 2h55′ ngày thứ 4. Hỏi kịch bản phục hồi và tình trạng dữ liệu sau khi khôi phục? Câu trả lời ở ngay bên dưới
Đầu tiên chúng ta sẽ thực hiện khôi phục dữ liệu về thời điểm 3h sáng ngày chủ nhật bằng cách sử dụng bản full backup. Tiếp theo chúng ta sẽ khôi phục dữ liệu về thời điểm 2h sáng thứ 4 sử dụng bản different backup.
Cuối cùng sử dụng bản log backup ở thời điểm 2h50′ của ngày thứ 4 để đưa dữ liệu về thời điểm 2h50′.
Như vậy dữ liệu chỉ được khôi phục trở lại ở thời điểm 2h50′ ngày thứ 4 và chúng ta sẽ bị mất dữ liệu từ 2h51′ trở về sau.
Sao lưu và phục hồi dữ liệu trong sql server – Phục hồi dữ liệu
Phục hồi dữ liệu từ bản full và different backup
restore database Tên_Cơ_Sở_Dữ_Liệu from disk = 'Đường dẫnTên_File.bak' [With NoRecovery]
Phục hồi dữ liệu từ bản log backup
restore log Tên_Cơ_Sở_Dữ_Liệu from disk = 'Đường dẫnTên_File.trn' [With NoRecovery]
Lưu ý:
- Để có thể thực hiện khôi phục dữ liệu từ nhiều bản backup, chúng ta phải chỉ định With NoRecovery ở các câu lệnh restore ngoài trừ câu lệnh restore cuối cùng.
- Ngoài ra chúng ta có thể xem dữ liệu được khôi phục sau mỗi lần thực thi câu lệnh restore bằng cách sử dụng With Standby thay cho With NoRecovery.
Sao lưu và phục hồi dữ liệu trong sql server – Ví dụ mẫu
Sao lưu dữ liệu của cơ sở dữ liệu QuanLyBanHang
Thực hiện full backup
backup database QuanLyBanHang to disk = 'd:bkQLBH.bak'
Thêm dữ liệu cho bảng VATTU
Insert into VATTU values ('vt01', N'Máy lạnh Panasonic', N'Cái', 100)
Thực hiện different backup
backup database QuanLyBanHang to disk = 'D:bkQLBH_Diff.bak' with differential
Tiếp tục thêm dữ liệu cho bảng VATTU
Insert into VATTU values ('vt02', N'Tủ lạnh Panasonic', N'Cái', 100)
Thực hiện log backup
backup log QuanLyBanHang to disk = 'D:bkQLBH.trn'
Phục hồi dữ liệu cho cơ sở dữ liệu QuanLyBanHang
Giả lập máy chủ bị hư ổ cứng bằng cách xoá cơ sở dữ liệu QuanLyBanHang, sau đó tiến hành khôi phục dữ liệu. Chú ý câu lệnh restore cuối cùng không có With NoRecovery
--Khôi dữ liệu từ full backup restore database QuanLyBanHang from disk = 'D:bkQLBH.bak' With NoRecovery --Khôi phục dữ liệu từ different backup restore database QuanLyBanHang from disk = 'D:bkQLBH_Diff.bak' With NoRecovery --Khôi phục dữ liệu từ log backup restore log QuanLyBanHang from disk = 'D:bkQLBH.trn'
Bài viết gốc được đăng tải tại giasutinhoc.vn
Xem thêm:
- MySQL so găng MariaDB, điểm khác biệt chính, ưu và nhược điểm
- Cách sử dụng Transaction trong SQL hiệu quả
- Database developer là gì? Kỹ năng cần có của Database Developers
Xem thêm tuyển dụng các vị trí IT hấp dẫn trên TopDev