Run the script, then reselect
SELECT * FROM #MyTraceTable ORDER BY starttime
with additional WHERE conditions to filter for specific items you need.
Run the script, then reselect
SELECT * FROM #MyTraceTable ORDER BY starttime
with additional WHERE conditions to filter for specific items you need.
--##################################################################################################
--Purpose: Load All The existing .trc files on a given server to a tracetable so they can be queried.
--Created By Lowell SQLServerCentral.com
--##################################################################################################
-- declare variables
DECLARE
@rowid INT,
@dir VARCHAR(1000),
@path VARCHAR(1000),
@sqlcmd VARCHAR(1000),
@filename VARCHAR(1000),
@TraceFileName NVARCHAR(256)
DECLARE @trn TABLE (rowid INT IDENTITY(1,1),FILE_NAME VARCHAR(1000))
CREATE TABLE #MyTraceTable (
TraceFile VARCHAR(128),
EventName VARCHAR(128),
StartTime DATETIME,
DatabaseID INT,
DatabaseName VARCHAR(128),
ObjectID INT,
TraceObjectName VARCHAR(128),
SysobjectsName VARCHAR(128),
type_desc VARCHAR(128),
ObjectType VARCHAR(128),
ObjectAbbrv VARCHAR(128),
LoginName VARCHAR(128),
HostName VARCHAR(128),
ApplicationName VARCHAR(128) )
-- set variables
-- might return a long filename like c:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\LOG\
SELECT @path = REVERSE(SUBSTRING(REVERSE(path),CHARINDEX('\',REVERSE(path)),256)) FROM sys.traces WHERE is_default = 1
--select @path
SET @dir = ' dir "' + @path + '*.trc" /TW /OD /B' -- + @dir
-- this returns a collection of trace files...5 in my case
INSERT INTO @trn
EXEC xp_cmdshell @dir -- this statement will dump all your .trc files into a memory table
-- select * from @trn where file_name is not null
-- do stuff
SELECT @rowid = MIN(rowid) FROM @trn
WHILE @rowid IS NOT NULL
BEGIN
-- do stuff
SELECT @TraceFileName = @path + x.FILE_NAME FROM @trn x WHERE rowid = @rowid
INSERT INTO #MyTraceTable
SELECT
@TraceFileName,
ev.name,
tr.StartTime,
tr.DatabaseID,
tr.DatabaseName,
tr.ObjectID,
tr.ObjectName AS 'Trace ObjectName',
o.name AS 'Sysobjects Name',
o.type_desc,
tr.ObjectType,
sv.subclass_name AS 'ObjectAbbrv',
tr.LoginName,
tr.HostName,
tr.ApplicationName
FROM fn_trace_gettable(@TraceFileName, DEFAULT) tr
INNER JOIN sys.trace_events ev
ON tr.eventclass = ev.trace_event_id
INNER JOIN sys.trace_subclass_values sv
ON tr.eventclass = sv.trace_event_id
AND tr.ObjectType = sv.subclass_value
--and sv.trace_column_id = 28
LEFT JOIN sys.objects o
ON tr.ObjectID = o.OBJECT_ID
SELECT @rowid = MIN(rowid) FROM @trn WHERE FILE_NAME IS NOT NULL AND rowID > 0 AND rowid > @rowid
END
SELECT * FROM #MyTraceTable ORDER BY starttime
--drop table #MyTraceTable