日誌備份和差異備份還原中的常見問題示例

2022-02-11 21:13:06 字數 3229 閱讀 9129

--建立測試

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

SQL Server差異備份的備份 還原原理

記住一點 差異備份是基於最後一次完整備份的差異,而不是基於最後一次差異的差異 備份過程 1 完整備份之後有無對資料庫做過修改,如果有,記錄資料庫的最後lsn last lsn 如果完整備份之後無對資料庫做過修改,那麼差異備份就沒有意義了 2 做差異備份時根據差異位圖讀取差異頁面內容 注意 差異位圖記...

sqlserver全備份,差異備份和日誌備份

差異備份是以上乙個全備為基點,這個期間所有差異資料的備份。日誌備份是基於前乙個全備 日誌備份為基點,這個期間的事務日誌的備份。日誌備份用於確保還原資料庫到某個時間點 在利用全備 日誌備份時,需要有序並逐個還原所有日誌備份。假設要還原週六的資料,則需要上週日的全備和周一到週六的所有日誌備份才可以。如果...

資料庫完全備份和差異備份的還原操作

備份 1.完全備份 右鍵選擇資料庫 test 選擇 備份資料庫 進去 sql server備份 介面 選擇 資料庫 完全 預設 單擊 新增 選擇備份路徑 例 f 備份 test201006081545 確定 注 備份到 路徑有且僅有乙個,如果有其它備份路徑,請刪除 選擇 追加到 預設 確定 完全備份...