生產環境 SQL Server 2008 R2 磁碟空間暴增,經排查發現錯誤日誌 (ErrorLog) 檔案高達 90GB 佔滿磁碟。本文記錄從發現問題、暴力刪除失敗、正規清理流程到權限錯誤排查的完整實戰過程。
C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Log\ 下 ErrorLog 檔案近 90 GB嘗試剪貼 ErrorLog 檔案至其他磁碟 → 失敗,檔案被 SQL Server 服務進程鎖定佔用,無法移動刪除。
SQL Server 預設保留 7 個錯誤日誌檔案:
ErrorLog (目前寫入中) ErrorLog.1 (上一次循環) ErrorLog.2 ... ErrorLog.6 (最舊,下一次循環會被刪除)
執行 EXEC sp_cycle_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 讀取這些檔案。
sp_cycle_errorlog 仍報錯,手動刪除 巨大的 ErrorLog.x 檔案 (服務會自動重建新檔)sp_cycle_errorlog-- 循環錯誤日誌
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\');