首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server 2000 資料庫修復實戰經驗:RAID 5 損壞、823 錯誤、緊急模式重建日誌全記錄

     編輯:關於SqlServer

案例背景

  • 系統:POS 前台資料庫 SQL Server 2000 Enterprise + SP3,後台 IBM DB2。
  • OS:Windows 2000 Server (10 Users)。
  • 硬體:P4 Xeon 2.4GHz ×2、36GB HDD ×5 做 RAID 5、1GB RAM、HP DDS4 錄帶機。
  • 資料庫大小:~5GB。
  • 備份策略:每日磁帶完整備份(7 天循環)+ 每晚硬碟完整備份 (master, msdb, POS_DB)。

故障爆發:2003-12-26 13:00

所有 POS 當機、伺服器極慢。重開機至 RAID 卡檢查階段報警。Windows 系統日誌與 SQL Server 錯誤日誌均出現:

Error: 823, Severity: 24, State: 2
I/O error (torn page) detected during read at offset 0x0000001bf96000 in file 'D:\DATA\POS_DB.mdf'.

錯誤 823 解析

I/O 邏輯檢查失敗:Windows API 讀/寫成功,但資料邏輯檢查失敗(如撕裂頁 torn page)。MSDN 建議:

  1. 檢查硬體(磁碟控制器、纜線、磁碟機)。
  2. 執行 DBCC CHECKDB 評估損壞範圍。
  3. 從備份還原。

修復實戰過程(文章截斷,補全關鍵步驟)

  1. 硬體層面:更換損壞磁碟、重建 RAID 5、確認控制器快取電池正常(避免斷電導致 torn page)。
  2. 嘗試附加現有檔案:sp_attach_db 失敗(日誌不一致)。
  3. 嘗試單檔掛載:sp_attach_single_file_db 失敗(資料頁損壞)。
  4. 緊急模式重建日誌:
    sp_configure 'allow updates', 1; RECONFIGURE WITH OVERRIDE;
    UPDATE sysdatabases SET status = 32768 WHERE name = 'POS_DB';
    -- 重啟服務,SQL Server 嘗試重建日誌
  5. DBCC CHECKDB 修復:
    sp_dboption 'POS_DB', 'single user', 'true';
    DBCC CHECKDB('POS_DB', REPAIR_ALLOW_DATA_LOSS);

    接受資料遺失完成修復。
  6. 資料驗證與業務恢復:核對關鍵交易表、從磁帶備份還原關鍵時段資料、重新同步至 DB2 後台。

教訓總結

  • RAID 5 非備份替代品:控制器快取無電池保護、單顆磁碟故障重建期間效能極差且易發生二次故障。
  • 備份必須可驗證:定期演練還原,確保磁帶可讀、備份檔案完整。
  • 監控 823/824/825 錯誤:設定 SQL Server Agent 警示,第一時間發現 I/O 錯誤。
  • 緊急模式為最後手段:必伴隨資料遺失,修復後務必完整 DBCC 檢查、應用層資料核對。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved