22/08/2018, 11:40
Khôi phục SQL Server từ Transaction Log
Quản trị mạng - Backup là một phần công việc cần thực hiện trong quá trình nâng cấp và vận hành máy chủ SQL. Và phần công việc còn lại là tiến trình restore được thực hiện mỗi khi máy chủ SQL có lỗi phát sinh. Một trong những tình huống này có thể liên quan tới ...
Quản trị mạng - Backup là một phần công việc cần thực hiện trong quá trình nâng cấp và vận hành máy chủ SQL. Và phần công việc còn lại là tiến trình restore được thực hiện mỗi khi máy chủ SQL có lỗi phát sinh. Một trong những tình huống này có thể liên quan tới quá trình restore từ file Transaction Log (Bản ghi giao tác) Backups.
Transaction Log (có tên gọi khác là Database Log hay Binary Log) là một lược sử hành động được hệ thống quản lý cơ sở dữ liệu thực thi để đảm bảo thuộc tính ACID (atomicity, consistency, isolation, durability) khi hệ thống bị lỗi.
Có một rắc rối với Transaction Log Backups đó là yêu cầu restore từ nhiều file hơn là chỉ từ một file full backup. Để khôi phục thành công cơ sở dữ liệu, bạn phải sử dụng mọi file Transaction Log Backups đã được tạo và chúng phải được khôi phục theo trật tự khi tạo. Nếu một file Transaction Log Backup nào đó bị lỗi, bạn sẽ không thể thực hiện khôi phục bất kì file Transaction Log Backup nào sau file lỗi đó. Chúng cần được khôi phục theo thứ tự và bạn không thể bỏ qua bất kì file nào.
Trên đây là 5 bước cơ bản cần thực hiện khi tiến hành restore một cơ sở dữ liệu SQL từ Transaction Log.
Bước 1: Backup phần hoạt động của Transaction Log
Trong trường hợp máy chủ SQL bị lỗi và bạn cần phải restore sang một máy chủ khác, trước tiên bạn cần backup phần hoạt động của Transaction Log để lưu lại những giao tác đang sử dụng vẫn chưa được backup vào một Transaction Log Backup hiện có. Để tạo Transaction Log Backup cuối này bạn hãy sử dụng lệnh có cú pháp tương tự như sau:
Lệnh này sẽ tạo một Transaction Log Backup khác sẽ được sử dụng trong tiến trình restore.
Bước 2: Xác định dữ liệu cần restore
Nếu bạn chưa biết những thông tin quan trọng nào trong cơ sở dữ liệu cần phải restore thì bạn hãy thực hiện truy vấn những bản biểu của máy chủ SQL trong msdb, những bảng này sẽ hiển thị mọi file backup trên máy chủ, bao gồm những file backup được tạo bằng Maintenance Plans, wizard trong Enterprise Manager, những lệnh T-SQL và những công cụ nhóm ba khác sử dụng tính năng SQL Server được tích hợp để tạo file backup.
Trong msdb sẽ chứa những loại bảng sau:
Bước 3: Kiểm tra nội dung của file Backup
Ngoài lệnh RESTORE thực hiện khôi phục những file backup, một số lệnh RESTORE khác cho phép bạn kiểm tra nội dung của những file backup. Những lệnh này bao gồm RESTORE HEADERONLY và RESTORE FILELISTONLY.
RESTORE HEADERONLY
Lệnh này cho phép bạn kiểm tra thông tin tổng quát của mọi file backup trên một công ụ backup cụ thể. Lệnh này rất hữu dụng khi bạn cần restore từ nhiều file backup hay nếu file backup đó là của một máy chủ khác mà bạn không quản lý. Để kiểm tra những gì được lưu trữ trong file backup đó, bạn hãy chạy lệnh này trong Query Analyzer.
RESTORE FILELISTONLY
Lệnh này cho phép bạn kiểm tra danh sách cơ sở dữ liệu và những file Log trong nhóm file backup, dung lượng của dữ liệu và các file Log. LogicalName và PhysicalName là những thành phần dữ liệu chính được sử dụng trong suốt tiến trình restore. Cú pháp lệnh có dạng:
Transaction Log (có tên gọi khác là Database Log hay Binary Log) là một lược sử hành động được hệ thống quản lý cơ sở dữ liệu thực thi để đảm bảo thuộc tính ACID (atomicity, consistency, isolation, durability) khi hệ thống bị lỗi.
Có một rắc rối với Transaction Log Backups đó là yêu cầu restore từ nhiều file hơn là chỉ từ một file full backup. Để khôi phục thành công cơ sở dữ liệu, bạn phải sử dụng mọi file Transaction Log Backups đã được tạo và chúng phải được khôi phục theo trật tự khi tạo. Nếu một file Transaction Log Backup nào đó bị lỗi, bạn sẽ không thể thực hiện khôi phục bất kì file Transaction Log Backup nào sau file lỗi đó. Chúng cần được khôi phục theo thứ tự và bạn không thể bỏ qua bất kì file nào.
Trên đây là 5 bước cơ bản cần thực hiện khi tiến hành restore một cơ sở dữ liệu SQL từ Transaction Log.
Bước 1: Backup phần hoạt động của Transaction Log
Trong trường hợp máy chủ SQL bị lỗi và bạn cần phải restore sang một máy chủ khác, trước tiên bạn cần backup phần hoạt động của Transaction Log để lưu lại những giao tác đang sử dụng vẫn chưa được backup vào một Transaction Log Backup hiện có. Để tạo Transaction Log Backup cuối này bạn hãy sử dụng lệnh có cú pháp tương tự như sau:
BACKUP LOG NorthwindTrong đó C:SQLBackupNorth.bak là địa chỉ lưu file Transaction Log Backup.
TO DISK= 'C:SQLBackupNorth.bak'
WITH NO_TRUNCATE
Lệnh này sẽ tạo một Transaction Log Backup khác sẽ được sử dụng trong tiến trình restore.
Bước 2: Xác định dữ liệu cần restore
Nếu bạn chưa biết những thông tin quan trọng nào trong cơ sở dữ liệu cần phải restore thì bạn hãy thực hiện truy vấn những bản biểu của máy chủ SQL trong msdb, những bảng này sẽ hiển thị mọi file backup trên máy chủ, bao gồm những file backup được tạo bằng Maintenance Plans, wizard trong Enterprise Manager, những lệnh T-SQL và những công cụ nhóm ba khác sử dụng tính năng SQL Server được tích hợp để tạo file backup.
Trong msdb sẽ chứa những loại bảng sau:
- backupfile - Chứa một bản ghi cho mỗi dữ liệu hay file Log đã được backup.
- backupmediafamily - Chứa một bản ghi cho mỗi nhóm phương tiện.
- backupmediaset – Chứa một bản ghi cho mỗi bộ công cụ backup.
- backupset – Chứa một bản ghi cho mỗi nhóm file backup.
Bước 3: Kiểm tra nội dung của file Backup
Ngoài lệnh RESTORE thực hiện khôi phục những file backup, một số lệnh RESTORE khác cho phép bạn kiểm tra nội dung của những file backup. Những lệnh này bao gồm RESTORE HEADERONLY và RESTORE FILELISTONLY.
RESTORE HEADERONLY
Lệnh này cho phép bạn kiểm tra thông tin tổng quát của mọi file backup trên một công ụ backup cụ thể. Lệnh này rất hữu dụng khi bạn cần restore từ nhiều file backup hay nếu file backup đó là của một máy chủ khác mà bạn không quản lý. Để kiểm tra những gì được lưu trữ trong file backup đó, bạn hãy chạy lệnh này trong Query Analyzer.
RESTORE FILELISTONLY
Lệnh này cho phép bạn kiểm tra danh sách cơ sở dữ liệu và những file Log trong nhóm file backup, dung lượng của dữ liệu và các file Log. LogicalName và PhysicalName là những thành phần dữ liệu chính được sử dụng trong suốt tiến trình restore. Cú pháp lệnh có dạng:
RESTORE FILELISTONLY FROM DISK = 'C:SQLBackupNorth.bak'
Trang 2: Bước 4: Lựa chọn tùy chọn restore
Bước 4: Lựa chọn tùy chọn restore
Có một số tùy chọn để áp dụng khi restore file backup, bao gồm những file Transaction Log Backup. Dưới đây là một số tùy chọn restore:
NORECOVERY
Tùy chọn này cho phép restore những file backup bổ sung. Bạn có thể sử dụng nó khi restore Full, Differential hay Transaction Log Backup. Bạn hãy dùng lệnh sau:
Đây là tùy chọn mặc định nếu không có tùy chọn nào được lựa chọn. Tùy hconj này sẽ được áp dụng cho tiến trình restore cuối. Khi được áp dụng, bạn không thể restore những file backup bổ sung, nếu muốn thực hiện restore cả những file backup bổ sung thì bạn phải thực hiện restore lại từ đầu. Tùy chọn này có thể được sử dụng khi restore Full, Differential hay Transaction Log Backup. Để lựa chọn tùy chọn này bạn hãy dùng lệnh sau:
Tùy chọn này cho phép bạn chuyển cơ sở dữ liệu sang chế độ Read-Only (chỉ xem), nhưng nó vẫn cho phép restore những file Transation Log bổ sung. Tùy chọn này có thể được sử dụng khi restore Full, Differential hay Transaction Log Backup. Lệnh lựa chọn tùy chọn này có dạng:
Khi restore cơ sở dữ liệu sang một máy chủ khác, có thể bạn sẽ phải sử dụng tùy chọn MOVE nếu những máy chủ không được cài đặt theo cùng một phương pháp. Như đã nhắc đến ở trên, khi sử dụng LogicalName (tên logic) và PhysicalName (tên vật lý) từ lệnh RESTORE FILELISTONLY. Tùy chọn MOVE cho phép bạn di chuyển những file vật lý tới một vị trí khác trên máy chủ. Tùy chọn này cần được sử dụng cho mọi loại file backup bao gồm Full, Differential và Transaction Log. Lệnh lựa chọn tùy chọn này có dạng:
Ngoài việc restore hoàn toàn Transaction Log, SQL Server cũng có những tùy chọn dừng tại một thời điểm cụ thể hay dấu giao tác. Bạn có thể lựa chọn những tùy chọn này khi biết khi nào hay vị trí lỗi xảy ra trên cơ sở dữ liệu này, bạn có thể phục hồi những giao tác cơ sở dữ liệu cho một điểm cụ thể để tránh lỗi xảy ra. Ví dụ, nếu ai đó xóa mọi bản ghi trong một bảng, có thể bạn sẽ muốn khôi phục cơ sở dữ liệu tới thời điểm trước khi khôi phục tới bảng đã bị xóa bản ghi đó.
STOPAT
Tùy chọn này giúp khôi phục mọi giao đã thực hiện tính đến một thời điểm nhất định. Ví dụ:
STOPATMARK
Với tùy chọn này bạn có thể khôi phục mọi giao tác xảy ra cho đến mốc giao tác Invoice1024. Bổ sung lệnh có cú pháp như sau để lựa chọn tùy chọn này:
Có một số tùy chọn để áp dụng khi restore file backup, bao gồm những file Transaction Log Backup. Dưới đây là một số tùy chọn restore:
NORECOVERY
Tùy chọn này cho phép restore những file backup bổ sung. Bạn có thể sử dụng nó khi restore Full, Differential hay Transaction Log Backup. Bạn hãy dùng lệnh sau:
RESTORE DATABASE NORTHRECOVERY
FROM DISK = 'C:SQLBackupNorth.bak'
WITH NORECOVERY
Đây là tùy chọn mặc định nếu không có tùy chọn nào được lựa chọn. Tùy hconj này sẽ được áp dụng cho tiến trình restore cuối. Khi được áp dụng, bạn không thể restore những file backup bổ sung, nếu muốn thực hiện restore cả những file backup bổ sung thì bạn phải thực hiện restore lại từ đầu. Tùy chọn này có thể được sử dụng khi restore Full, Differential hay Transaction Log Backup. Để lựa chọn tùy chọn này bạn hãy dùng lệnh sau:
RESTORE LOG NORTHSTANDBY
FROM DISK = 'C:SQLBackupNorth_Log.bak'
WITH RECOVERY
Tùy chọn này cho phép bạn chuyển cơ sở dữ liệu sang chế độ Read-Only (chỉ xem), nhưng nó vẫn cho phép restore những file Transation Log bổ sung. Tùy chọn này có thể được sử dụng khi restore Full, Differential hay Transaction Log Backup. Lệnh lựa chọn tùy chọn này có dạng:
RESTORE LOG NORTHMOVE
FROM DISK = 'C:SQLBackupNorth_Log.bak'
WITH STANDBY = 'c:undo.ldf'
Khi restore cơ sở dữ liệu sang một máy chủ khác, có thể bạn sẽ phải sử dụng tùy chọn MOVE nếu những máy chủ không được cài đặt theo cùng một phương pháp. Như đã nhắc đến ở trên, khi sử dụng LogicalName (tên logic) và PhysicalName (tên vật lý) từ lệnh RESTORE FILELISTONLY. Tùy chọn MOVE cho phép bạn di chuyển những file vật lý tới một vị trí khác trên máy chủ. Tùy chọn này cần được sử dụng cho mọi loại file backup bao gồm Full, Differential và Transaction Log. Lệnh lựa chọn tùy chọn này có dạng:
RESTORE LOG NORTHBước 5: Lựa chọn thời điểm Restore
FROM DISK = 'C:SQLBackupNorth_Log.bak'
WITH RECOVERY,
MOVE 'Northwind_Data' TO 'c:dataNorthwind.mdf',
MOVE 'Northwind_Log' TO 'c:dataNorthwind _log.ldf'
Ngoài việc restore hoàn toàn Transaction Log, SQL Server cũng có những tùy chọn dừng tại một thời điểm cụ thể hay dấu giao tác. Bạn có thể lựa chọn những tùy chọn này khi biết khi nào hay vị trí lỗi xảy ra trên cơ sở dữ liệu này, bạn có thể phục hồi những giao tác cơ sở dữ liệu cho một điểm cụ thể để tránh lỗi xảy ra. Ví dụ, nếu ai đó xóa mọi bản ghi trong một bảng, có thể bạn sẽ muốn khôi phục cơ sở dữ liệu tới thời điểm trước khi khôi phục tới bảng đã bị xóa bản ghi đó.
STOPAT
Tùy chọn này giúp khôi phục mọi giao đã thực hiện tính đến một thời điểm nhất định. Ví dụ:
RESTORE LOG NorthwindHai lệnh tiếp theo giúp bạn khôi phục những giao tác sử dụng dấu giao tác mà phải là những giao tác đã đặt tên được sử dụng trong ứng dụng. Nếu sử dụng những giao tác chưa được đặt tên thì tùy chọn này sẽ không có tác dụng.
FROM DISK = 'C:SQLBackupNorth_Log.bak'
WITH RECOVERY,
STOPAT = 'Sep 22, 2009 09:00 AM'
STOPATMARK
Với tùy chọn này bạn có thể khôi phục mọi giao tác xảy ra cho đến mốc giao tác Invoice1024. Bổ sung lệnh có cú pháp như sau để lựa chọn tùy chọn này:
RESTORE LOG NorthwindTùy chọn này giúp khôi phục mọi giao tác đã thực hiện xảy ra trước mốc giao tác Invoice1024. Để sử dụng tùy chọn này bạn hãy bổ sung lệnh có cú pháp như sau:
FROM DISK = 'C:SQLBackupNorth_Log.bak'
WITH RECOVERY,
STOPATMARK = 'Invoice1024'
STOPBEFOREMARK
RESTORE LOG NorthwindMột số tùy chọn khôi phục có thể được sử dụng cho mọi file backup và những tùy hconj nhất định chỉ được sử dụng cho file Transaction Log Backup.
FROM DISK = 'C:SQLBackupNorth_Log.bak'
WITH RECOVERY,
STOPBEFOREMARK = 'Invoice1024'