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_time 和 end_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_time 和 end_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_type和event_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 数据库: