--建立測試
CREATE DATABASE db
GO
--正常備份
BACKUP DATABASE db TO DISK='c:\1.bak' WITH FORMAT
BACKUP LOG db TO DISK='c:\2.bak' WITH FORMAT
BACKUP LOG db TO DISK='c:\3.bak' WITH FORMAT
BACKUP DATABASE db TO DISK='c:\4.bak' WITH FORMAT
BACKUP DATABASE db TO DISK='c:\5.bak' WITH FORMAT,DIFFERENTIAL
BACKUP LOG db TO DISK='c:\6.bak' WITH FORMAT
GO
--下面是用於記錄備份和差異備份還原中易犯的錯誤
--1. 恢複時使用錯誤的日誌順序
IF DB_ID('db') IS NOT NULL DROP DATABASE db
RESTORE DATABASE db FROM DISK='c:\1.bak' WITH NORECOVERY
RESTORE LOG db FROM DISK='c:\3.bak'
/*--收到資訊
伺服器: 訊息 4305,層級 16,狀態 1,行 5
此備份組中的日誌開始於 LSN 6000000002800001,該 LSN 太晚,無法應用到資料庫。包含 LSN 6000000002500001 的較早的記錄備份可以還原。
--*/
GO
--2. 恢複時,將記錄備份應用於錯誤的完全備份
IF DB_ID('db') IS NOT NULL DROP DATABASE db
RESTORE DATABASE db FROM DISK='c:\4.bak' WITH NORECOVERY
RESTORE LOG db FROM DISK='c:\2.bak'
/*--收到錯誤資訊
伺服器: 訊息 4326,層級 16,狀態 1,行 5
此備份組中的日誌終止於 LSN 6000000002800001,該 LSN 太早,無法應用到資料庫。包含 LSN 6000000003000001 的較新的記錄備份可以還原。
--*/
GO
--3. 將記錄備份用於RESTORE DATABASE
IF DB_ID('db') IS NOT NULL DROP DATABASE db
RESTORE DATABASE db FROM DISK='c:\2.bak' WITH NORECOVERY
/*--收到錯誤資訊
伺服器: 訊息 3135,層級 16,狀態 2,行 4
檔案 'c:\2.bak' 中的備份組是由 BACKUP LOG 建立的,無法用於此還原作業。
--*/
GO
--4. 將差異備份用於RESTORE LOG
IF DB_ID('db') IS NOT NULL DROP DATABASE db
RESTORE DATABASE db FROM DISK='c:\4.bak' WITH NORECOVERY
RESTORE LOG db FROM DISK='c:\5.bak'
/*--收到錯誤資訊
伺服器: 訊息 3135,層級 16,狀態 2,行 3
檔案 'c:\5.bak' 中的備份組是由 BACKUP DATABASE WITH DIFFERENTIAL 建立的,無法用於此還原作業。
--*/
GO
--5. 將差異備份用於錯誤的完全備份中
IF DB_ID('db') IS NOT NULL DROP DATABASE db
RESTORE DATABASE db FROM DISK='c:\1.bak' WITH NORECOVERY
RESTORE DATABASE db FROM DISK='c:\5.bak'
/*--收到錯誤資訊
伺服器: 訊息 3136,層級 16,狀態 1,行 3
無法將裝置 'c:\5.bak' 上的備份應用於資料庫 'db'。
--*/
GO
--6. 直接使用記錄備份或者差異備份還原
IF DB_ID('db') IS NOT NULL DROP DATABASE db
RESTORE DATABASE db FROM DISK='c:\5.bak'
RESTORE LOG db FROM DISK='c:\2.bak'
/*--收到錯誤資訊
伺服器: 訊息 913,層級 16,狀態 8,行 3
未能找到 ID 為 65535 的資料庫。可能該資料庫尚未啟用,也可能正在轉換過程中。
--*/
GO
--7. 還原完全備份時,未使用NORECOVERY,導致不能正確還原記錄備份或者差異備份
IF DB_ID('db') IS NOT NULL DROP DATABASE db
RESTORE DATABASE db FROM DISK='c:\1.bak'
RESTORE LOG db FROM DISK='c:\2.bak'
/*--收到錯誤資訊
伺服器: 訊息 4306,層級 16,狀態 1,行 4
先前的還原作業未指定 WITH NORECOVERY 或 WITH STANDBY。請在除最後步驟之外的所有其他步驟中指定 WITH NORECOVERY 或 WITH STANDBY 後,重新啟動該還原序列。
--*/
GO
--刪除測試
IF DB_ID('db') IS NOT NULL DROP DATABASE db