新疆 崔良義
近日,一直運行很穩定的SQL Server 2005 數據庫服務器突然發生了無法連接數據庫的問題,造成單位大面積的業務用戶無法登錄系統。
由于情況緊急,重啟數據庫服務器后,系統恢復正常。但是,幾個小時后,又出現了相同的故障問題,如此反復。

圖1 取消啟用C2 審核跟蹤選項前的勾選
根據故障時間,通過查看服務器事件日志,發現了事件ID566 的記錄,提示編寫審核跟蹤時出錯,SQL Server 即將關閉,可能原因是磁盤空間不足。
通過查看數據庫磁盤空間與系統服務,發現還剩余4GB 空間,服務已停止。當再次出現系統故障后,發現僅剩1.5GB 空間,且SQL Server 服務再次自動中斷了。
那么,是什么原因讓數據庫磁盤空間減少得如此之快了?與數據庫服務自動中斷又有什么關系?
在排除服務器中病毒原因后,圍繞事件日志提示信息以及服務器操作變動,聯想到近期因服務器等級保護制度要求,啟用了SQL Server C2審核跟蹤。
原來,C2 審核跟蹤會審核語句和對象的所有訪問,并將它們記錄在數據庫MSSQLData 目錄下。如果審核日志文件大小達到最大限制值時,SQL Server 會關閉舊文件,并新建一個文件,將所有新的審核數據記錄到新文件中。
此過程會一直持續到審核數據目錄寫滿或關閉審核跟蹤為止。如果日志目錄空間不足,SQL Server 會將自身關閉,這可用來保證即便出現了磁盤錯誤,也不可能丟失任何審核數據,直至為審核日志釋放出足夠的磁盤空間并重新啟動SQL Server 實例。
為驗證故障原因,經檢查發現數據庫磁盤MSSQLData目錄下確實發現大量trc 文件,單個文件大小200MB,共有近200GB 的磁盤空間。初步判斷已找到罪魁禍首。
登錄到數據庫服務器上,打開SQL 服務器屬性,在安全性標簽頁下,將啟用C2 審核跟蹤選項前的勾選取消,如圖1 所示。并刪除文件夾下的全部trc 文件,從而釋放了很多的磁盤空間。
由于C2 審核跟蹤可以用sp_configure 激活或取消。要禁用C2 審核跟蹤,就要將C2 審核模式選項值配置為0。于是,我們也可以通過命令語句禁用C2,具體命令如下:

最后,由于C2 審核跟蹤的啟動和禁用都要求服務重啟。在重啟SQL 服務后,再沒有出現SQL 服務自動停止現象,故障徹底解決。
一般情況下,SQL 數據庫的C2 審核跟蹤是不需要開啟的,除非是網絡安全要求,需要進行詳細的日志記錄。此時開啟C2 審核之后,一定要給予足夠的數據庫磁盤空間,或者定時清理過期日志,并對磁盤空間進行嚴密監控。否則的話一旦出現磁盤空間不足,會導致SQL 服務自動停止,導致所有業務中斷,造成不可估量的損失。