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

SQL Server 實用運維技巧集錦(三):索引維護、補丁安裝疑難雜症與版本檢測

     編輯:關於SqlServer

一、資料表索引維護標準流程

1. 診斷掃描密度

DECLARE @TableId INT = OBJECT_ID('dbo.YourTable');
DBCC SHOWCONTIG(@TableId)
WITH TABLERESULTS, ALL_INDEXES; -- 2005+ 支援 TABLERESULTS 輸出表格

關鍵指標:

  • Scan Density:最接近 100% 為佳,< 80% 需重建
  • Logical Scan Fragmentation:> 10% 需重組,> 30% 需重建
  • Extent Scan Fragmentation:區塊層級碎片
  • Avg. Bytes Free per Page:頁面剩餘空間,影響插入效能

2. 重建叢集索引 (首選)

-- 指定填充因子保留空間給未來插入
DBCC DBREINDEX('dbo.YourTable', 'PK_YourTable', 90); -- 90% 填充因子

3. 全表所有索引重建

DBCC DBREINDEX('dbo.YourTable', '', 90); -- 空字串 = 所有索引

注意:`DBCC DBREINDEX` 為離線操作 (鎖表),Enterprise 版可用 `ONLINE` 選項 (2005+ 需特定追蹤旗標,2008+ 原生支援 `ALTER INDEX ... REBUILD WITH (ONLINE=ON)`)。

4. 輕量替代:索引重組

DBCC INDEXDEFRAG(DB_ID(), OBJECT_ID('dbo.YourTable'), IndexId); -- 2005
-- 2008+ 推薦
ALTER INDEX ALL ON dbo.YourTable REORGANIZE;
  • 線上操作、不鎖表、單執行緒、耗時較長
  • 適用碎片 10-30%,頁面密度尚可

二、SQL Server 補丁安裝常見錯誤與解決方案

錯誤 1:掛起檔案操作需重啟

錯誤訊息:「以前進行的程序建立了掛起的檔案操作,執行安裝程式前,必須重新啟動」

解決步驟:

  1. 重啟伺服器,再次嘗試安裝
  2. 若仍失敗:`regedit` → `HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager`
    • 右鍵 `PendingFileRenameOperations` → 刪除
    • 建議先匯出該機碼備份
  3. 檢查其他登錄區是否殘留相同值 (如 `HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce`)

錯誤 2:SP3 安裝時 TCP/IP 連線失敗

sqlsp.log 顯示:
[TCP/IP Sockets]Specified SQL Server not found.
[TCP/IP Sockets]ConnectionOpen (Connect()).

根因:SP3 安裝程式需 Named Pipes 連線,預設 TCP/IP 優先導致失敗。

解決步驟:

  1. SQL Server 用戶端網路公用程式 / 伺服器網路公用程式 → 啟用協定:**Named Pipes 移至第一優先**
  2. 登錄確認:`HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Client\ConnectTo` → `"DSQUERY"="DBNETLIB"` (若無則新增)
  3. 停止 MSSQLSERVER 服務
  4. 執行 SP3 安裝
  5. 安裝完成後恢復協定順序

三、補丁版本快速檢測腳本

-- 方法 1:查詢分析器 / SSMS / sqlcmd
SELECT @@VERSION;
GO

-- 方法 2:更結構化資訊
SELECT
    SERVERPROPERTY('ProductVersion') AS Version,
    SERVERPROPERTY('ProductLevel') AS Level,      -- RTM / SP1 / SP2 / SP3 / CUx
    SERVERPROPERTY('Edition') AS Edition,         -- Enterprise / Standard / Express
    SERVERPROPERTY('EngineEdition') AS EngineEd;  -- 3=Enterprise, 2=Standard, 4=Express

SQL Server 2000 版本對照表

版本號對應發行建置日期參考
8.00.194SQL Server 2000 RTM2000-11
8.00.384Service Pack 1 (SP1)2001-05
8.00.534Service Pack 2 (SP2)2002-11
8.00.760Service Pack 3 (SP3)2003-12
8.00.2039SP42005-05

SQL Server 2005 版本對照表

版本號對應發行
9.00.1399RTM
9.00.2047SP1
9.00.3042SP2
9.00.4035SP3
9.00.5000SP4

四、生產環境補丁管理最佳實踐

  1. 建立基準線:記錄所有實例 `ProductVersion`、`ProductLevel`、`Edition`
  2. 測試優先:預生產環境完整回歸 (應用、備份/還原、複寫、ETL、高可用性)
  3. 維護視窗排程:低峰期,通知利害關係人,準備回滾方案
  4. 叢集/可用性群組滾動更新**:被動節點先裝,容錯移轉,再裝主動節點
  5. 安裝後驗證**:`DBCC CHECKDB`、關鍵查詢效能基準、錯誤日誌掃描
  6. 文件化**:安裝日誌、遇到問題、解決方案、驗證結果存檔

下一集將分享:資料庫收縮/壓縮實戰、用戶權限遷移、備份驗證、損壞修復、`DBCC CHECKDB` 參數深度解析、記錄檔清理兩大法、重複資料清除四大模式、資料表擁有者變更、循環寫入測試資料腳本。

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