我迄今为止完成的测试似乎表明,需要为<all databases>
数据库名称而不是单个命名数据库定义以下阈值警报:
- 未发送日志阈值(错误消息 32042)
- 最早未发送交易阈值(错误消息 32040)
- 未恢复的日志阈值(错误消息 32043)
- 镜像提交开销阈值(错误消息 32044)
这与微软提供的文档形成了对比:
我已确认错误编号 32040、32042、32043 和 32044 已写入 SQL Server 日志,如下所示sp_altermessage
:
/* Unsent Log Threshold (http://msdn.microsoft.com/en-us/library/aa337325.aspx) */
sp_altermessage 32042, 'WITH_LOG', TRUE
如果你成功了,请描述一下你采取的行动导致单个数据库出现阈值警报。
谢谢。
答案1
根据您的列表,我假设当您选择所有数据库时会触发警报,但选择特定数据库时不会触发警报。
数据库监控SQL Agent作业的流程如下:
- 定期执行 sys.dbmonitorupdate(例如每分钟一次)。此调用执行以下操作:
- 从 sys.dm_os_performance_counters 中检索值
- 插入 msdb.dbo.dbm_monitor_data
- 当达到阈值时,会出现错误
- 至于警报,它可能不会触发,因为 sp_dbmmonitorupdate 处于 msdb 上下文中。因此,您不会针对单个数据库触发警报,但会针对所有数据库触发警报。
我不知道这是普遍现象还是后来被修复了 - 但我确实看到了这种情况。因此,如果这描述了您的情况并且不想使用“所有数据库” - 那么您需要编写自己的检测程序和作业来解决这个问题(也可能有其他解决方案 - 但您没有选择更改上述系统存储过程并仍然保持支持)。