SQL Server 數據文件 MDF 修復
當前位置:點晴教程→知識管理交流
→『 技術文檔交流 』
![]() 對于CS模式的軟件系統,數據庫文件損壞是常有的事。之所以損壞,我見過最多的場景無非是兩種:一是磁盤老化,很多系統使用了較長時間,磁盤還是win7上市前一直使用到現在的;二是斷電,有用戶一下班就將排插斷電或關電源總閘,無非是為了方便和省電。 不管是什么系統,只要使用數據庫,我們一定要非常迫切需要對數據庫進行備份。CS軟件系統,用戶是不會主動去備份的,因為他們也不了解數據庫,對數據安全也不敏感。也許有較負責任的商家,會幫助客戶做好定時備份任務。但發生損壞了,也需要人員進行修復。 接下來我們用一個實際案例進行數據庫的修復。某用戶附加數據庫的 mdf 和 ldf 文件,發生報錯無法附加,給到我們進行數據庫修復。一般遇到這種情況,我們也會懷疑客戶是不是直接拷貝 mdf 和 ldf 進行數據庫備份的。 我們可以用SSMS進行數據庫附加
消息 1813,級別 16,狀態 2,第 3 行 無法打開新數據庫 'SampleDB'。CREATE DATABASE 中止。 消息 824,級別 24,狀態 2,第 3 行SQL Server 檢測到基于一致性的邏輯 I/O 錯誤 頁撕裂(簽名應該為: 0xaaaaaaaa,但實際為: 0x5555aaaa)。在文件 'E:\Backup\AAA\mssql\DATA\SampleDB_Data.mdf' 中、偏移量為 0x0000000a37c000 的位置對數據庫 ID 5 中的頁 (1:20926) 執行 讀取 期間,發生了該錯誤。SQL Server 錯誤日志或系統事件日志中的其他消息可能提供了更詳細信息。這是一個威脅數據庫完整性的嚴重錯誤條件,必須立即糾正。請執行完整的數據庫一致性檢查(DBCC CHECKDB)。此錯誤可以由許多因素導致;有關詳細信息,請參閱 SQL Server 聯機叢書。 消息 3313,級別 21,狀態 2,第 3 行 在重做數據庫 'SampleDB' 的日志中記錄的操作時,日志記錄 ID (9071:366:30) 出錯。通常,特定故障以前會在 Windows 事件日志服務中記錄為錯誤。請利用完整備份還原數據庫,或者修復該數據庫。 在預期內,果然報錯。我們要恢復數據庫,必須先把數據文件掛到數據庫實例中,我們可以另辟蹊徑來達到我們的目的。
當然,也有些第三方工具可以直接讀取 mdf 或 ldf 文件進行數據提取修復,這里我們就不考慮了。現在我們先看看 mdf 與 ldf 的文件信息。
![]() 這些信息可以看到數據庫名稱、數據庫版本、邏輯文件名、原物理文件路徑等。我們盡量創建與原路徑同名的數據庫,可以用 Powershell 直接創建一個完整的路徑名稱
? 接下來我們根據以上信息,創建一個新的同名數據庫。
創建完成后,我們將該數據庫離線(脫機)
離線后,數據文件 mdf 和日志文件 ldf 就可以直接刪除了,然后用我們有問題的 mdf 和 ldf 進行替換,有時候需要注意 SQL Server 服務賬號是否有權限訪問該文件。 替換完成后,我們設置數據庫在線。
此時會提示出現錯誤如下,數據庫也處于“可疑”狀態。 消息926,級別14,狀態1,第43行無法打開數據庫'SampleDB'。恢復操作已將該數據庫標記為SUSPECT。有關詳細信息,請參閱SQL Server錯誤日志。 消息5069,級別16,狀態1,第43行ALTER DATABASE語句失敗。 消息9003,級別20,狀態15,第43行傳遞給數據庫'SampleDB'中的日志掃描操作的日志掃描號(1419:83:1)無效。此錯誤可能指示數據損壞,或者日志文件(.ldf)與數據文件(.mdf)不匹配。如果此錯誤是在復制期間出現的,請重新創建發布。否則,如果該問題導致啟動期間出錯,請從備份還原。 消息3414,級別21,狀態1,第43行恢復期間出錯,導致數據庫'SampleDB' (數據庫ID 5)無法重新啟動。請診斷并糾正這些恢復錯誤,或者從已知的正確備份中還原。如果無法更正錯誤,或者為意外錯誤,請與技術支持人員聯系。 接下來我們可以直接用常用的命令來進行數據庫修復。
通過 REPAIR_ALLOW_DATA_LOSS 修復數據,相關修復信息如下。其中大部分是系統元數據有問題,還有一些用戶表的索引有問題。修復后新的頁面關系可能導致一些異常頁面數據丟失。 如果企業丟失了數據,哪怕僅僅幾行數據,對企業和客戶來說都是非常嚴重的問題。如果發現數據庫損壞,應盡快修復,在修復完成前不建議繼續使用該數據庫。若某個頁面損壞,我們還可以通過備份恢復某個頁面的數據。如果損壞過多,即使有損修復數據,數據的完整性也沒有保障,數據之間的關系可能已經不存在了,損失也相當于進一步在擴大。 因此,企業或用戶系統的數據庫,一定要做好備份。不僅要完整的全量備份,還需要日志增量備份。相互結合起來,可以保證任意時刻的數據都能被找回。這一定是數據管理者深入骨髓的理念! 閱讀原文:原文鏈接 該文章在 2025/1/10 11:11:58 編輯過 |
關鍵字查詢
相關文章
正在查詢... |