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
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...