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

SQL Server 錯誤日誌暴增佔滿磁碟:sp_cycle_errorlog 清理與權限問題排查實戰

     編輯:關於SqlServer

生產環境 SQL Server 2008 R2 磁碟空間暴增,經排查發現錯誤日誌 (ErrorLog) 檔案高達 90GB 佔滿磁碟。本文記錄從發現問題、暴力刪除失敗、正規清理流程到權限錯誤排查的完整實戰過程。

問題發現與初步排查

  • SharePoint 操作全面失敗,初以為設定問題
  • 發現資料庫磁碟 (126GB) 僅剩少量空間
  • 清理一般資料庫日誌 (.ldf) 釋出數 GB,隔日又滿
  • 檢查所有資料庫總大小僅 10+ GB,磁碟實際佔用 30+ GB
  • 切換管理員帳號登入,發現 C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Log\ 下 ErrorLog 檔案近 90 GB

錯誤嘗試:直接搬移/刪除檔案

嘗試剪貼 ErrorLog 檔案至其他磁碟 → 失敗,檔案被 SQL Server 服務進程鎖定佔用,無法移動刪除。

正規解法:sp_cycle_errorlog 循環清理

機制說明

SQL Server 預設保留 7 個錯誤日誌檔案:

ErrorLog      (目前寫入中)
ErrorLog.1    (上一次循環)
ErrorLog.2
...
ErrorLog.6    (最舊,下一次循環會被刪除)

執行 EXEC sp_cycle_errorlog 會:

  1. 關閉目前 ErrorLog,重新命名為 ErrorLog.1
  2. 現有 .1→.2, .2→.3 ... .5→.6
  3. 刪除舊的 ErrorLog.6
  4. 建立新的空 ErrorLog 供寫入

連續執行 6-7 次即可將巨大的歷史日誌全部循環清除。

執行指令

-- 在目標資料庫執行個體上執行
EXEC sp_cycle_errorlog;
GO
-- 重複執行 6-7 次

權限錯誤排查與手動清理

遇到的錯誤

訊息 17049,層級 16,狀態 1,程序 sp_cycle_errorlog,第 9 行
由於出現作業系統錯誤 '5(拒絕存取。)',無法將錯誤日誌檔案從 
'...\\ERRORLOG.5' 循環到 '...\\ERRORLOG.6'。
SQL Server 外部的進程可能會阻止 SQL Server 讀取這些檔案。

根因分析

  • SQL Server 服務啟動帳戶對 Log 目錄權限不足
  • 或有防毒軟體/備份軟體鎖定檔案
  • 或檔案屬性被設為「唯讀」

解決步驟

  1. 確認 SQL Server 服務帳戶 (SQL Server Configuration Manager → 服務屬性 → 登入身分)
  2. 在檔案總管中右鍵 Log 資料夾 → 屬性 → 安全性 → 確保服務帳戶有「修改」權限
  3. 關閉防毒軟體即時掃描該目錄,或加入排除清單
  4. 檢查檔案屬性,取消「唯讀」
  5. 若 sp_cycle_errorlog 仍報錯,手動刪除 巨大的 ErrorLog.x 檔案 (服務會自動重建新檔)

事後檢討與預防

  1. 定期維護:建立 SQL Agent 作業,每日/每週執行 sp_cycle_errorlog
  2. 限制日誌大小:SSMS → 管理 → SQL Server 錯誤日誌 → 右鍵「設定」 → 勾選「限制錯誤日誌檔案大小」 (如 10 MB)
  3. 監控告警:監控磁碟剩餘空間、ErrorLog 檔案大小、錯誤日誌寫入頻率
  4. 根因治理:錯誤日誌暴增通常意味著大量錯誤發生,必須查閱日誌內容找出根因 (如連線失敗、死鎖、I/O 錯誤) 並修正

關鍵指令速查

-- 循環錯誤日誌
EXEC sp_cycle_errorlog;

-- 讀取錯誤日誌 (指定檔案索引 0=目前, 1=前一個...)
EXEC sp_readerrorlog 0, 1, 'error';

-- 查看目前錯誤日誌檔案大小與位置
SELECT * FROM sys.dm_os_enumerate_filesystem('C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Log\');
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved