Phục hồi database với tên khác và lưu trữ ở thư mục...

Phục hồi database với tên khác và lưu trữ ở thư mục khác

Có thể vì lý do nào đó bạn muốn phục hồi database thành tên khác và lưu trữ dữ liệu (Data file, Log file) ở thư mục khác so với trước đây. Chẳng hạn:

  • Bạn muốn tạo một database mới (từ bản sao lưu đang có) phục vụ cho mục đích testing, reporting
  • Bạn muốn đổi tên database vì tên cũ không phù hợp với chuẩn đặt tên bạn mới thiết lập cho database SQL Server
  • Bạn muốn thay đổi vị trí lưu Data file và Log file phù hợp với cấu trúc file system bạn mới thiết lâp. VD: Trước đây, cả Data file và Log file đều được lưu trong thư mục DATA ở đường dẫn cài đặt mặc định của SQL Server. Nay bạn muốn lưu Data file tại D:\SQLDataFiles, Log file tại E:\SQLLogFiles

SQL Server cho phép bạn tiến hành các thao tác này khá dễ dàng.

Phục hồi database với tên khác

Phục hồi database thành một tên khác cũng đơn giản như thao tác rename database trong SQL Server. Bạn chỉ cần thực hiện lệnh RESTORE DATABASE với tên mới muốn đặt.

RESTORE DATABASE zBackupLabDB_New
FROM DISK = ‘C:\SQLRestoreData\zBackupLabDB_Full.bak’
GO

Tuy nhiên, khi phục hồi với tên khác, bạn cần lưu ý điểm sau: Việc đổi tên database hoàn toàn không liên quan đến Logical Name và Physical Name của database (VD: Data file có Logical Name là zBackupLabDB_Data, Physical Name là C:\OldSQLFiles\zBackupLabDB_Data.MDF). Do đó, nếu database cũ vẫn đang hoạt động thì có thể Data file và Log file của database được phục hồi sẽ bị trùng với database cũ. Nên khi phục hồi SQL Server sẽ báo lỗi như bên dưới:

Msg 1834, Level 16, State 1, Line 1
The file ‘C:\SQLServerData\zBackupLabDB_Data.mdf’ cannot be overwritten. It is being used by database ‘zBackupLabDB’.
Msg 3156, Level 16, State 4, Line 1
File ‘zBackupLabDB_Data’ cannot be restored to ‘C:\SQLServerData\zBackupLabDB_Data.mdf’. Use WITH MOVE to identify a valid location for the file.

Với lỗi trên, bạn cần dùng tùy chọn MOVE để thay đổi tên file của Physical Name, hoặc di chuyển hoàn toàn Physical Name sang thư mục khác. Hoặc xóa database cũ đang hoạt động (nếu có thể ^_^).

Để xem thông tin Logical Name và Physical Name của database cũ (đang hoạt động trong SQL Server), bạn thực thi stored procedure sp_helpfile như bên dưới:

USE zBackupLabDB
GO
sp_helpfile
GO

Để xem thông tin Logical Name và Physical Name của database đang có trong bản backup (là database bạn đang muốn phục hồi với tên mới), bạn dùng lệnh RESTORE FILELISTONLY như bên dưới:

RESTORE FILELISTONLY
FROM DISK = ‘C:\SQLRestoreData\zBackupLabDB_Full.bak’
GO

Phục hồi database và thay đổi thư mục lưu dữ liệu

Để thay đổi thư mục lưu trữ database (so với thư mục trước đó khi database được sao lưu), bạn thêm tùy chọn MOVE vào lệnh RESTORE DATABASE để SQL Server phục ho6if Data file và Log file vào đường dẫn mới bạn chỉ định. Để biết được Logical Name của Data file và Log file, bạn dùng lệnh RESTORE FILELISTONLY vừa trình bày ở trên.

RESTORE DATABASE zBackupLabDB_New
FROM DISK = ‘C:\SQLRestoreData\zBackupLabDB_Full.bak’
WITH MOVE ‘zBackupLabDB_Data’ TO ‘D:\SQLDataFiles\zBackupLabDB_Data.MDF’,
MOVE ‘zBackupLabDB_Log’ TO ‘D:\SQLLogFiles\zBackupLabDB_Log.LDF’
GO

Có 2 lưu ý sau:

  • Với Physical Name, bạn có thể thay đổi cả đường dẫn thư mục lẫn tên file của Data file và Log file. Tuy nhiên, bạn không thể thay đổi Logical Name.
  • Nếu chỉ cần thay đổi thư mục lưu trữ của Data file (hoặc Log file), bạn chỉ cần dùng tùy chọn MOVE với Logical Name và Physical Name tương ứng của Data file (hoặc Log file). Không bắt buộc bạn phải MOVE cả Data file và Log file.
Lưu ý: Nếu cần phục hồi thêm các bản sao lưu Differential/Transaction Log sau khi phục hồi từ bản sao lưu Full, bạn cần thêm tùy chọn NOVECOVERY khi thực thi 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.