新疆 崔良義
近日,一直運(yùn)行很穩(wěn)定的SQL Server 2005 數(shù)據(jù)庫服務(wù)器突然發(fā)生了無法連接數(shù)據(jù)庫的問題,造成單位大面積的業(yè)務(wù)用戶無法登錄系統(tǒng)。
由于情況緊急,重啟數(shù)據(jù)庫服務(wù)器后,系統(tǒng)恢復(fù)正常。但是,幾個(gè)小時(shí)后,又出現(xiàn)了相同的故障問題,如此反復(fù)。
圖1 取消啟用C2 審核跟蹤選項(xiàng)前的勾選
根據(jù)故障時(shí)間,通過查看服務(wù)器事件日志,發(fā)現(xiàn)了事件ID566 的記錄,提示編寫審核跟蹤時(shí)出錯(cuò),SQL Server 即將關(guān)閉,可能原因是磁盤空間不足。
通過查看數(shù)據(jù)庫磁盤空間與系統(tǒng)服務(wù),發(fā)現(xiàn)還剩余4GB 空間,服務(wù)已停止。當(dāng)再次出現(xiàn)系統(tǒng)故障后,發(fā)現(xiàn)僅剩1.5GB 空間,且SQL Server 服務(wù)再次自動(dòng)中斷了。
那么,是什么原因讓數(shù)據(jù)庫磁盤空間減少得如此之快了?與數(shù)據(jù)庫服務(wù)自動(dòng)中斷又有什么關(guān)系?
在排除服務(wù)器中病毒原因后,圍繞事件日志提示信息以及服務(wù)器操作變動(dòng),聯(lián)想到近期因服務(wù)器等級(jí)保護(hù)制度要求,啟用了SQL Server C2審核跟蹤。
原來,C2 審核跟蹤會(huì)審核語句和對(duì)象的所有訪問,并將它們記錄在數(shù)據(jù)庫MSSQLData 目錄下。如果審核日志文件大小達(dá)到最大限制值時(shí),SQL Server 會(huì)關(guān)閉舊文件,并新建一個(gè)文件,將所有新的審核數(shù)據(jù)記錄到新文件中。
此過程會(huì)一直持續(xù)到審核數(shù)據(jù)目錄寫滿或關(guān)閉審核跟蹤為止。如果日志目錄空間不足,SQL Server 會(huì)將自身關(guān)閉,這可用來保證即便出現(xiàn)了磁盤錯(cuò)誤,也不可能丟失任何審核數(shù)據(jù),直至為審核日志釋放出足夠的磁盤空間并重新啟動(dòng)SQL Server 實(shí)例。
為驗(yàn)證故障原因,經(jīng)檢查發(fā)現(xiàn)數(shù)據(jù)庫磁盤MSSQLData目錄下確實(shí)發(fā)現(xiàn)大量trc 文件,單個(gè)文件大小200MB,共有近200GB 的磁盤空間。初步判斷已找到罪魁禍?zhǔn)住?/p>
登錄到數(shù)據(jù)庫服務(wù)器上,打開SQL 服務(wù)器屬性,在安全性標(biāo)簽頁下,將啟用C2 審核跟蹤選項(xiàng)前的勾選取消,如圖1 所示。并刪除文件夾下的全部trc 文件,從而釋放了很多的磁盤空間。
由于C2 審核跟蹤可以用sp_configure 激活或取消。要禁用C2 審核跟蹤,就要將C2 審核模式選項(xiàng)值配置為0。于是,我們也可以通過命令語句禁用C2,具體命令如下:
最后,由于C2 審核跟蹤的啟動(dòng)和禁用都要求服務(wù)重啟。在重啟SQL 服務(wù)后,再?zèng)]有出現(xiàn)SQL 服務(wù)自動(dòng)停止現(xiàn)象,故障徹底解決。
一般情況下,SQL 數(shù)據(jù)庫的C2 審核跟蹤是不需要開啟的,除非是網(wǎng)絡(luò)安全要求,需要進(jìn)行詳細(xì)的日志記錄。此時(shí)開啟C2 審核之后,一定要給予足夠的數(shù)據(jù)庫磁盤空間,或者定時(shí)清理過期日志,并對(duì)磁盤空間進(jìn)行嚴(yán)密監(jiān)控。否則的話一旦出現(xiàn)磁盤空間不足,會(huì)導(dǎo)致SQL 服務(wù)自動(dòng)停止,導(dǎo)致所有業(yè)務(wù)中斷,造成不可估量的損失。