Tail-Log Backup – Thao tác quan trọng trước khi phục hồi SQL Server

SQL ServerKhi database gặp sự cố, bạn dễ nhầm tưởng rằng thời điểm gần nhất có thể phục hồi là lần sao lưu Transaction Log gần nhất. Thực tế, bạn có thể làm tốt hơn vậy. Bạn hoàn toàn có thể phục hồi database trở về thời điểm ngay trước khi sự cố xảy ra, hoặc phục hồi về một thời điểm xác định ngay trước đó (Point-in-Time Recovery). Giải pháp là sử dụng bản sao lưu Tail-Log.

Tất nhiên, điều kiện đặt ra là database chỉ bị lỗi Data file (.MDF), còn Log file (.LDF) vẫn sử dụng được.

Một ví dụ

Bạn có database Accounting được sao lưu theo chính sách sau:

  • Sao lưu Full Database hàng tuần vào 18:00 ngày T7
  • Sao lưu Transaction Log hàng ngày vào 18:00 các ngày CN, T2, T3, T4, T5, T6

Một sự cố xảy ra với database Accounting này lúc 15:00 ngày T4. Với các bản sao lưu Full và Transaction Log đang có, bạn có thể phục hồi database trở về thời điểm 18:00 của ngày T3. Tuần tự phục hồi như sau: Full T7 > Log CN > Log T2 > Log T3.

Có thể phục hồi database trở về thời điểm 18:00 của ngày T3 đã là điều rất tốt. Tuy nhiên, bạn vẫn mất lượng dữ liệu phát sinh từ 18:00 của ngày T3 (thời điểm sao lưu Transaction Log gần nhất) cho đến 15:00 của ngày T4 (thời điểm sự cố xảy ra). Rõ ràng sẽ tốt hơn nếu bạn có thể phục hồi database trở về thời điểm 14:59 của ngày T4 (ngay trước khi sự cố xảy ra).

Nội dung bên dưới sẽ giúp bạn hiểu rõ làm sao để đạt được khả năng phục hồi như vậy với Tail-Log Backup.

Tail-Log là gì?

Tail-Log là phần Transaction Log phát sinh kể từ lần sao lưu Transaction Log gần nhất đến thời điểm hiện tại. Tức là phần Transaction Log đang có Log file và chưa được sao lưu. Điều này cũng có nghĩa mỗi lần bạn sao lưu Transaction Log chính là sao lưu Tail-Log.

Có nhiều tình huống lỗi xảy ra với Data file nhưng Log file vẫn còn sử dụng được, VD:

  • Lỗi logic do thao tác nhầm của DBA
  • Ổ đĩa chứa Data file bị hỏng nhưng Log file lưu ở ổ đĩa khác nên không ảnh hưởng

Với những tình huống này, trước khi tiến hành phục hồi database, bạn sao lưu Transaction Log đang có trong Log file (chính là sao lưu Tail-Log). Sau đó sử dụng bản sao lưu này cùng các bản sao lưu Full Database và Transaction Log trước đó để phục hồi database. Với bản sao lưu Tail-Log này, bạn có thể phục hồi database trở về thời điểm hiện tại hoặc trở về bất kỳ thời điểm xác định nào trước đó (Point-in-Time Recovery).

Thông tin: Hẳn nhiên nếu thời điểm bạn muốn phục hồi database trở lại là trước bản sao lưu Transaction Log gần nhất thì bạn không cần đến bản sao lưu Tail-Log.

Bên dưới mô tả 2 tình huống sao lưu Tail-Log khi SQL Server hoạt động bình thường và khi SQL Server bị lỗi khiến bạn không thể truy cập.

Tình huống 1: Sao lưu Tail-Log khi SQL Server hoạt động bình thường

Nếu sự cố chỉ xảy ra với Data file còn SQL Server vẫn hoạt động bình thường, việc tiến hành sao lưu Tail-Log là tương đối đơn giản. Bạn chỉ cần sử dụng lệnh BACKUP LOG và thêm tùy chọn NO_TRUNCATE để tiến hành sao lưu phần Transaction Log này.

BACKUP LOG ERP
TO DISK = ‘E:\SQLBackupData\DATABASE_ERP_TAIL_LOG.bak’
WITH NO_TRUNCATE
GO
Lưu ý: Trong SQL Server, dù không có Data file bạn vẫn có thể tiến hành sao lưu Log file.

Tình huống 2: Sao lưu Tail-Log khi SQL Server bị lỗi

Nếu sự cố nghiêm trọng khiến không chỉ mất Data file mà SQL Server cũng không thể hoạt động, bạn vẫn có thể sao lưu Tail-Log bằng cách dùng database tạm ở một SQL Server khác như sau:

  • Tạo database tạm ở một SQL Server khác (nên tạo database cùng tên với database cần phục hồi)
  • Xóa tất cả Data file và Log file của database đó (tất nhiên bạn cần tiến hành offline database hoặc tắt SQL Server)
  • Sao chép Log file chứa Tail-Log muốn sao lưu vào thư mục chứa database
  • Tiến hành sao lưu bằng lệnh BACKUP LOG với tùy chọn NO_TRUNCATE tương tự tình huống 1

Lưu ý quan trọng về Data file và Log file

Sao lưu Tail-Log mang lại khả năng phục hồi cực kỳ ý nghĩa cho database. Nhưng hẳn nhiên, bạn không thể tiến hành bước này nếu Log file không thể sử dụng. Do đó, một lưu ý quan trọng là bạn nên lưu trữ Data file (.MDF) và Log file (.LDF) của database trên các đĩa cứng/ổ đĩa khác nhau để giảm thiểu khả năng mất cả hai khi sự cố xảy ra.

Khi mất cả Data file và Log file, hẳn nhiên bạn chỉ có thể phục hồi database trở về thời điểm có bản sao lưu Transaction Log gần nhất.

Thông tin: Không chỉ giúp mang lại khả năng phục hồi database trở về thời điểm ngay trước sự cố, việc lưu trữ Data file và Log file trên các đĩa cứng/ổ đĩa khác nhau còn giúp tăng perfomance của database. Vì Data file và Log file được truy xuất theo cơ chế khác nhau ( Data file là random, còn Log file là sequential) nên nếu được lưu trên cùng đĩa cứng/ổ đĩa sẽ khiến không tối ưu hiệu năng truy xuất.

Free eBook: Download ebook 8 lưu ý quan trọng khi sao lưu & phục hồi SQL Server. Những kinh nghiệm hữu ích chia sẻ trong ebook giúp bạn sao lưu an toàn và đảm bảo khả năng phục hồi khi sự cố mất dữ liệu xảy ra với database SQL Server.