2011-03-31 25 views
0

我剛開始嘗試使用SQL Server警報。我設置了一個閾值爲零的錯誤警報/秒,認爲每次將錯誤寫入日誌時我都會收到一封電子郵件。我收到了很多電子郵件!我提高了門檻,當它每秒超過一次時通知我,並且我不時收到不少電子郵件。SQL Server 2005:爲什麼我會收到錯誤/秒的警報,但日誌中沒有錯誤?

舉個例子,我得到一個包含這樣的電子郵件:

DESCRIPTION: The SQL Server performance counter 'Errors/sec' (instance '_Total') of object 'MyServerName:SQL Errors' is now above the threshold of 1.00 (the current value is 4.45). 

下面是我使用的警報的命令:

EXEC msdb.dbo.sp_add_alert @name=N'SQL Errors', 
     @message_id=0, 
     @severity=0, 
     @enabled=1, 
     @delay_between_responses=0, 
     @include_event_description_in=1, 
     @notification_message=N'Check the ERRORLOG for details.', 
     @category_name=N'[Uncategorized]', 
     @performance_condition=N'MyServerName:SQL Errors|Errors/sec|_Total|>|0', 
     @job_id=N'00000000-0000-0000-0000-000000000000' 

當我看看日誌,我沒有發現任何錯誤。不過,我確實發現了信息性消息(完成了備份等)。這個警報真的是「Entries/sec」,而不是真正的「Errors/sec」,還是我看錯了地方(SSMS |服務器|管理| SQL Server日誌|當前

+0

如果我嘗試'SELECT * FROM sys.dm_os_performance_counters WHERE counter_name =「錯誤/ sec''然後'DECLARE @I INT = 1000000; WHILE(@I> 0)BEGIN RAISERROR('%d',0,1,@ I)SET @I = @I -1 END'即使是嚴重性爲零的錯誤也會增加「用戶錯誤」計數。 – 2011-03-31 21:38:23

回答

2

所有錯誤都不會被記錄,一個insert可能會被執行,可能會打破一個約束,錯誤會引發到客戶端,但這並不意味着它被記錄在錯誤日誌中。

例如,如果您執行以下t-sql。

RAISERROR ('This is an error!', 16, 1) WITH LOG

錯誤將在錯誤日誌中記錄,ommitting的WITH LOG只會導致不記錄,則引發錯誤。

錯誤有屬性,你可以用它來過濾的,如消息ID,嚴重性,但你用的東西看起來監控所有。嚴重性可能是你需要的。

+0

因此,它給了我所有錯誤的計數,大多數(如果不是全部的話)其實在默認情況下並沒有實際記錄到任何地方?有趣... 我可以選擇將「實例」設置爲_Total,數據庫脫機錯誤,終止連接錯誤,用戶錯誤或信息錯誤。我目前設置爲_Total。在Alert |的歷史記錄選項卡中屬性,它顯示的時間數爲4598.我想我會分解成單獨的警報爲每個實例類型,看看我得到什麼結果。 – 2011-03-31 20:06:37

0

我已閱讀但從未使用警報。基於此,我相信「SQL警報系統」基於Windows應用程序事件日誌中的數據寫入,例如,

  • 開始
  • 程序
  • 管理工具
  • 事件查看器

和 「應用程序」 項下的樣子。 (看看他們的休息,而你在那裏,看到所有那些你從來不知道的缺陷和錯誤。這就像在樹林裏的岩石下找了很多...)

+0

服務器上的EventViewer在應用程序日誌或系統日誌中不顯示任何錯誤。 – 2011-03-31 20:04:42

相關問題