Difference between sys.fn_get_audit_file & sys.fn_xe_file_target_read_file
SQL Server
This example reads from a file that is named \\serverName\Audit\HIPPA_AUDIT.sqlaudit.
SELECT * FROM sys.fn_get_audit_file ('\\serverName\Audit\HIPPA_AUDIT.sqlaudit',default,default);
GO
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Azure SQL Database
This example reads from a file that is named ShiraServer/MayaDB/SqlDbAuditing_Audit/2017-07-14/10_45_22_173_1.xel:
SELECT * FROM sys.fn_get_audit_file ('https://mystorage.blob.core.windows.net/sqldbauditlogs/ShiraServer/MayaDB/SqlDbAuditing_Audit/2017-07-14/10_45_22_173_1.xel',default,default);
GO
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
This example reads from the same file as above, but with additional T-SQL clauses (TOP, ORDER BY, and WHERE clause for filtering the audit records returned by the function):
SELECT TOP 10 * FROM sys.fn_get_audit_file ('https://mystorage.blob.core.windows.net/sqldbauditlogs/ShiraServer/MayaDB/SqlDbAuditing_Audit/2017-07-14/10_45_22_173_1.xel',default,default)
WHERE server_principal_name = 'admin1'
ORDER BY event_time
GO
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
This example reads all audit logs from servers that begin with Sh:
SELECT * FROM sys.fn_get_audit_file ('https://mystorage.blob.core.windows.net/sqldbauditlogs/Sh',default,default);
GO
Retrieving data from file targets
The following example gets all the rows from all the files. In this example the file targets and metafiles are located in the trace folder on the C:\ drive.
SELECT * FROM sys.fn_xe_file_target_read_file('C:\traces\*.xel', 'C:\traces\metafile.xem', null, null);
Reading large result sets by executing sys.fn_xe_file_target_read_file in Management Studio may result in an error. Use the Results to File mode (Ctrl+Shift+F) to export large result sets to a file and read the file with another tool instead.
Example:-
sys.fn_get_audit_file :-
Returns information from an audit file created by a server audit in SQL Server.SQL Server
This example reads from a file that is named \\serverName\Audit\HIPPA_AUDIT.sqlaudit.
SELECT * FROM sys.fn_get_audit_file ('\\serverName\Audit\HIPPA_AUDIT.sqlaudit',default,default);
GO
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Azure SQL Database
This example reads from a file that is named ShiraServer/MayaDB/SqlDbAuditing_Audit/2017-07-14/10_45_22_173_1.xel:
SELECT * FROM sys.fn_get_audit_file ('https://mystorage.blob.core.windows.net/sqldbauditlogs/ShiraServer/MayaDB/SqlDbAuditing_Audit/2017-07-14/10_45_22_173_1.xel',default,default);
GO
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
This example reads from the same file as above, but with additional T-SQL clauses (TOP, ORDER BY, and WHERE clause for filtering the audit records returned by the function):
SELECT TOP 10 * FROM sys.fn_get_audit_file ('https://mystorage.blob.core.windows.net/sqldbauditlogs/ShiraServer/MayaDB/SqlDbAuditing_Audit/2017-07-14/10_45_22_173_1.xel',default,default)
WHERE server_principal_name = 'admin1'
ORDER BY event_time
GO
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
This example reads all audit logs from servers that begin with Sh:
SELECT * FROM sys.fn_get_audit_file ('https://mystorage.blob.core.windows.net/sqldbauditlogs/Sh',default,default);
GO
sys.fn_xe_file_target_read_file:-
Reads files that are created by the Extended Events asynchronous file target. One event, in XML format, is returned per row.
Retrieving data from file targets
The following example gets all the rows from all the files. In this example the file targets and metafiles are located in the trace folder on the C:\ drive.
SELECT * FROM sys.fn_xe_file_target_read_file('C:\traces\*.xel', 'C:\traces\metafile.xem', null, null);
Reading large result sets by executing sys.fn_xe_file_target_read_file in Management Studio may result in an error. Use the Results to File mode (Ctrl+Shift+F) to export large result sets to a file and read the file with another tool instead.
Example:-
Extended Events query to get deadLocks
====================================
1. Create a separate event for deadlock
====================================
1. Create a separate event for deadlock
-------------------------------------------------------------------
CREATE EVENT SESSION DeadLocks
ON SERVER
ADD EVENT
sqlserver.lock_deadlock
(
ACTION
(
sqlserver.database_id,
sqlserver.client_app_name,
sqlserver.sql_text
)
)
ADD TARGET package0.asynchronous_file_target
( SET filename = 'D:\ffxfer\DeadLocks_Capture.xel',
metadatafile = 'D:\ffxfer\DeadLocks_Capture.mta',
max_file_size = 10,
max_rollover_files = 10);
GO
CREATE EVENT SESSION DeadLocks
ON SERVER
ADD EVENT
sqlserver.lock_deadlock
(
ACTION
(
sqlserver.database_id,
sqlserver.client_app_name,
sqlserver.sql_text
)
)
ADD TARGET package0.asynchronous_file_target
( SET filename = 'D:\ffxfer\DeadLocks_Capture.xel',
metadatafile = 'D:\ffxfer\DeadLocks_Capture.mta',
max_file_size = 10,
max_rollover_files = 10);
GO
2. Start the Event
-------------------------------
ALTER EVENT SESSION DeadLocks
ON SERVER
STATE = START
GO
ALTER EVENT SESSION DeadLocks
ON SERVER
STATE = START
GO
3. How to collect data to temp table
---------------------------------------
DECLARE @xel_filename varchar(256) =
'D:\ffxfer\DeadLocks_Capture.xel '
DECLARE @mta_filename varchar(256) = 'D:\ffxfer\DeadLocks_Capture.mta'
SELECT CONVERT(xml, event_data) as Event_Data
INTO #File_Data
FROM
sys.fn_xe_file_target_read_file(@xel_filename, @mta_filename, NULL, NULL)
4. how to retrieve data.
select * from #File_Data
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
CREATE DATABASE TestDB;
GO
USE TestDB;
GO
CREATE SCHEMA DataSchema;
GO
CREATE TABLE DataSchema.GeneralData (ID int PRIMARY KEY, DataField varchar(50) NOT NULL);
GO
CREATE TABLE DataSchema.SensitiveData (ID int PRIMARY KEY, DataField varchar(50) NOT NULL);
GO
GO
CREATE SERVER AUDIT AuditDataAccess
TO FILE ( FILEPATH ='C:\SQLAudit\' )
WHERE object_name = 'SensitiveData' ;
GO
ALTER SERVER AUDIT AuditDataAccess WITH (STATE = ON);
GO
USE TestDB;
GO
CREATE DATABASE AUDIT SPECIFICATION [FilterForSensitiveData]
FOR SERVER AUDIT [AuditDataAccess]
ADD (SELECT ON SCHEMA::[DataSchema] BY [public])
WITH (STATE = ON);
GO
-- Trigger the audit event by selecting from tables
SELECT ID, DataField FROM DataSchema.GeneralData;
SELECT ID, DataField FROM DataSchema.SensitiveData;
GO
-- Check the audit for the filtered content
SELECT * FROM fn_get_audit_file('C:\SQLAudit\AuditDataAccess_*.sqlaudit',default,default);
GO
Thanks for reading..
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Creating a server audit containing a WHERE clause
---------CREATE DATABASE TestDB;
GO
USE TestDB;
GO
CREATE SCHEMA DataSchema;
GO
CREATE TABLE DataSchema.GeneralData (ID int PRIMARY KEY, DataField varchar(50) NOT NULL);
GO
CREATE TABLE DataSchema.SensitiveData (ID int PRIMARY KEY, DataField varchar(50) NOT NULL);
GO
-- Create the server audit in the master database
USE master;GO
CREATE SERVER AUDIT AuditDataAccess
TO FILE ( FILEPATH ='C:\SQLAudit\' )
WHERE object_name = 'SensitiveData' ;
GO
-- start the server audit
GO
-- Create the database audit specification in the TestDB database
USE TestDB;
GO
CREATE DATABASE AUDIT SPECIFICATION [FilterForSensitiveData]
FOR SERVER AUDIT [AuditDataAccess]
ADD (SELECT ON SCHEMA::[DataSchema] BY [public])
WITH (STATE = ON);
GO
-- Trigger the audit event by selecting from tables
SELECT ID, DataField FROM DataSchema.GeneralData;
SELECT ID, DataField FROM DataSchema.SensitiveData;
GO
-- Check the audit for the filtered content
SELECT * FROM fn_get_audit_file('C:\SQLAudit\AuditDataAccess_*.sqlaudit',default,default);
GO
Thanks for reading..