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

SQL Server 2005 非法卸載殘留導致性能計數器損壞的註冊表修復實戰

     編輯:關於SqlServer

直接刪除安裝目錄、未運行卸載程式、第三方清理工具暴力清理,均屬「非法卸載」。典型後遺症:性能監視器無法載入 SQL Server 計數器、SSMS 連接報錯、新安裝實例失敗。根因:**註冊表 `Perflib` 鍵值損壞**,導致性能計數器庫無法加載 SQL Server 計數器 DLL。本文提供精準修復步驟。

故障現象識別

  • `perfmon.msc` 添加計數器時,SQL Server 相關對象(`SQLServer:Buffer Manager`、`SQLServer:Databases` 等)缺失或報錯;
  • 事件查看器 `System` 日志:`Event ID 2004` / `2005` - `Unable to open the Server service performance object`;
  • 新安裝 SQL 2005 實例失敗,錯誤日志提示 `Performance counter registration failed`。

根因定位:註冊表 `Perflib` 結構

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib
├── 009  -- 英文系統語言 ID
├── 004  -- 簡體中文系統語言 ID (關鍵!中文環境必看此分支)
└── CurrentLanguage = 004 (或 009)

每個語言分支下包含:

  • `Counter` / `Help`:多行字符串,索引→名稱映射;
  • `Last Counter` / `Last Help`:最大索引值;
  • `` 子鍵:如 `MSSQLSERVER`、`MSSQL$INST1`,包含 `First Counter`、`First Help`、`Last Counter`、`Last Help`、`Object List`、`Library`、`Open`、`Close`、`Collect`。

修復標準流程(以簡體中文 004 為例)

步驟 1:備份註冊表

regedit → 導出 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib\004 為 .reg 文件

步驟 2:檢查並修正語言分支

  • 確認 `CurrentLanguage` 值與系統 UI 語言一致(中文=004,英文=009);
  • 若缺失對應語言分支,從同版本健康機器導入同名分支。

步驟 3:清理殘留 SQL 實例鍵值

-- 在 004 分支下,刪除所有 MSSQL* 子鍵(對應已卸載實例)
-- 保留系統原生鍵值(如 'PhysicalDisk', 'Process' 等)

步驟 4:重建計數器庫(核心修復)

-- 管理員 CMD 執行
cd %windir%\system32
lodctr /R   -- 從註冊表備份恢復所有性能計數器(Win7/2008R2+)
-- 或舊版本
lodctr /R:perfbackup.ini  -- 需提前備份

-- 專門重建 SQL Server 計數器(若有 sqlctr.ini)
lodctr "C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Binn\sqlctr.ini"
-- 64位實例路徑通常在 MSSQL10.MSSQLSERVER\MSSQL\Binn

步驟 5:驗證修復結果

perfmon.msc → 添加計數器 → 確認 SQLServer:* 對象完整載入
-- 或命令行驗證
typeperf -q "SQLServer:Buffer Manager"  -- 應列出所有計數器實例

預防與最佳實踐

  • 嚴禁非法卸載:始終使用「控制面板→程式和功能」或安裝媒體 `Setup.exe /Action=Uninstall`;
  • 安裝前檢查:運行 `SQL Server 2005 系統配置檢查器 (SCC)`,會自動檢測性能計數器狀態;
  • 多實例環境:每個實例擁有獨立計數器鍵值(`MSSQL$InstanceName`),卸載單實例僅清理對應鍵值;
  • 監控腳本:定期運行 `typeperf -q "SQLServer:General Statistics"` 驗證計數器健康。

總結

性能計數器註冊表損壞是「非法卸載」最隱蔽、破壞力最強的後遺症之一。通過**精準定位語言分支(004/009)→ 清理殘留實例鍵值 → `lodctr /R` 重建庫 → 驗證載入**四步法,可在 10 分鐘內徹底修復。將此流程納入 DBA 應急手冊,並強制執行「規範卸載」流程,從源頭杜絕隱患。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved