forked from microsoft/tigertoolbox
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathReadChangeTrackingXEData.sql
48 lines (43 loc) · 1.92 KB
/
ReadChangeTrackingXEData.sql
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
-- Sample script to read data Change Tracking Automatic Cleanup Data using XE "change_tracking_cleanup"
-- Create an XE session to read the
CREATE EVENT SESSION [ChangeTracking] ON SERVER
ADD EVENT sqlserver.change_tracking_cleanup
ADD TARGET package0.ring_buffer
WITH (MAX_MEMORY=4096 KB,EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS,MAX_DISPATCH_LATENCY=30 SECONDS,MAX_EVENT_SIZE=0 KB,MEMORY_PARTITION_MODE=NONE,TRACK_CAUSALITY=OFF,STARTUP_STATE=OFF)
GO
-- Start the session
ALTER EVENT SESSION ChangeTracking
ON SERVER
STATE = start
-- Store the XML data in a temporary table
SELECT CAST(xet.target_data as xml) as XMLDATA
INTO #CTCleanupData
FROM sys.dm_xe_session_targets xet
JOIN sys.dm_xe_sessions xe
ON (xe.address = xet.event_session_address)
WHERE xe.name = 'changetracking' -- ### UPDATE with appropriate change tracking session name ###
and target_name = 'ring_buffer'
-- Get information about the steps executed by the automatic cleanup
;WITH CT_CleanupSession (EventXML) AS
(
SELECT C.query('.') EventXML
FROM #CTCleanupData a
CROSS APPLY a.XMLDATA.nodes('/RingBufferTarget/event') as T(C)
)
SELECT
EventXML.value('(/event/@timestamp)[1]', 'datetime') as [Time (UTC)],
DB_NAME(EventXML.value('(/event/data[@name = "database_id"]/value)[1]', 'int')) as [Database Name],
OBJECT_NAME(EventXML.value('(/event/data[@name = "object_id"]/value)[1]', 'int')) as [Object Name],
EventXML.value('(/event/data[@name = "cleanup_id"]/text)[1]', 'varchar(255)') as [Step],
EventXML.value('(/event/data[@name = "value"]/value)[1]', 'varchar(255)') as [Value],
CASE EventXML.value('(/event/data[@name = "status"]/value)[1]', 'int')
WHEN 1 THEN 'Not Initialized'
WHEN 2 THEN 'Initialized'
WHEN 8 THEN 'In Progress'
WHEN 16 THEN 'Finished'
WHEN 32 THEN 'Error'
END as [Status]
FROM CT_CleanupSession
WHERE EventXML.value('(/event/@name)[1]', 'varchar(255)') = 'change_tracking_cleanup'
-- Drop the temporary table
DROP TABLE #CTCleanupData