分享方式:


sys.fn_xe_file_target_read_file (Transact-SQL)

適用於:SQL Server Azure 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

要讀取之檔案的路徑。 path 可以包含通配符,並包含檔名。 pathnvarchar(260), 沒有預設值。 在 Azure SQL 資料庫 的內容中,此值是 Azure 儲存體 檔案的 HTTP URL。

mdpath

對應至 path 自變數所指定檔案或檔案之元數據檔案的路徑。 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_name和initial_offset都是配對的自變數。 如果您為任一自變數指定值,則必須為另一個自變數指定值。

initial_offset

用來指定先前讀取的最後一個位移,並將所有事件略過到位移(含)。 事件列舉會在指定的位移之後開始。 initial_offset是 bigint。 如果 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 Database。

備註

在 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 資料庫 中,將檔案儲存.xel在 Azure Blob 儲存體。 您可以使用 sys.fn_xe_file_target_read_file 從您自己建立的擴充事件工作階段中讀取,並儲存在 Azure Blob 儲存體中。 如需範例逐步解說,請檢閱在 Azure 儲存體 中使用event_file目標建立事件會話。

如果您指定本機檔案系統的通配符和/或路徑,您會收到類似下列的錯誤訊息:

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

權限

在 SQL Server 2019 (15.x) 和舊版中,需要 VIEW SERVER STATE 伺服器的許可權。

在 SQL Server 2022 (16.x) 和更新版本中,需要 VIEW SERVER PERFORMANCE 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 CAST(timestamp_utc AS DATETIME2(7)) > DATEADD(DAY, -1, GETUTCDATE());