我有一个客户请求将 SNMP 陷阱合并为 SQL Server 中的警报方法。我发现执行此操作的唯一方法是使用 [msdb] 数据库中的 [dbo].[sp_add_alert]。
-- Add Message in sysmessages to be used for the alert
EXEC sp_addmessage
@msgnum = 2624470,
@severity = 1,
@msgtext = 'A DEV GOT SYSADMIN, RUN!',
@lang = 'us_english',
@with_log = 'TRUE'
-- Create an Alert for a user-defined message in sysmessages
EXEC msdb.dbo.sp_add_alert
@name = N'Alert_For_UserDefined_Message',
@message_id = 2624470,
@severity = 0,
@enabled = 1,
@include_event_description_in = 1,
@raise_snmp_trap = 1,
@job_id = N'00000000-0000-0000-0000-000000000000'
-- Raise error to trigger the Alert
RAISERROR (2624470,-1,-1)
但是,当我实际引发错误时,我只收到位于 sysmessages 中的实际消息。
现在,我不太熟悉 SNMP 陷阱,但我觉得好像有一些设置需要定义;无论是在创建警报时还是作为服务器配置中的设置。我在这里错过了什么吗?
我遇到了这个论坛帖子,我从中收集到的所有信息是,在版本 6.5 之后,此功能停止执行任何操作,但没有文档来支持其缺乏功能。
msdb.dbo.sp_add_alert
调用msdb.dbo.sp_add_alert_internal
,它又将值写入msdb.dbo.sysalerts
表中。表
sysalerts
插入看起来像这样:该
@raise_snmp_trap
变量被填充并插入到表中的flags
列中。Microsoft Docsdbo.sysalerts
上的文档说标志列是“保留的”。由于似乎无法通过用户界面访问 SNMP 属性,例如“社区名称”、“陷阱目标”等,我猜SNMP 不再受支持。
事实上,根据 Sean Gallardy - Microsoft(首席现场工程师)的说法: