嘗試修改SQL Server的重做日誌檔案,使其按照修改的結果執行重做,結果失敗

lawzjf發表於2009-07-14

今天上午有時間完成自己一直未實施的一個想法,即修改SQL Server的重做日誌,看是否能讓SQL Server按照自己的修改執行重做操作,結果讓人失望,大致原因應該是重做日誌檔案日誌記錄會有校驗和之類的機制,修改後,SQL Server不認了。不過也算了卻一樁心事。

大致過程如下:

執行資料庫全庫備份。
執行事務日誌備份。
update表t中的一個列值,如把b=‘aaaa’,改為'bbbb'。
檢視上述update產生的重做記錄,記下其LSN號碼。
根據LSN號碼,計算其在日誌檔案中的位置,使用WinHex在重做日誌檔案中查詢對應的日誌記錄,並把其中的bbbb對應的十六進位制資料62626262改為65656565,即eeee。
執行事務日誌尾部備份,從而備份上述修改過的日誌內容。
執行全庫恢復。
由第一次日誌備份執行恢復。
由第二次日誌日誌備份執行恢復,結果報錯如下:

已為資料庫 'dbfull',檔案 'dbfull' (位於檔案 1 上)處理了 0 頁。
已為資料庫 'dbfull',檔案 'dbfull_log' (位於檔案 1 上)處理了 3 頁。
訊息 9004,級別 16,狀態 3,伺服器 APPLE,第 1 行
處理資料庫 'dbfull' 的日誌時出錯。如果可能,請從備份還原。如果沒有可用備份,可能需要重新生成日誌。
訊息 3013,級別 16,狀態 1,伺服器 APPLE,第 1 行
RESTORE LOG 正在異常終止。

2010-07-20補充:

只要把資料庫設定為無資料頁IO校驗機制,上述實驗即可成功,也就是說:資料庫的資料頁IO校驗機制同時對資料檔案和重做日誌檔案生效

設定資料庫無資料頁校驗機制的命令:

alter database db_name set page_verify none

[@more@]

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/37724/viewspace-1024115/,如需轉載,請註明出處,否則將追究法律責任。

相關文章