다음을 통해 공유


sys.fn_xe_file_target_read_file(Transact-SQL)

적용 대상:SQL ServerAzure SQL 데이터베이스Azure SQL Managed Instance

확장 이벤트 대상에서 만든 이벤트 event_file 로그 XEL 파일을 읽습니다. 결과 집합의 각 행은 이벤트를 나타냅니다. 이벤트 데이터는 XML 형식으로 반환됩니다.

SQL Server Management Studio에서 XEL 파일을 읽을 수도 있습니다. 연습은 빠른 시작: 확장 이벤트를 참조하세요.

Transact-SQL 구문 표기 규칙

구문

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

인수

path

읽을 파일의 경로입니다. 경로는 기본값이 없는 nvarchar(260)입니다.

  • 로컬 파일 시스템의 파일과 함께 사용하는 경우 경로 에는 이벤트 세션 로그 파일의 이름이 포함되어야 합니다. 파일 이름은 여러 파일에서 데이터를 읽는 와일드카드로 포함될 * 수 있습니다.

  • Azure Storage 컨테이너의 Blob과 함께 사용할 경우 경로 는 다음 두 부분으로 구성된 연결에 의해 생성된 HTTP URL입니다.

    1. Azure Storage 스토리지 컨테이너에 대한 경로와 슬래시(/)가 뒤따릅니다.

    2. 읽어야 하는 컨테이너의 Blob 이름에 대한 일반적인 접두사입니다. 단일 Blob을 읽으려면 Blob의 전체 이름을 사용합니다.

    예를 들어 경로로 사용하면 https://<storage-account-name>.blob.core.windows.net/container-name>/xe_session 확장을 포함한 Blob 이름의 나머지 부분과 관계없이 이름이 로 시작하는 xe_session모든 Blob에서 데이터를 검색합니다. 와일드카드를 지정할 수 없습니다.

mdpath

경로 인수로 지정된 파일 또는 파일에 해당하는 메타데이터 파일의 경로 입니다. 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 대단합니다. 인수로 지정되면 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 Database 및 Azure SQL Managed Instance.

설명

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 Managed Instance 또는 Azure SQL Database에서 대상에서 event_file 만든 파일은 항상 Azure Storage 컨테이너에 Blob으로 저장됩니다.

Azure Storage 컨테이너에 대한 액세스를 허용하는 자격 증명이 있는 경우 이러한 Blob에서 데이터를 읽는 데 사용할 sys.fn_xe_file_target_read_file 수 있습니다. 연습은 Azure Storage에서 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 Storage 컨테이너의 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부터 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_',
    NULL,
    'https://<storage-account-name>.blob.core.windows.net/<container-name>/xe_session_0_133614763336380000.xel',
    33280
);