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

来源:http://www.cnblogs.com/woodytu/archive/2016/02/16/5177611.html
-Advertisement-
Play Games

SQL Server代理是所有實時資料庫的核心。代理有很多不明顯的用法,因此系統的知識,對於開發人員還是DBA都是有用的。這系列文章會通俗介紹它的很多用法。 如我們在這個系列的前幾篇文章所見,SQL Server代理是由一系列的作業步驟組成,每個步驟是不同類型將要進行的工作。如果你在第4篇所見,SQ


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代理->錯誤日誌,你會看到一組選項。首先是“配置”,選擇該選項,你會看到類似圖5.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代理作業步驟和工作流。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一:藍牙設備之間的通訊首要包含了四個進程 設置藍牙設備 尋覓區域網內也許或許匹配的設備 銜接設備 設備之間的數據傳輸 二:詳細編程完結 1. 發動藍牙功用 首要經過調用靜態辦法getDefaultAdapter()獲取藍牙適配器BluetoothAdapter,假如回來為空,則無法繼續執行了。例如安
  • 前言: QQ表情包就用到瞭解壓縮,從網路下載的那麼多表情文件格式並不是一個一個圖片文件,而是多個圖片壓縮而成的表情壓縮包。下麵介紹的是iOS開發中會用到的壓縮和解壓縮的第三方框架的使用。 註意: 這個第三方框架代碼文件夾是SSZipArchive,使用cocoapods搜索也是搜索SSZipArch
  • in 和 exists 已經成為我們日常查詢時候的常客了。很多時候他們2個都是可以互通實現的,但是,無論兄弟怎麼親,還是會有那麼一些差別的。 先搞個測試表 CREATE TABLE #Tmp1(ID INT,Col1 NVARCHAR(50)) CREATE TABLE #Tmp2(ID INT,T
  • 一、關係 MongoDB 的關係表示多個文檔之間在邏輯上的相互聯繫。文檔間可以通過嵌入和引用來建立聯繫。MongoDB 中的關係可以是:1對1,1對多,多對1,多對多。 一個用戶可以用多個地址,這是典型的一對多關係。 user文檔可以是: { "_id":ObjectId("52ffc33cd852
  • //帶參數的SQL語句 private void sql_param() { SqlConnection conn = new SqlConnection("server=WIN-OUD59R7EHCH;uid=sa;pwd=123456;database=china"); string sql =
  • 最新在看sql註入與防禦這個本,在第32頁上,有個說明:用於顯示資料庫執行語句的信息,比如having 1=1. 本人 資料庫:mysql 版本:5.1.66 執行:select * from aa where id=2 having 1=1; --將註入轉化為實際的sql,簡寫。 結果:是有正確結
  • 原文鏈接:http://www.cnblogs.com/chenty/p/5191777.html 工作中嘗嘗會遇到各種資料庫性能調優,除了查看某條SQL執行時間長短外,還需要對系統的整體處理能力有更全局的掌握。 QPS:Query per second,每秒查詢量 TPS:Transaction
  • 現象:某個架構始終不能更新 VS中使用SSDT很方便,進行架構比對時,可以選擇性的更新。但在排除操作上,要相當謹慎。往往排除的並不是一個差異項。 如下圖,表或視圖的差異,如果有多處,可以選擇某個差異排除,也可以基於整表排除。以此類推,如果上面的"架構"也選擇了整體排除,結果是災難的,整個架構都不能更...
一周排行
    -Advertisement-
    Play Games
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...