Phục hồi database SQL Server từ bản sao lưu Full

Phục hồi database SQL Server từ bản sao lưu Full

Tình huống

Bạn sử dụng bản sao lưu Full để phục hồi database nếu rơi vào một trong hai trường hợp sau:

  • Bản sao lưu Full là bản sao lưu gần thời điểm xảy ra sự cố nhất. Nghĩa là từ lúc tiến hành sao lưu Full đến lúc bị sự cố, bạn không có thêm bất kỳ bản sao lưu Differential hoặc Transaction log nào khác.
  • Database chỉ được sao lưu Full mà không sao lưu Differential hoặc Transaction log. Lý do có thể vì Recovery model của database là SIMPLE khiến bạn không thể sao lưu Transaction log, hoặc đơn giản vì bạn không tiến hành sao lưu Differential hoặc Transaction log.

Lưu ý: Nếu muốn phục hồi database từ bản sao lưu Differential hay Transaction log, bạn vẫn phải phục hồi từ bản sao lưu Full ngay trước đó.

Các bước tiến hành

Quá trình phục hồi database từ bản sao lưu Full được tiến hành theo 2 bước sau:

  1. Phục hồi bản sao lưu Full từ Disk/Tape/Cloud
  2. Khôi phục bản sao lưu Full vào database bằng lệnh của SQL Server

1. Phục hồi bản sao lưu Full từ Disk/Tape/Cloud

Trước khi tiến hành bất kỳ thao tác khôi phục nào với SQL Server, bạn cần phải có bản sao lưu Full và tiến hành phục hồi dữ liệu từ bản sao lưu này vào máy tính. Tùy phần mềm/công cụ sao lưu trước đây, bạn tiến hành phục hồi theo hướng dẫn tương ứng.

Lưu ý: Không có bản sao lưu thì không thể nói đến chuyện phục hồi hay bất kỳ thao tác nào khác để khôi phục lại database. Do đó, bạn cần có phương án sao lưu và lưu trữ an toàn các bản sao lưu.

2. Khôi phục bản sao lưu Full vào database bằng lệnh của SQL Server

Sau khi có được bản sao lưu Full, bạn tiến hành khôi phục database vào SQL Server bằng lệnh RESTORE DATABASE.

RESTORE DATABASE ERP
FROM DISK = ‘E:\SQLRestoreData\DATABASE_ERP.bak’
GO

Mặc định, lệnh RESTORE DATABASE sẽ khôi phục Data file và Log file vào thư mục trước đây của database (giá trị PhysicalName của lệnh RESTORE FILELISTONLY). Nếu thư mục này không tồn tại hoặc đã có file khác trùng tên thì lỗi sau xuất hiện:

File ‘ERP’ cannot be restored to ‘C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\ERP_Data.mdf’. Use WITH MOVE to identify a valid location for the file

Để khắc phục lỗi trên, bạn cần sử dụng tùy chọn MOVE để chỉ định tên thư mục sẽ chứa Data file và Log file được phục hồi. Nhưng trước hết, bạn cần truy xuất các thông tin dữ liệu của database bằng lệnh RESORE FILELISTONLY.

RESTORE FILELISTONLY ERP
FROM DISK = ‘E:\SQLRestoreData\DATABASE_ERP.bak’
GO

Sau đó, sử dụng lệnh RESTORE DATABASE với tùy chọn MOVE để khôi phục database vào thư mục chỉ định.

RESTORE DATABASE ERP
FROM DISK = ‘E:\SQLRestoreData\DATABASE_ERP.bak’
MOVE ‘ERP_Data’
TO ‘E:\SQLData\ERP_Data.mdf’
MOVE ‘ERP_Log’
TO ‘E:\SQLData\ERP_Log.ldf’
GO

Sau khi lệnh RESTORE DATABASE được thực thi, database sẽ được khôi phục hoàn toàn và ở tình trạng có thể sử dụng được. Do đó, bạn không thể tiến hành phục hồi thêm từ bản sao lưu Differential hay Transaction log.

Lưu ý: Nếu database cần khôi phục bị trùng database đã có trong SQL Server, lỗi sau sẽ xuất hiện:

Msg 3159, Level 16, State 1, Line 1
The tail of the log for the database “ERP” 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.

Với lỗi này, bạn sử dụng tùy chọn REPLACE để ghi đè database đang có.

RESTORE DATABASE ERP
FROM DISK = ‘E:\SQLRestoreData\DATABASE_ERP.bak’
WITH REPLACE
GO

Sau khi lệnh RESTORE DATABASE được thực thi xong, bạn refresh lại mục Databases trong SSMS và thấy database ERP vừa được phục hồi.

Database được phục hồi sau khi chạy 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.