標籤:返回 通過 serve write 寫入 成功 evel 作業系統 sed
SQL Server 對資料庫損壞的錯誤類型做了細化,在此對幾個典型的錯誤作一下介紹。
錯誤資訊是:“在檔案 ‘%ls‘中、位移量為 %#016I64x 的位置執行 %S_MSG 期間,作業系統已經向 SQL Server 返回了錯誤 %ls。”
“The operating systemreturned error %ls to SQL Server during a %S_MSGat offset %#016I64x in file ‘%ls‘.”
例如:
Msg 823, Level 24, State 3, Line 1
The operating system returned error 5(Access is denied.) to SQLServer during a write at offset 0x0000000000e000 in file ‘FilePath\FileName‘.
823錯誤代表SQLServer在向作業系統申請某個頁面讀寫的時候遇到Windows讀取或寫入請求失敗。Windows返回的錯誤碼和相應的文本會插入訊息中。對於讀取操作,SQL Server在報出823 823 錯誤之前已經重試讀取請求4次。
從錯誤產生的機制可以看出,823 824 錯誤是發出一個頁面讀寫請求時發生的,和讀寫的內容沒有關係。所以823錯誤和SQLServer本身無關。通常是物理檔案損壞導致此錯誤,但也可能是裝置驅動程式導致的。如果某個資料檔案上反覆出現823錯誤,要不就是硬體裝置出了問題,要不就是資料檔案已經發生了非常嚴重的損壞。這個錯誤基本上意味著資料頁裡的有效資料已經丟失,一般DBCCCHECKDB很難修複。
錯誤資訊是:“SQLServer檢測到基於一致性的邏輯I/O錯誤 %ls。在檔案 ‘%ls‘ 中、位移量為 %#016I64x 的位置對資料庫 ID %d 中的頁 %S_PGID 執行 %S_MSG 期間,發生了該錯誤。”
“SQL Server detecteda logical consistency-based I/O error: %ls. It occurred during a %S_MSG of page %S_PGIDin database ID %d at offset %#016I64x in file ‘%ls‘.”
例如:
SQL Server detected a logical consistency-based I/O error: tornpage (expected signature: 0x0; actual signature: 0x4e0372a8). It occurredduring a read of page (1:0) in database ID 13 at offset 0000000000000000 infile ‘S:\Microsoft SQL Server\MSSQL.1\MSSQL\Data\www71_global_Data.mdf‘.
此錯誤表明Windows報告已從磁碟成功讀取頁,但SQL Server檢測到頁中存在邏輯錯誤。那麼SQLServer會檢測到哪些“邏輯錯誤”呢?常見的錯誤類型有以下幾種。
Checksum
SQL Server可以在寫入每個頁面時,根據頁面裡的資料算出一個校正值,一同儲存到頁面裡去。當下次讀取頁面的時候,再根據這次讀到的頁面資料,算出一個新的校正值。如果寫入和讀出的資料一模一樣,那麼兩個校正值一定是相等的。而如果兩個校正值不相等,意味著上次SQLServer寫入的資料和這次讀出來的內容一定不同,現在讀出來的資料有問題。通過這種方法,SQL Server能夠探索資料頁面損壞。
TornPage
殘缺頁(Torn Page)保護其實是一種對電源故障導致的頁損壞進行檢測的方法。例如,意外電源故障可能導致一個頁面只有一部分被寫入了磁碟。使用殘缺頁保護時,頁的每個512B扇區末尾會放置一個2位簽名(在將原來的2位複製到頁頭之後)。每次進行寫操作時,這個簽名在位元01和10之間交替,這樣始終可以確定是否只有部分扇區寫到磁碟。如果稍後讀取頁時發現某個位的狀態不正確,則說明該頁沒有被正確寫入,因此檢測到問題頁面,稱為殘缺頁。相對於Checksum,殘缺頁檢測使用的資源最少,但是它的演算法太簡單,無法檢測到磁碟硬體故障導致的所有錯誤。
最近開發了 SQL資料庫物理檔案修複工具 可以有效針對 823 824 錯誤快速修正, sql7.0 sql2000 如果啟用了 tornpage校正 頁損壞 會提示823,而 SQL2005及以上版本 不管是 tornpage還是checksum 校正 一旦頁損壞都會報824錯誤
下載示範視頻 https://pan.baidu.com/s/18IaYqOmiHJ4rEx7qnSNBOw
sql 資料庫附加失敗 提示823 824 錯誤修複