用于服务器事件类和属性的 WMI 提供程序

适用范围:SQL Server

有两个主要类别的事件构成 WMI 提供程序服务器事件的编程模型,可以通过针对提供程序发出 WQL 查询来查询这些事件。 这些是数据定义语言(DDL)事件和跟踪事件。 QUEUE_ACTIVATION BROKER_QUEUE_DISABLED还可以查询 Service Broker 事件。

事件和事件组

若要获取服务器事件的完整列表,请使用以下 Transact-SQL 脚本查询 sys.event_notification_event_types 目录视图。

; WITH EventsCTE (Child, Level, Hierarchy)
AS (
    SELECT t.[type],
        0,
        CAST(t.[type_name] AS NVARCHAR(MAX))
    FROM sys.event_notification_event_types t
    WHERE t.parent_type IS NULL

    UNION ALL

    SELECT t.[type],
        Level + 1,
        CAST(rc.Hierarchy + '/' + cast(t.[type_name] AS NVARCHAR(MAX)) AS NVARCHAR(MAX))
    FROM sys.event_notification_event_types t
    INNER JOIN EventsCTE rc
        ON t.parent_type = rc.Child
    )
SELECT Level, Hierarchy
FROM EventsCTE
WHERE Level > 0
ORDER BY Hierarchy;

注解

例如,事件 DDL_ASSEMBLY_EVENTS 包括任意 ALTER_ASSEMBLY事件 CREATE_ASSEMBLYDROP_ASSEMBLY 事件。 同样,事件 TRC_FULL_TEXT 包括任何 FT_CRAWL_ABORTED事件 FT_CRAWL_STARTEDFT_CRAWL_STOPPED 事件。 ALL_EVENTS 涵盖所有 DDL 事件、跟踪事件 QUEUE_ACTIVATIONBROKER_QUEUE_DISABLED

若要了解可以通过事件或事件组查询的属性,请参考事件架构。 默认情况下,事件架构安装在以下目录中:

C:\Program Files\Microsoft SQL Server\nnn\Tools\Binn\schemas\sqlserver\2006\11\events\events.xsd

例如,通过引用 ALTER_DATABASE 事件,其父事件是 DDL_SERVER_LEVEL_EVENTS 且其属性为 TSQLCommandDatabaseName。 该事件还继承属性 SQLInstancePostTimeComputerNameSPIDLoginName。 该事件没有子事件。

注意

执行 DDL 式操作的系统存储过程还可以激发事件通知。 测试您的事件通知以确定它们是否响应运行的系统存储过程。 例如, CREATE TYPE 语句和 sp_addtype 存储过程都会触发在事件上 CREATE_TYPE 创建的事件通知。 有关详细信息,请参阅 DDL 事件