適用於:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Microsoft Fabric 中的 SQL 資料庫
讀取延伸事件目標所建立的 event_file 事件記錄檔 XEL 檔案。 結果集中的每一列都代表一個事件。 事件資料會以 XML 格式傳回。
XEL 檔案也可以由 SQL Server Management Studio 讀取。 如需逐步解說,請參閱 快速入門:擴充事件。
語法
sys.fn_xe_file_target_read_file ( path , mdpath , initial_file_name , initial_offset )
引數
path
要讀取之檔案的路徑。 path 是 nvarchar(260), 沒有預設值。
與本端檔案系統中的檔案搭配使用時, path 必須包含事件階段作業日誌檔的名稱。 檔案名稱可以包含
*作為萬用字元,以從多個檔案讀取資料。搭配 Azure 儲存體容器中的 Blob 使用時, path 是由兩個部分串連所建構的 HTTP URL:
Azure 儲存體儲存體容器的路徑,後面接著斜線 (
/)。容器中應讀取之 Blob 名稱的通用前置詞。 若要讀取單一 Blob,請使用 Blob 的完整名稱。
例如,使用
https://<storage-account-name>.blob.core.windows.net/container-name>/xe_sessionas 路徑 會從名稱開頭xe_session為 的所有 Blob 擷取資料,且不論 Blob 名稱的其餘部分 (包括副檔名) 為何。 無法指定萬用字元。
mdpath
對應至 path 自變數所指定檔案或檔案之元數據檔案的路徑。 mdpath 是 nvarchar(260), 沒有預設值。
在 SQL Server 2012 (11.x) 和更新版本中,您不需要此參數。 它會保留以取得回溯相容性,適用於舊版 SQL Server 中產生的記錄檔。 在 SQL Server 2016 (13.x) 和更新版本中,此參數可以指定為 NULL,因為 .xem 不再使用檔案。
initial_file_name
要從 路徑讀取的第一個檔案。
initial_file_name為 nvarchar(260),沒有預設值。 如果 NULL 指定為 自變數,則會讀取路徑中找到的所有檔案。
檔名必須是具有相同sys.fn_xe_file_target_read_file的函數呼叫結果集中傳回的值。
initial_offset
用來指定先前讀取的上次偏移。 略過所有事件,直到偏移量(含)。 事件列舉會在指定的位移之後開始。
initial_offset是 bigint。 如果 NULL 指定為 自變數,則會讀取整個檔案。
注意
initial_file_name和initial_offset都是配對的自變數。 如果您為任一自變數指定值,則必須為另一個自變數指定值。
傳回的資料表
| 資料行名稱 | 資料類型 | 描述 |
|---|---|---|
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 資料庫和 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 資料庫中,目標所 event_file 建立的檔案一律會儲存為 Azure 儲存體容器中的 Blob。
如果存在允許存取 Azure 儲存體容器的認證,您可以使用來 sys.fn_xe_file_target_read_file 從這些 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());
B. 從 Azure 儲存體容器中的 Blob 擷取資料
從容器中名稱開頭 xe_session_的所有 Blob 讀取資料。
SELECT *
FROM sys.fn_xe_file_target_read_file(
'https://<storage-account-name>.blob.core.windows.net/<container-name>/xe_session_',
NULL,
NULL,
NULL
);
從 Blob 讀取 xe_session_0_133614763336380000.xel 資料。
SELECT *
FROM sys.fn_xe_file_target_read_file(
'https://<storage-account-name>.blob.core.windows.net/<container-name>/xe_session_0_133614763336380000.xel',
NULL,
NULL,
NULL
);
從位移 33280 開始的 xe_session_0_133614763336380000.xel Blob 讀取資料。
SELECT *
FROM sys.fn_xe_file_target_read_file(
'https://<storage-account-name>.blob.core.windows.net/<container-name>/xe_session_',
NULL,
'https://<storage-account-name>.blob.core.windows.net/<container-name>/xe_session_0_133614763336380000.xel',
33280
);