?? 11.4.1 日志備份和差異備份還原中的常見問題示例.sql
字號:
--創建測試
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
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -