當數據庫損壞時可以在數據庫上先運行 DBCC CHECKDB,以了解損壞情況和相關信息。
根據備份修復:
- 如果只有一個頁面被損壞,可以進行單頁面恢復。
- 如果只有一個文件組被損壞,可以執行單個文件組還原。
- 如果是非聚集索引損壞
BEGIN TRANSACTION; ALTER INDEX IndexName ON TableName DISABLE; ALTER INDEX IndexName ON TableName REBUILD WITH (ONLINE = ON); COMMIT TRANSACTION;
注意事項:
- 如果你的數據庫已損壞,請不要嘗試將其從實例中分離,因為可能無法再次附加連接它,因為已損壞。尤其是數據庫狀態為 SUSPECT的時候。
- 如果你的 SQL Server 實例已損壞,並且數據庫也已損壞,請不要嘗試將其附加到較新版本的 SQL Server或升級,因為升級可能會失敗導致數據庫無法附加到任一版SQL Server 的舊版本或新版本。
- 如果崩潰恢復正在運行,請不要試圖關閉 SQL Server 並刪除日志文件。這保證至少會導致數據不一致和最壞的損壞。崩潰恢復有時可能需要很長時間,具體取決於崩潰時必須回滾的打開事務的長度。
- 某些情況下的損壞是無法修復(例如損壞的表元數據),這時"必須"使用備份或冗余副本還原。
- 最后可以嘗試REPAIR_ALLOW_DATA_LOSS的方式進行修復(可能會丟失數據以進行修復)。由於損壞無法執行REPAIR_ALLOW_DATA_LOSS時將數據庫設置為緊急狀態(失敗的話可以嘗試先OFFLINE然后ONLINE)和單用戶模式。