我们正在运行 SQL Server 2016 企业版,我正在进行一些故障排除,以了解为什么我的警报不起作用(结果是有人在 SQL Server 启动中添加了 -n 参数)。在故障排除过程中,我注意到许多具有高严重性(> = 18)的内置消息未设置为记录到事件日志中。
use master;
select * from sys.messages
where severity >= 18 and language_id = 1033 and is_event_logged = 0
消息ID | 语言_id | 严重程度 | 已记录事件 | 文本 |
---|---|---|---|---|
21 | 1033 | 20 | 0 | 警告:致命错误 %d 于 %S_DATE 发生。请记下错误和时间,并联系您的系统管理员。 |
第565章 | 1033 | 18 | 0 | 编译查询时服务器中发生堆栈溢出。请简化查询。 |
613 | 1033 | 21 | 0 | 在数据库 %d 中找不到分区 ID 为 %I64d 的工作表行集条目。 |
第669章 | 1033 | 22 | 0 | 行对象不一致。请重新运行查询。 |
第683章 | 1033 | 22 | 0 | 尝试在可变长度和固定长度十进制格式之间进行转换时发生内部错误。运行 DBCC CHECKDB 以检查是否有任何数据库损坏。 |
第684章 | 1033 | 22 | 0 | 尝试在压缩和未压缩存储格式之间进行转换时发生内部错误。运行 DBCC CHECKDB 以检查是否有任何损坏。 |
第685章 | 1033 | 22 | 0 | 尝试检索堆转发记录的反向指针时发生内部错误。 |
第686章 | 1033 | 22 | 0 | 已达到行集 %I64d 的 B 树的最大级别。SQL Server 仅支持最多 255 个级别。 |
第831章 | 1033 | 20 | 0 | 无法取消分配保留的页面。 |
ETC。
据我了解,要使警报发挥作用,必须将消息记录到 Windows 应用程序事件日志中。我没有仔细查看所有这些消息,但许多消息似乎是您希望收到警报的类型,那么为什么所有这些消息(几乎有 100 条)都没有被记录下来呢?