sys.event_log(Azure SQL 数据库)

适用于:Azure SQL 数据库

返回成功的Azure SQL 数据库 数据库连接和连接失败。 可以使用此信息来跟踪数据库活动或对其进行故障排除。

注意

对于 具有大量数据库和/或大量登录名的逻辑服务器 ,查询sys.event_log可能会导致 master 数据库中的资源使用率较高,可能会导致登录失败。 若要减少此问题的影响,请限制sys.event_log的查询。

sys.event_log 视图包含以下各列。

列名称 数据类型 描述
database_name sysname 数据库的名称。 如果连接失败,并且用户未指定数据库名称,则此列为空白。
start_time datetime2 聚合间隔开始的 UTC 日期和时间。 对于聚合事件,时间始终为 5 分钟的倍数。 例如:

'2022-03-30 16:00:00'
'2022-03-30 16:05:00'
'2022-03-30 16:10:00'
end_time datetime2 聚合间隔结束的 UTC 日期和时间。 对于聚合事件, End_time 始终比同一行中的相应 start_time 晚 5 分钟。 对于未聚合的事件, start_timeend_time 等于事件的实际 UTC 日期和时间。
event_category nvarchar(64) 生成此事件的高级组件。

有关可能值的列表,请参阅 事件类型
event_type nvarchar(64) 事件类型。

有关可能值的列表,请参阅 事件类型
event_subtype int 发生的事件的子类型。

有关可能值的列表,请参阅 事件类型
event_subtype_desc nvarchar(64) 事件子类型的说明。

有关可能值的列表,请参阅 事件类型
severity int 错误的严重性。 可能的值为:

0 = 信息
1 = 警告
2 = 错误
event_count int 指定时间间隔(start_timeend_time)内指定数据库发生的此事件的次数。
说明 nvarchar(max) 对事件的详细说明。

有关可能值的列表,请参阅 事件类型
additional_data XML 此列未使用,保留为向后兼容性。

事件类型

此视图中每一行记录的事件由类别(event_category)、事件类型(event_type)和子类型(event_subtype)标识。 下表列出了此视图中收集的事件类型。

对于连接类别中的事件,sys.database_connection_stats视图中提供了摘要信息。

注意

此视图不包括可能发生的所有SQL 数据库数据库事件,仅此处列出的事件。 将来的 SQL 数据库 版本中可能会添加其他类别、事件类型和子类型。

event_category event_type event_subtype event_subtype_desc severity 说明
连接 connection_successful 0 connection_successful 0 已成功连接到数据库。
连接 connection_failed 0 invalid_login_name 2 登录名在此版本的 SQL Server 中无效。
连接 connection_failed 1 windows_auth_not_supported 2 在此版本的 SQL Server 中不支持 Windows 登录名。
连接 connection_failed 2 attach_db_not_supported 2 用户请求附加不支持的数据库文件。
连接 connection_failed 3 change_password_not_supported 2 用户已请求更改不受支持的用户登录密码。
连接 connection_failed 4 login_failed_for_user 2 用户 登录失败。
连接 connection_failed 5 login_disabled 2 登录名已禁用。
连接 connection_failed 7 blocked_by_firewall 2 不允许客户端 IP 地址访问该服务器。

权限

有权访问Azure SQL 数据库逻辑服务器上的 master 数据库的用户对此视图具有只读访问权限。

注解

事件聚合

在 5 分钟的间隔内收集和聚合此视图的事件信息。 event_count列表示特定数据库在特定时间间隔内发生的特定event_typeevent_subtype次数。

注意

某些事件(如死锁)不会聚集。 对于这些事件,event_count为 1,start_time,end_time 等于事件发生时的实际 UTC 日期和时间。

例如,如果用户由于登录名无效而无法连接到数据库 Database1,则 2022/30/30(UTC)上的 11:00 到 11:05 之间的 7 次,此信息可在此视图中的单个行中使用:

database_name start_time end_time event_category event_type event_subtype event_subtype_desc severity event_count 说明 additional_data
Database1 2022-03-30 11:00:00 2022-03-30 11:05:00 connectivity connection_failed 4 login_failed_for_user 2 7 Login failed for user. NULL

间隔 start_time 和 end_time

当事件发生在该时间间隔或start_time之后在该间隔end_time之前,事件包含在聚合间隔中。 例如,恰好在 2022-03-30 19:25:00.0000000 发生的事件将只包含在如下所示的第二个间隔内:

start_time                    end_time  
2022-03-30 19:20:00.0000000   2022-03-30 19:25:00.0000000  
2022-03-30 19:25:00.0000000   2022-03-30 19:30:00.0000000  

数据更新

此视图中的数据会随时间推移而累积。 通常,数据将在聚合间隔开始后的一小时内累积,但可能需要多达 24 小时才能使所有数据都出现在此视图中。 在此期间,可能会定期更新单一行中的信息。

数据保留

此视图中的数据最多保留 30 天,或者可能更少,具体取决于数据库数以及每个数据库生成的唯一事件数。 要将此信息保留更长期间,请将数据复制到单独的数据库。 在对视图进行初始复制后,视图中的行可能会随数据的累积而进行更新。 为了使数据副本保持最新状态,请定期对表中的行进行扫描,以查看现有行的事件计数的增加并确定新行(您可以通过使用开始时间和结束时间来确定唯一的行),然后使用这些更改更新您的数据副本。

未包含的错误

此视图可能并未包含所有连接和错误信息:

  • 此视图不包括可能发生的所有SQL 数据库数据库错误,仅包括本文中事件类型中指定的错误。
  • 如果SQL 数据库数据中心内发生计算机故障,则事件表中可能缺少少量数据。
  • 如果通过 DoSGuard 拦截了 IP 地址,则无法收集来自该 IP 地址的连接尝试事件,这些事件不会出现在此视图中。

示例

连接到Azure SQL 数据库逻辑服务器上的 master 数据库,以运行以下 Transact-SQL 查询。

查询sys.event_log视图

以下查询返回在 2022 年 3 月 25 日中午到 2022 年 3 月 30 日中午(UTC)之间发生的所有事件。 默认情况下,查询结果按 start_time 排序(升序)。

SELECT database_name, start_time, end_time, event_category,
	event_type, event_subtype, event_subtype_desc, severity,
	event_count, description
FROM sys.event_log
WHERE start_time >= '2022-03-25 12:00:00'
    AND end_time <= '2022-03-30 12:00:00';  

用户的查询登录失败

以下查询返回在 2022 年 3 月 25 日 10:00 到 11:00 之间发生的用户登录失败的连接失败(UTC)。

SELECT database_name, start_time, end_time, event_category,
	event_type, event_subtype, event_subtype_desc, severity,
	event_count, description
FROM sys.event_log
WHERE event_type = 'connection_failed'
    AND event_subtype = 4
    AND start_time >= '2022-03-25 10:00:00'
    AND end_time <= '2022-03-25 11:00:00';  

后续步骤

在以下文章中详细了解Azure SQL 数据库: