sys.fn_xe_file_target_read_file (Transact-SQL)

适用于:SQL ServerAzure SQL 数据库Azure SQL 托管实例

读取扩展事件异步文件目标创建的文件。 每行返回一个 XML 格式的事件。

扩展事件 event_file 目标以不可读的二进制格式存储它接收的数据。 使用sys.fn_xe_file_target_read_file函数读取文件的内容.xel。 也可以从 Management Studio 读取这些文件。 有关演练,请参阅 快速入门:扩展事件

Transact-SQL 语法约定

语法

sys.fn_xe_file_target_read_file ( path , mdpath , initial_file_name , initial_offset )

参数

path

要读取的文件的路径。 路径可以包含野生卡并包含文件的名称。 路径nvarchar(260), 没有默认值。 在Azure SQL 数据库上下文中,此值是Azure 存储文件中文件的 HTTP URL。

mdpath

与路径参数指定的 文件或文件相对应的元数据文件的路径mdpathnvarchar(260), 没有默认值。

在 SQL Server 2012(11.x)及更高版本中,不需要此参数。 保留它以实现向后兼容性,适用于在早期版本的 SQL Server 中生成的日志文件。 从 SQL Server 2016(13.x 开始),此参数可以指定为NULL.xem不再使用文件。

initial_file_name

要从 路径读取的第一个文件。 initial_file_name为 nvarchar(260),没有默认值。 如果NULL指定为参数,则读取路径中找到的所有文件。

注意

initial_file_nameinitial_offset 是配对参数。 如果为任一参数指定值,则必须为另一个参数指定值。

initial_offset

用于指定之前读取的上一个偏移量并跳过该偏移量之前的所有事件(包括该偏移量处的事件)。 事件枚举在指定偏移量后开始。 initial_offset是偏重的。 如果 NULL 指定为参数,则读取整个文件。

返回的表

列名称 数据类型 描述
module_guid uniqueidentifier 事件模块 GUID。 不可为 Null。
package_guid uniqueidentifier 事件包 GUID。 不可为 Null。
object_name nvarchar(256) 事件名称。 不可为 Null。
event_data nvarchar(max) XML 格式的事件内容。 不可为 Null。
file_name nvarchar(260) 包含事件的文件的名称。 不可为 Null。
file_offset bigint 包含事件的块在文件中的偏移位置。 不可为 Null。
timestamp_utc datetime2(7) 事件的日期和时间(UTC 时区)。 不可为 Null。

适用于:SQL Server 2017 (14.x) 及更高版本和 Azure SQL 数据库。

注解

通过在 Management Studio 中执行 sys.fn_xe_file_target_read_file 来读取大型结果集可能会导致错误。 使用结果到文件模式(在 SQL Server Management Studio 中,Ctrl+Shift+F)将大型结果集导出到人工可读文件,以改为使用其他工具读取文件。

SQL Server 2008 (10.0.x) 和 SQL Server 2008 R2 (10.50.x) 接受以 XEL 和 XEM 格式生成的跟踪结果。 SQL Server 2012 (11.x) 扩展事件仅支持 XEL 格式的跟踪结果。 建议使用 Management Studio 以 XEL 格式读取跟踪结果。

Azure SQL

在Azure SQL 托管实例或Azure SQL 数据库中,将文件存储在.xelAzure Blob 存储中。 可以使用 sys.fn_xe_file_target_read_file 从你自己创建的扩展事件会话进行读取,并存储在 Azure Blob 存储中。 有关示例演练,请参阅 Azure SQL 数据库和 Azure SQL 托管实例中扩展事件的事件文件目标代码

如果为本地文件系统指定 wild卡 和/或路径,则会收到类似于以下内容的错误消息:

Msg 40538, Level 16, State 3, Line 15
A valid URL beginning with 'https://' is required as value for any filepath specified.

权限

要求具有对服务器的 VIEW SERVER STATE 权限。

示例

A. 从文件目标检索数据

对于 SQL Server 2014 (12.x) 和以前的版本,以下示例从所有文件(包括 .xel.xem 文件)获取所有行。 在此示例中,文件目标和图元文件位于文件夹中的 C:\traces\ 跟踪文件夹中。

SELECT *
FROM sys.fn_xe_file_target_read_file('C:\traces\*.xel', 'C:\traces\metafile.xem', NULL, NULL);

在 SQL Server 2016(13.x)及更高版本中,以下示例检索默认文件夹中所有 .xel 文件中的事件。 默认位置位于 \MSSQL\Log 实例的安装文件夹中。

SELECT *
FROM sys.fn_xe_file_target_read_file('*.xel', NULL, NULL, NULL);

在 SQL Server 2017(14.x)及更高版本中,以下示例仅从内置system_health会话中检索过去一天的数据。 system_health 会话是 SQL Server 默认包含的扩展事件会话。 有关详细信息,请参阅 使用 system_health 会话

SELECT *
FROM sys.fn_xe_file_target_read_file('system_health*.xel', NULL, NULL, NULL)
WHERE timestamp_utc > DATEADD(DAY, -1, GETUTCDATE());