還原數據庫常犯如下錯誤

這裏有個鄒老大的代碼例子:
--創建測試
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 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. 將差異備份用於RESTORE LOG
IF DB_ID('db') IS NOT NULL 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

--6. 將差異備份用於錯誤的完全備份中
IF DB_ID('db') IS NOT NULL 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

--7. 直接使用日誌備份或者差異備份還原
IF DB_ID('db') IS NOT NULL 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

--8. 還原完全備份時,未使用NORECOVERY,導致不能正確還原日誌備份或者差異備份
IF DB_ID('db') IS NOT NULL 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
 

發佈了50 篇原創文章 · 獲贊 5 · 訪問量 15萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章