Sql-Server

PFS 頁面損壞問題和問題

  • November 18, 2020

我們最近在生產數據庫中遇到了 PFS 頁面損壞。我們正在檢查舊備份以查找哪些是乾淨的,但我想知道是否可以使用不同的過程來縮短解決此問題所需的時間。到目前為止,我們還沒有遇到任何客戶端問題,數據庫仍然可用,但顯然需要修復問題。我知道我們無法修復單個 PFS 頁面,但下面的方法可以嗎? 

Msg 8948, Sev 16, State 6, Line 1 : Database error: Page (8:15390050) is marked with the wrong type in PFS page (8:15383376). PFS status 0x40 expected 0x60. [SQLSTATE 42000]
Msg 8948, Sev 16, State 1, Line 1 : Database error: Page (8:15390051) is marked with the wrong type in PFS page (8:15383376). PFS status 0x40 expected 0x60. [SQLSTATE 42000]
Msg 8948, Sev 16, State 1, Line 1 : Database error: Page (8:15390052) is marked with the wrong type in PFS page (8:15383376). PFS status 0x40 expected 0x60. [SQLSTATE 42000]
Msg 8948, Sev 16, State 1, Line 1 : Database error: Page (8:15390053) is marked with the wrong type in PFS page (8:15383376). PFS status 0x40 expected 0x60. [SQLSTATE 42000]
Msg 8948, Sev 16, State 1, Line 1 : Database error: Page (8:15390054) is marked with the wrong type in PFS page (8:15383376). PFS status 0x40 expected 0x60. [SQLSTATE 42000]
Msg 8948, Sev 16, State 1, Line 1 : Database error: Page (8:15390055) is marked with the wrong type in PFS page (8:15383376). PFS status 0x40 expected 0x60. [SQLSTATE 42000]

我使用 DBCC Page 並發現所有 6 個頁面都屬於 1 個表,所以我希望這會起作用,所以我們不需要從舊備份恢復,但我讀過的所有內容都說它要麼從備份恢復,要麼修復允許數據失去。另外,0x60 狀態是什麼?使用 DBCC 頁面顯示 0x40 狀態已分配,所以我很好奇 0x60 的狀態是什麼。人們如何看待這個過程?清除腐敗會起作用嗎?

  1. 將所有數據複製到備份表 - 應分配新數據頁面,這意味著這些頁面的 PFS 頁麵條目應該是乾淨的。
  2. 刪除源表 - 我假設這會刪除錯誤的 PFS 頁麵條目,因為該表不再存在……但是如果 PFS 頁面已損壞,SQL Server 是否可以完全刪除錯誤,或者即使在刪除表後它們仍然存在?
  3. 將表重命名回源表 - 希望這將解決問題,因為在第 2 步中創建了新的數據頁和新的 PFS 頁麵條目。

有沒有人嘗試過或聽說過在不返回舊備份的情況下處理 PFS 頁面損壞的方法?

在此處輸入圖像描述 在此處輸入圖像描述

請參閱https://www.sqlskills.com/blogs/paul/pfs-corruption-after-upgrading-from-sql-server-2014/

如果此數據庫是從 SQL Server 2014 或更早版本升級的,您可能在升級之前就遇到了問題,但 CHECKDB 未檢測到該問題。

您應該聯繫 Microsoft 支持,他們可能會告訴您執行帶有 REPAIR_ALLOW_DATA_LOSS 的 DBCC CHECKDB(或 CHECKALLOC)(如果這是唯一的錯誤,它不會導致數據失去;它只會修復 PFS 類型)。您可能需要執行兩次才能修復它;第一次執行後,您可能仍然會遇到錯誤,例如:

數據庫 ID 11 中的頁面 (1:111) 在 SGAM (1:222) 和 PFS (1:333) 中分配,但未在任何 IAM 中分配。PFS 標記“MIXED_EXT ALLOCATED 0_PCT_FULL”。

您的幾個 PFS 頁面受損。這種腐敗是無法彌補的。

進行尾部日誌備份(如果可以的話),然後恢復完整備份、所有日誌備份,然後是您進行的尾部日誌備份。您應該能夠在不失去數據的情況下進行還原,因為您擁有一組良好的備份。

你需要做一些根本原因分析查看 windows 事件日誌、SAN 日誌、RAID 日誌等。這通常是 IO 子系統問題,您需要確定原因,否則可能會再次發生。

引用自:https://dba.stackexchange.com/questions/250008