如果在稽核起始期間發生失敗,伺服器將不會啟動。
在此情況下,可以在命令列上使用 –f 選項來啟動伺服器。
當稽核失敗造成伺服器關閉,或是因為已針對稽核指定 ON_FAILURE=SHUTDOWN 而造成伺服器無法啟動時,MSG_AUDIT_FORCED_SHUTDOWN 事件將會寫入記錄檔中。
由於關閉將發生在初次遇到此設定時,所以此事件將會寫入一次。當稽核的失敗訊息造成伺服器關閉之後,將會寫入此事件。
管理員可藉由使用 –m 旗標在單一使用者模式下啟動 SQL Server,以略過稽核所導致的關閉。
如果您在單一使用者模式下啟動,您會將指定 ON_FAILURE=SHUTDOWN 於該工作階段執行的任何稽核降級為 ON_FAILURE=CONTINUE。
當使用 –m 旗標啟動 SQL Server 時,MSG_AUDIT_SHUTDOWN_BYPASSED 訊息將會寫入到錯誤記錄檔。
-- 01_命令提示列_啟動失敗_1067
請參考以下的錯誤訊息:
--
SQL Server 錯誤記錄檔(ERRORLOG)
The server was stopped because SQL Server Audit 'myAudit01' is configured to shut down on failure. To troubleshoot this issue, use the -m flag (Single User Mode) to bypass Audit-generated shutdowns when the server is starting. ... 2011-10-20 15:58:58.38 spid3s 錯誤: 33202,嚴重性: 17,狀態: 1。 2011-10-20 15:58:58.38 spid3s SQL Server Audit could not write to file 'C:\myAdmin\Audit_Logs\myAudit03_8593CB26-3B91-49A3-A547-F43C7027A7F4.sqlaudit'. 2011-10-20 15:58:58.38 spid3s 錯誤: 33206,嚴重性: 17,狀態: 1。 2011-10-20 15:58:58.38 spid3s SQL Server Audit failed to create the audit file 'C:\myAdmin\Audit_Logs\myAudit03_8593CB26-3B91-49A3-A547-F43C7027A7F4.sqlaudit'. Make sure that the disk is not full and that the SQL service account has the required permissions to create and write to the file. ... 2011-10-20 17:17:20.24 spid52 SQL Server Audit failed to create the audit file 'C:\myAdmin\Audit_Logs\myAudit01_D89F669C-1184-4C04-97C0-33E9AED3B593.sqlaudit'. Make sure that the disk is not full and that the SQL service account has the required permissions to create and write to the file. 2011-10-20 17:17:20.24 spid52 The server was stopped because SQL Server Audit 'myAudit01' is configured to shut down on failure. To troubleshoot this issue, use the -m flag (Single User Mode) to bypass Audit-generated shutdowns when the server is starting. ...
--
事件檢視器 Windows 應用程式記錄檔:
事件識別碼:33219 伺服器已停止,因為 SQL Server Audit 'myAudit01' 設定為於失敗時關閉。 如果要對此問題進行疑難排解,請在伺服器啟動時使用 -m 旗標 (單一使用者模式),以略過稽核所產生的關機。
-- 02_事件檢視器_33219
-- 03_事件檢視器_33202
事件識別碼:33202 SQL Server Audit 無法寫入檔案 'C:\myAdmin\Audit_Logs\myAudit03_8593CB26-3B91-49A3-A547-F43C7027A7F4.sqlaudit'。
-- 04_事件檢視器_33206
事件識別碼:33206 SQL Server Audit 無法寫入檔案 'C:\myAdmin\Audit_Logs\myAudit03_8593CB26-3B91-49A3-A547-F43C7027A7F4.sqlaudit'。
可能的解決方案
示範環境:
SQL Server 2008 R2
建議使用:
啟動參數:-m 或 –f 來修復此問題。
請參考以下的範例程式碼:
--01 假設為預設執行個體,在「命令提示字元」視窗,執行: NET START MSSQLSERVER /m -- 若具名執行個體時 NET START MSSQL$執行個體名稱 /m --02 假設為預設執行個體,在 sqlcmd 視窗,執行: -- 停用符合篩選條件式的多個「SQL Server Audit(稽核)」,篩選條件式:「已啟用」、「有設定寫入失敗,關閉伺服器執行個體」 USE master GO DECLARE @tb TABLE(rid INT IDENTITY, auditname sysname) INSERT @tb SELECT name FROM sys.server_audits WHERE on_failure =1 AND is_state_enabled =1 DECLARE @cnt INT=(SELECT MAX(rid) FROM @tb) WHILE @cnt >0 BEGIN DECLARE @auditname sysname = (SELECT auditname FROM @tb WHERE rid=@cnt); EXEC (N'ALTER SERVER AUDIT '+ @auditname +N' WITH (STATE = OFF);') SET @cnt -=1 END GO --03 關閉預設執行個體 SQL Server NET STOP MSSQLSERVER -- 若具名執行個體時 NET STOP MSSQL$執行個體名稱 --04 重新正常啟動 SQL Server NET START MSSQLSERVER -- 若具名執行個體時 NET START MSSQL$執行個體名稱
-- 03_命令提示列_停用稽核
或者,也可以使用 SSMS 管理工具的「物件總管」來停用「SQL Server Audit(稽核)」。
-- 04_物件總管_已經停用稽核
啟動參數 | 描述 |
-f | 啟動只含最小組態的 SQL Server 執行個體。如果組態值設定 (如過度調配記憶體) 造成伺服器無法啟動,這就很有用。 以最低組態模式啟動 SQL Server 會將 SQL Server 放在單一使用者模式下。 |
-m | 當您以單一使用者模式啟動 SQL Server 執行個體。以單一使用者模式啟動 SQL Server 執行個體時,只有單一使用者可以進行連接,且不會啟動 CHECKPOINT 處理序。 CHECKPOINT 會保證將交易規律地從磁碟快取區寫到資料庫裝置。(一般而言,如果遇到一些應該修復系統資料庫的問題時,就會使用這個選項)。 啟用 sp_configure allow updates 選項。根據預設,allow updates 是停用的。在單一使用者模式下啟動 SQL Server 可讓電腦本機管理員群組的任何成員以 sysadmin 固定伺服器角色的成員身分,連接到 SQL Server 的執行個體。 |
參考資料
了解 SQL Server Audit
http://msdn.microsoft.com/zh-tw/library/cc280386.aspx
沒有留言:
張貼留言