【譯】第五篇 SQL Server代理理解代理錯誤日志


本篇文章是SQL Server代理系列的第五篇,詳細內容請參考原文


正如這一系列的前幾篇所述,SQL Server代理作業是由一系列的作業步驟組成,每個步驟由一個獨立的類型去執行。在第四篇中我們看到,SQL Server代理可以通過數據庫郵件發送通知。如果有什么不正確的,你必須查看數據庫郵件日志。在這一篇,你將學習如何理解和查看所有相關的SQL Server代理錯誤日志。你將回顧最常見的錯誤信息,掌握哪些信息需要你采取行動,哪些信息只是單純的信息而已。一旦你理解錯誤日志,在處理SQL Server代理問題時將節省大量的時間。
SQL Server代理錯誤日志
SQL Server代理維護自己的ErrorLog(與數據庫ErrorLog分開)。數據庫ErrorLog位於XX\MSSQL\Log目錄下面。數據庫Errorlog默認命名為ERRORLOG(沒有文件擴展名),數據庫代理Errorlog默認命名為SQLAGENT.OUT。這篇文章我們將花費大部分的時間來理解數據庫代理Errorlog,但是你同樣需要理解數據庫Errorlog。
回顧SQL Server代理錯誤日志
當你第一次瀏覽上面提到的\MSSQL\目錄,然后試圖查看Log目錄,你可能會得到一個請求來提升你的特權以獲得對應目錄的權限。默認情況下,SQL Server和SQL Server代理服務帳戶有讀/寫目錄的權限,但你(使用用戶帳戶)是沒有權限的。如果你是本地管理員,你可以給自己賦權,然后直接查看日志文件。一個權限的例子,如圖5.1所示,顯示默認存在的安全設置。不要刪除服務帳戶對這個目錄的權限,否則SQL Server和/或SQL Server代理可能無法正常運行。

圖5.1 SQL Server日志路徑屬性
一旦你在\MSSQL\LOG目錄,你將看到SQL Server和SQL Server代理的日志文件。默認情況下,以前的日志文件(每次啟動服務時創建)也保存在目錄。SQLAGENT.OUT文件是當前的SQL Server代理日志文件,因此這個文件就是你想要打開的。默認情況下,當你試圖打開這個文件時,會要求選擇你想用來打開此文件的程序。通常記事本足夠查看此類文件,但如果你有一個更好的,選擇你喜歡的文本文件查看器與文件關聯(選擇記事本,如圖5.2所示)。

圖5.2 關聯記錄本打開.OUT文件
一旦選擇好,SQLAGENT.OUT文件將打開,如圖5.3所示

圖5.3 SQL Server代理錯誤日志
你可以很容易地看到,應該有一個更好的方式來查看Errorlog。SSMS有一個日志文件查看器,我們在第四篇的數據庫郵件中簡單的使用過。展開SQL Server代理文件夾,然后錯誤日志文件夾,你會看到一個列表中包含當前SQL Server代理錯誤日志和最近幾個錯誤日志。雙擊當前日志(或右鍵單擊並選擇“查看代理日志”),你會看到SQL Server日志文件查看器,當前的SQL Server代理錯誤日志(如圖5.4所示)。

圖5.4 日志文件查看器查看當前代理錯誤日志
這和圖5.3中用記事本的是同一個日志文件,但有更多的組織和管理。第一件你注意到的事情就是事件分為信息、警告、錯誤類別。使用篩選器按鈕(圖5.5),你可以添加自己的標准來限制在SQL Server代理錯誤日志視圖(你可能注意到日志文件查看器中可以查看任何SQL Server中的錯誤日志)。

圖5.5 日志文件查看器篩選設置
日志文件內容
信息性消息,通常在SQL Server代理日志的開頭。讓我們簡單查看下信息的含義。
[393] 正在等待SQL Server恢復數據庫…
這意味着SQL Server代理服務啟動,但尚未能夠配置和運行因為msdb數據庫尚不可用。對於SQL Server代理主要的配置設置存儲在msdb庫。少量的設置保存在Windows的系統注冊表。msdb恢復前SQL server代理無法使用。消息前面的數字是SQL Server代理內部的錯誤編號。本人從沒見過公開文檔記錄SQL Agent的錯誤編號。
[100] Microsoft SQLServerAgent 版本 10.50.1600.1 (內部版本號 x86 unicode 零售): 進程 ID 5280
這是一條非常有用的信息。SQL Server代理版本號(即版本、服務包、和修補程序)。在此例中,它是SQL Server 2008 R2,采用sp1更新包。你可以在SQLServerCentral找到版本號。
接下來的事情是,這是一個SQL Server x86版本(即32位),這是一個標准的零售版本的產品。最后,對SQL Server代理服務的Windows進程ID標識。如果你使用Windows故障排除工具(即使是簡單的任務管理器),你會看到一個進程ID,這將幫助你把SQL Server代理服務關聯到Windows信息。在圖5.6中

圖5.6 任務管理器中的進程
[101] SQL Server USER-67NP5R8LGK\SQL08R2 版本 10.50.1600 (連接限制: 0)
這一消息標識SQL服務器的名稱(USER-67NP5R8LGK\SQL08R2),以及SQL Server的版本號。注意“0連接限制”--即是沒有特定的配置,因此允許無限的連接(直到耗盡內存)。
[102] SQL Server ODBC 驅動程序版本 10.50.1600
[103] 驅動程序使用的 NetLib 是 DBNETLIB.DLL;本地主機服務器是 USER-67NP5R8LGK\SQL08R2
這兩則消息表明使用ODBC的版本號(SQL Server代理使用ODBC連接回SQL服務器本地副本,事實上,它是用當地的DBNETLIB.DLL為連接。
[310] 檢測到 4 個處理器和 3018 MB RAM
[339] 本地計算機是 USER-67NP5R8LGK,運行的是 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] SQLAgent$SQL08R2 在 Windows NT 服務控制下啟動
這個消息表明,SQL Server代理作為服務啟動,而不是在命令提示符窗口。
[260] 無法啟動郵件會話(原因: 沒有定義郵件配置文件)
[355] 郵件系統初始化失敗;請檢查配置設置
這些消息表明在數據庫郵件配置中出錯。回顧第四篇數據庫郵件,查看是否有類似的問題。
[396] 尚未定義空閑 CPU 條件 - OnIdle 作業計划將不起任何作用
這條警告表明一個SQL Server代理設置沒有配置,可能阻止某些作業運行。你可以設置作業在CPU“空閑”時運行(在第一篇提到過)。然而,在這個系統中空閑的定義還沒有被設置。在SSMS配置此選項,右擊SQL Server代理,選擇屬性,然后單擊高級選項卡。配置空閑CPU條件如圖5.7所示

圖5.7 設置空閑CPU條件
你可以想象,在你的SQL Server代理錯誤日志還會有許多其他的錯誤,你應該定期檢查日志。請牢記,代理日志不是用來排查作業故障的,你需要查看每個失敗作業步驟的歷史記錄。我們在后續章節會做更多的故障排除。
配置SQL Server代理錯誤日志
您可以在SSMS中配置一些SQL Server代理錯誤日志的屬性,另一些屬性需要使用注冊表編輯器(這是不支持的,所以不建議在生產系統)。
右擊SSMS中SQL Server代理->錯誤日志,你會看到一組選項。首先是“配置”,選擇該選項,你會看到類似圖5.8。你可以更改SQL Server代理錯誤日志文件的存放位置(不推薦),同樣可以更改代理日志級別。這些設置不能憑直觀分辨–如果你勾選“錯誤”,你會看到錯誤和信息性消息。如果你勾選“警告”,你會看到警告和信息性消息。如果你只勾選信息,在錯誤日志中你看不到任何錯誤或警告消息。
對話框中另一選項是,寫入OEM錯誤日志,意味着寫一個非Unicode的錯誤日志文件。理論上你可以通過它節省空間,但也不推薦。

圖5.8 配置SQL Server代理錯誤日志
退出圖5.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,如圖5.9所示

圖5.9 SQL Server代理注冊表項
如果你的SQL Server代理配置真的有問題時,可能需要描述(或導出)這些設置給產品支持。
下一篇
SQL Server代理錯誤日志包含很多有用信息(SQL Server代理,SQL Server和Windows服務器)。你可以使用錯誤日志解決SQL Server代理服務中的錯誤,並了解日志中常見的信息。本文還介紹了如何解決SQL Server代理中一些最常見的錯誤。
有了前面的SQL Server代理基礎知識,第六篇將深入挖掘SQL Server代理作業步驟和工作流。


免責聲明!

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



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