Lỗi 3159 “The tail of the log for the database has...

Lỗi 3159 “The tail of the log for the database [Database Name] has not been backed up.”

Thông báo lỗi

Khi phục hồi một database, có thể bạn gặp lỗi sau:

Msg 3159, Level 16, State 1, Line 1
The tail of the log for the database “[Database Name]” has not been backed up. Use BACKUP LOG WITH NORECOVERY to backup the log if it contains work you do not want to lose. Use the WITH REPLACE or WITH STOPAT clause of the RESTORE statement to just overwrite the contents of the log.
Msg 3013, Level 16, State 1, Line 1
RESTORE DATABASE is terminating abnormally.

Nguyên nhân

Lỗi xuất hiện do bạn phục hồi một database đã tồn tại, database này có Recovery model là Full (hoặc Bulk-logged) và Transaction Log của database đang có các active log. SQL Server báo lỗi để cảnh báo bạn là database đang có các active log (gọi là Tail log). Do đó, bạn nên sao lưu Tail log này trước khi tiến hành phục hồi để tránh mất mát các dữ liệu đang có trong Tail log. Hoặc bạn yêu cầu ghi đè database với tùy chọn REPLACE đi kèm lệnh RESTORE DATABASE.

Cách khắc phục

Để khắc phục lỗi này, bạn cần sao lưu Tail log trước khi tiến hành phục hồi. Hoặc yêu cầu ghi đè database bằng cách thêm tùy chọn WITH REPLACE trong lệnh RESTORE DATABASE.

Đoạn lệnh T-SQL giúp backup Tail log:

BACKUP DATABASE zBackupLabERP
TO DISK = ‘C:\SQLBackup\zBackupLabERP_Tail_Log.bak’
WITH NORECOVERY
GO

Đoạn lệnh phục hồi database với tùy chọn ghi đè (WITH REPLACE):

RESTORE DATABASE zBackupLabERP
FROM DISK = ‘C:\SQLBackup\zBackupLabERP_Full.bak’
WITH REPLACE
GO

Nếu tiến hành phục hồi bằng giao diện SQL Server Management Studio, bạn chọn Overwrite the existing database (WITH REPLACE) ở mục Restore options.

Phục hồi SQL Server với tùy chọn WITH REPLACE (lệnh RESTORE DATABASE)

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 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.