SQL Server 日志和代理的錯誤日志


本文介紹的日志不是事務日志,而是SQL Server 日志和代理的錯誤日志,按照主體把錯誤日志分為SQL Server、SQL Server Agent、Database Mail,以及 Windows NT。SQL Server使用日志記錄數據庫引擎啟動和運行過程中產生的信息,這些信息不一定是“錯誤”的消息,按照消息的嚴重程度,分為三個級別,分別是:信息(Information),警告(Warning)和錯誤(Error),SQL Server日志會按照消息發生的時間順序記錄消息。SQL Server日志用於記錄SQL Server 引擎產生的消息,SQL Server Agent錯誤日志用於記錄Agent運行過程中產生的信息。

一,存儲日志的文件

默認情況下,日志文件存放的路徑:C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Log,系統維護 7 個SQL Server日志文件,文件名分別是: ErrorLog,ErrorLog.n(n=1、2、3、4、5、6),其中,ErrorLog 文件是當前活躍的文件,包含最新的信息,ErrorLog.6 文件記錄最早產生的消息。SQL Server每次都把消息記錄在最新的文件ErrorLog中。生產環境中,ErrorLog文件的大小(Size)可能會很大,因此,需要定期清理這個錯誤日志文件,更新的方式是循環更新(Cycle),所謂循環更新的流程,是指:刪除 ErrorLog.6 文件,將ErrorLog.5重命名為ErrorLog.6,依次類推,直到將ErrorLog重命名為ErrorLog.1,最后新建一個ErrorLog文件,用於記錄SQL Server 運行過程中產生的信息。

系統維護10個SQL Server Agent 錯誤日志文件,代理錯誤日志文件存放的路徑是:C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Log,文件名分別是是:SQLAgent.out、SQLAgent.n(n=1、2、3、4、5、6、7、8、9),其中SQLAgent.out記錄代理當前的消息,其更新方式和SQL Server日志文件相同。

用戶可以通過修改啟動參數來修改日志文件的默認存儲路徑:修改以 –e開頭的啟動參數,把該參數后面的路徑修改為新的路徑,就可以將錯誤日志存放到指定的路徑下,更新只有在重啟服務之后,才會生效。

SQL Server日志和代理的錯誤日志文件,都使用循環更新來控制文件的大小,啟動日志循環更新的進程,有2種觸發方式:重啟 SQL Server 實例,手動執行循環更新。通常來說,錯誤日志的大小是不受限制的,單個日志文件太大,這會導致文件的打開和查看都十分耗時。在實際操作中,通常需要建立一個Job定時去執行該存儲過程,這樣可以把日志文件的大小控制在合理的范圍之內。

二,使用日志查看器查看消息

用戶可以使用日志查看器來查看日志的內存,也可以使用TSQL命令。用戶打開Management查看SQL Server Logs,選中"Current-xxx"來查看當前的日志文件,雙擊使用日志查看器打開日志。

用戶也可以右擊SQL Server Logs,對日志文件進行配置和Recycle,在日志查看器中,也可以通過Filter或Search來過濾和搜索日志。

三,使用TSQL 腳本查看消息

TSQL提供多個系統存儲過程,用於查看日志文件的內容,對日志文件進行Recycle。

1,查看Errorlog的元數據

使用 sys.xp_enumerrorlogs 查看 ErrorLog 文件的創建日期和大小,其創建日期就是第一條記錄插入的日期。

exec sys.xp_enumerrorlogs

2,讀取ErrorLog的信息

SQL Server提供了存儲過程sys.xp_readerrorlogsys.sp_readerrorlog,用於查看錯誤日志。

sys.xp_readerrorlog 存儲過程有7個參數,按照參數的順序,它們依次是:

  1. @Archive,存檔編號(0~99),其值是 sys.xp_enumerrorlogs返回的Archive#字段的值, 默認值是0,0 代表的是ErrorLog,1代表的是ErrorLog.1。
  2. @Logtype,日志類型,有效值是1和2,1代表SQL Server日志,2代表SQL Server Agent日志,默認值是1。
  3. @SearchText1,查詢包含的字符串,大小是255,默認值是null,
  4. @SearchText2,查詢包含的字符串,大小是255,默認值是null,參數3和參數4的邏輯關系是and(與關系),表示同時包含這兩個文本。
  5. @StartTime,消息的開始時間
  6. @End'Time,消息的結束時間
  7. @Order,對結果排序,按LogDate排序(Desc、Asc)對輸出結果排序

sys.sp_readerrorlog有四個參數,和sys.xp_readerrorlog的前四個參數相同,sys.sp_readerrorlog內部使用sys.xp_readerrorlog來實現。

查看登陸失敗的錯誤日志,可以看到參數4和參數5是過濾Text字段。

exec sys.sp_readerrorlog 0,1,'login','failed'

3,ErrorLog的循環更新

日志使用(Rollover)方式更新日志文件,如果當前活躍的ErrorLog 的文件很大,那么加載和查看的過程十分緩慢,可以運行 sys.sp_cycle_errorlog 或 DBCC ErrorLog,手動強制ErrorLog 文件迭代,避免單個ErrorLog的文件過大。

切換ErrorLog,查看ErrorLog 文件的信息

dbcc errorlog

對代理的錯誤日志文件進行迭代:

exec sp_cycle_agent_errorlog

每次啟動 SQL Server 時,ErrorLog會自動迭代。由於ErrorLog的循環更新(Rollover)會刪除最早創建的ErrorLog.6 文件,如果需要保存ErrorLog,在執行 sys.sp_cycle_errorlog 或 DBCC ErrorLog 之前,需要將ErrorLog.6 文件復制到其他存儲介質上。

 

參考文檔:

SQL Server 錯誤日志過濾(ERRORLOG)

SQL Server 錯誤日志收縮(ERRORLOG)

SQL SERVER – Read Error Log Data using sp_readerrorlog – System Stored Procedure

Reading the SQL Server log files using TSQL

Searching through the SQL Server error logs


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM