sql server代理是所有實時數據庫的核心。代理有很多不明顯的用法,因此系統的知識,對于開發人員還是dba都是有用的。這系列文章會通俗介紹它的很多用法。
如我們在這個系列的前幾篇文章所見,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所示。
插圖3:sql server代理錯誤日志(sqlagent.out)
你很容易發現,應該有更好的方式查看錯誤日志,沒錯!ssms有日志文件查看器,這在第4篇數據庫郵件里就已經簡單介紹了。切換到錯誤日志,展開sql server代理文件夾,錯誤日志文件夾,你會看到當前sql server代理的日志還有最近的日志。雙擊【當前】(或右擊選擇【查看代理日志】)你會看到sql server日志查看器,在查看器里當前sql server代理的錯誤日志已被勾選(如插圖4所示)。
插圖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/
原文鏈接:https://blog.csdn.net/weixin_33806300/article/details/85803412