完全備份

2010-02-11 12:54 CREATE DATABASE db GO --1. 無完全備份時,無法進行差異備份 BACKUP DATABASE db TO DISK='c:/db.bak' WITH FORMAT,DIFFERENTIAL /*--收到錯誤 服務器: 消息 3035,級別 16,狀態 1,行 2 無法執行數據庫 'db' 的差異備份,因爲不存在當前數據庫備份。請去掉 WITH DIFFERENTIAL 選項後重新發出 BACKUP DATABASE,以執行數據庫的完整備份。 --*/ GO DROP DATABASE db GO /*=========================================================*/ --2. 無完全備份時,無法進行日誌備份 CREATE DATABASE db GO BACKUP LOG db TO DISK='c:/db.bak' WITH FORMAT /*--收到信息 沒有當前的數據庫備份。此日誌備份不能用於前滾先前的數據庫備份。 --*/ GO DROP DATABASE db GO /*===========================================================*/ --3. 數據庫恢復模型爲 SIMPLE 時,不允許使用 BACKUP LOG 語句 --數據庫恢復模型爲簡單時,無法進行日誌備份 ALTER DATABASE pubs SET RECOVERY SIMPLE BACKUP LOG pubs TO DISK='c:/a.bak' WITH FORMAT /*--收到錯誤信息 服務器: 消息 4208,級別 16,狀態 1,行 3 當恢復模型爲 SIMPLE 時,不允許使用 BACKUP LOG 語句。請使用 BACKUP DATABASE 或用 ALTER DATABASE 更改恢復模型。 --*/ GO --數據庫恢復模型不爲簡單時,才能進行日誌備份 ALTER DATABASE pubs SET RECOVERY FULL BACKUP LOG pubs TO DISK='c:/a.bak' WITH FORMAT --創建測試 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 USE_ master --創建並完全備份數據庫 CREATE DATABASE db BACKUP DATABASE db TO DISK='c:/db.bak' WITH FORMAT GO --標記事務處理 BEGIN TRANSACTION Tran1 WITH MARK CREATE TABLE db.dbo.tb(id int) COMMIT TRAN Tran1 --事務完成後插入數據 INSERT db.dbo.tb SELECT id FROM sysobjects GO --還原數據到事務標記 Tran1 前 BACKUP LOG db TO DISK='c:/db_log.bak' WITH FORMAT DROP DATABASE db RESTORE DATABASE db FROM DISK='c:/db.bak' WITH NORECOVERY RESTORE LOG db FROM DISK='c:/db_log.bak' WITH STOPBEFOREMARK='Tran1' SELECT COUNT(*) FROM db.dbo.tb /*--事務標記 Tran1 前沒有創建表,所以會收到錯誤信息 對象名 'db.dbo.tb' 無效。 --*/ GO --還原數據庫到事務標記 Tran1 後 DROP DATABASE db RESTORE DATABASE db FROM DISK='c:/db.bak' WITH NORECOVERY RESTORE LOG db FROM DISK='c:/db_log.bak' WITH STOPATMARK='Tran1' SELECT COUNT(*) FROM db.dbo.tb /*--結果 ----------- 0 (所影響的行數爲 1 行) --*/ GO --刪除測試 DROP DATABASE db

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章