SQL Server代理(5/12):理解SQL代理錯誤日誌

SQL Server代理是全部實時數據庫的核心。代理有不少不明顯的用法,所以系統的知識,對於開發人員仍是DBA都是有用的。這系列文章會通俗介紹它的不少用法。sql


如咱們在這個系列的前幾篇文章所見,SQL Server代理是由一系列的做業步驟組成,每一個步驟是不一樣類型將要進行的工做。若是你在第4篇所見,SQL Server代理也提供使用數據庫郵件發送提醒的能力。若是出現問題,無論怎樣, 你必須去查看下數據庫郵件錯誤日誌。在這篇文章裏,你會學到如何理解和查看SQL Server錯誤日誌的全部相關知識。你會查看最多見的錯誤日誌,還有理解如何知道當一條信息須要你採起的行動,什麼是對你最直接的信息。一旦你理解了錯誤日誌,當你進行SQL Server代理相關故障排除時,你會節約大量的時間。數據庫

SQL Server代理錯誤日誌

SQL Server代理維護它本身的錯誤日誌,和SQL Server錯誤日誌分開。SQL Server錯誤日誌位置SQL Server所在目錄下的\MSSQL\Log目錄(C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Log,這篇文章使用SQL Server 2008R2做爲默認實例)。SQL Server錯誤日誌默認名爲ERRORLOG(沒有文件擴展名),SQL Server代理錯誤日誌默認名爲SQLAGENTOUT。在這篇文章裏,咱們的大部分時間會花在SQL代理錯誤日誌,無論怎樣,你也須要看下SQL Server錯誤日誌。緩存

查看SQL Server代理錯誤日誌

當你首次瀏覽到\MSSQL目錄,並嘗試查看日誌目錄,極可能你須要請求提高你的權限來得到訪問這個目錄的權限。默認狀況下,SQL Server和SQL Server代理的服務帳號有這個目錄的讀寫權限,但你(使用用戶帳號)不能訪問。若是你是本地管理員,你能夠受權本身訪問後,直接查看日誌文件。如圖1所示,默認的權限和安全設置是這樣的。不要從目錄裏移除你服務帳號的權限,不然SQL Server和SQL Server代理會不能正常工做。安全

插圖1:SQL Server的Log目錄權限服務器

一旦你在\MSSQL\LOG目錄裏,對於SQL Server和SQL Server代理,你都會看到不少日誌文件,原先的日誌文件(只要正常啓動服務,每次都會建立)也在目錄裏。SQLAGENT.OUT文件是SQL Server代理的當前日誌文件,所以這是你要打開的文件。默認狀況下,當你嘗試打開這個文件時,你須要選擇打開這個後綴爲.OUT文件的默認程序。記事本就能夠,當你有另外一個喜愛,你能夠選擇這個擴展文件名的文本查看器(如圖2所示,選擇記事本)。編輯器

插圖2:.OUT文件用記事本打開。工具

一旦選擇後,SQLAGENT.OUT文件會打開,如插圖3所示。sqlserver

插圖3:SQL Server代理錯誤日誌(SQLAGENT.OUT)spa

你很容易發現,應該有更好的方式查看錯誤日誌,沒錯!SSMS有日誌文件查看器,這在第4篇數據庫郵件裏就已經簡單介紹了。切換到錯誤日誌,展開SQL Server代理文件夾,錯誤日誌文件夾,你會看到當前SQL Server代理的日誌還有最近的日誌。雙擊【當前】(或右擊選擇【查看代理日誌】)你會看到SQL Server日誌查看器,在查看器裏當前SQL Server代理的錯誤日誌已被勾選(如插圖4所示)。3d

插圖4:當前SQL Server代理日誌文件的日誌文件查看器

這和在插圖3裏顯示的日誌文件同樣,但看起來更直觀,更好管理。首先你會注意到的是如今事件分爲:信息,警告和錯誤。使用篩選按鈕(如插圖5),你能夠增長本身的篩選條件來限制SQL Server代理錯誤日誌的項目(或SQL Server的任何錯誤日誌,你已經看到,在日誌文件查看器裏,你能夠看到全部的日誌)

插圖5:日誌文件查看器的篩選設置

日誌文件內容

在SQL Server代理日誌的開始就有信息消息。咱們每步都過一遍,簡單介紹下消息的意思。

[393] 正在等待 SQL Server 恢復數據庫...

SQL Server代理服務已經啓動,但還不能配置和運行它,由於msdb數據庫還不可用。SQL Server代理的大部分配置和設置都保存在msdb。部分配置細信息保存在系統註冊表裏。SQL Server不能啓動直到msdb數據庫恢復。消息前的數字(393)是SQL Sever代理的內部信息號,本人從沒見過公開文檔記錄SQL Agent的錯誤編號。

[100] Microsoft SQLServerAgent 版本 10.50.1600.1 (內部版本號 x86 unicode 零售): 進程 ID 3412

這是一條很是有用的信息。SQL Server代理版本號(即版本、服務包、和修補程序)。在此例中,它是SQL Server 2008 R2,採用sp1更新包。你能夠在SQLServerCentral找到版本號。
接下來的事情是,這是一個SQL Server x86版本(即32位),這是一個標準的零售版本的產品。最後,對SQL Server代理服務的Windows進程ID標識。若是你使用Windows故障排除工具(即便是簡單的任務管理器),你會看到一個進程ID,這將幫助 你把SQL Server代理服務關聯到Windows信息。

插圖6:有PID列顯示的任務管理器

[101] SQL Server PC201510181429 版本 10.50.1600 (鏈接限制: 0)

這一消息標識SQL服務器的名稱(PC201510181429),以及SQL Server的版本號。注意「0鏈接限制」--便是沒有特定的配置,所以容許無限的鏈接(直到耗盡內存)。

[102] SQL Server ODBC 驅動程序版本 10.50.1600
[103] 驅動程序使用的 NetLib 是 DBNETLIB.DLL;本地主機服務器是

這兩則消息代表使用ODBC的版本號(SQL Server代理使用ODBC鏈接回SQL服務器本地副本,事實上,它是用當地的DBNETLIB.DLL爲鏈接。

[310] 檢測到 2 個處理器和 3327 MB RAM
[339] 本地計算機是 PC201510181429,運行的是 Windows NT 6.1 (7601) Service Pack 1

接下來的兩行顯示的SQL服務器CPU和內存配置,以及Windows版本。

[432] 子系統緩存中有 12 個子系統

這是第二篇(SQL Server代理做業步驟和子系統)討論過的SQL Server代理子系統。做業下有各類類型能夠運行子系統(如CmdExec、ActiveX 腳本)以及一些支持複製,分析服務的子系統,你能夠在msdb.dbo.syssubsystems表中查看子系統清單。

[364] 還沒有啓動 Messenger 服務 - 將不發送 NetSend 通知

雖然這個歸類爲一個錯誤,在大部分系統上你能夠安全地忽略。Net send通知,已經從SQL Server的幾個版本中取消,而且相關的Windows服務默認不是開啓的。若是你還在使用Net send消息,看到了這樣的錯誤,你須要更改Windows Messenger服務爲自動啓動。

[129] SQLSERVERAGENT 在 Windows NT 服務控制下啓動

這個消息代表,SQL Server代理做爲服務啓動,而不是在命令提示符窗口。

[260] 沒法啓動郵件會話(緣由: Microsoft.SqlServer.Management.SqlIMail.Server.Common.BaseException: 沒法從數據庫中讀取郵件配置信息。......

[355] 郵件系統初始化失敗;請檢查配置設置

這些消息代表在數據庫郵件配置中出錯。回顧第四篇數據庫郵件,查看是否有相似的問題。

[396] 還沒有定義空閒 CPU 條件 - OnIdle 做業計劃將不起任何做用

這條警告代表一個SQL Server代理設置沒有配置,可能阻止某些做業運行。你能夠設置做業在CPU「空閒」時運行(在第一篇提到過)。然而,在這個系統中空閒的定義尚未被 設置。在SSMS配置此選項,右擊SQL Server代理,選擇屬性,而後單擊高級選項卡。配置空閒CPU條件如插圖7所示

插圖7:配置空閒CPU條件

你能夠想象,在你的SQL Server代理錯誤日誌還會有許多其餘的錯誤,你應該按期檢查日誌。請牢記,代理日誌不是用來排查做業故障的,你須要查看每一個失敗做業步驟的歷史記錄。咱們在後續章節會作更多的故障排除。

配置SQL Server代理錯誤日誌

您能夠在SSMS中配置一些SQL Server代理錯誤日誌的屬性,另外一些屬性須要使用註冊表編輯器(這是不支持的,因此不建議在生產系統)。
右 擊SSMS中SQL Server代理->錯誤日誌,你會看到一組選項。首先是「配置」,選擇該選項,你會看到相似插圖8。你能夠更改SQL Server代理錯誤日誌文件的存放位置(不推薦),一樣能夠更改代理日誌級別。這些設置不能憑直觀分辨–若是你勾選「錯誤」,你會看到錯誤和信息性消 息。若是你勾選「警告」,你會看到警告和信息性消息。若是你只勾選信息,在錯誤日誌中你看不到任何錯誤或警告消息。
對話框中另外一選項是,寫入OEM錯誤日誌,意味着寫一個非Unicode的錯誤日誌文件。理論上你能夠經過它節省空間,但也不推薦。

插圖8——配置SQL Server代理

退出插圖8,右擊錯誤日誌,另外一個選項是「回收」。此選項會關閉現有的SQL Server代理錯誤日誌並開始一個新的日誌文件,重命名當前SQLAGENT.OUT文件爲SQLAGENT.1(全部舊的文件後綴數字遞增,如 SQLAGENT.1變成SQLAGENT.2)。若是你要將當前的日誌文件發送給SQL Server產品支持,這樣操做將很是有用。
SQL Server代理一些其餘配置需在註冊表中設置(事實上,上面所作操做的設置都會更改註冊表中對應的鍵值)。記住不建議直接修改註冊表,因此更改這些設置 要你本身承擔風險。然而,若是你想查看可用的設置(一些SQL Server代理設置只能在註冊表中修改),你能夠在註冊表中SQL Server實例下查看可用的註冊表鍵設置。例如,在個人機器上,註冊表鍵位於HKEY_LOCAL_MACHINE\SOFTWARE \Microsoft\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\SQLServerAgent,如插圖9所示

插圖9:SQL Server代理的註冊表項

若是你的SQL Server代理配置真的有問題時,可能須要描述(或導出)這些設置給產品支持。

下篇預告

SQL Server代理錯誤日誌包含不少有用信息(SQL Server代理,SQL Server和Windows服務器)。你可使用錯誤日誌解決SQL Server代理服務中的錯誤,並瞭解日誌中常見的信息。本文還介紹瞭如何解決SQL Server代理中一些最多見的錯誤。
有了前面的SQL Server代理基礎知識,第六篇將深刻挖掘SQL Server代理做業步驟和工做流。

原文連接:http://www.sqlservercentral.com/articles/Stairway+Series/72456/

相關文章
相關標籤/搜索