|
USE [msdb]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
/*
Procedure Name : usp_startTrace
-------------------------------
Parameter 1 : traceName - Unique identifier of trace [Req]
Parameter 2 : traceFile - Physical file to hold trace data while running [Req]
Parameter 3 : maxFileSize - Maximum size that traceFile can grow to [Default: 5MB]5MB]
Parameter 4 : filterColumn - Trace event data column to filter results on [Default: 0]
Parameter 5 : filterKeyword - Keyword used when filterColumn is defined [Default: NULL]
*/
CREATE PROCEDURE [dbo].[usp_startTrace]
@traceName NVARCHAR(50),
@traceFile NVARCHAR(50),
@maxFileSize BIGINT = 5,
@filterColumn INT = 0,
@filterKeyword NVARCHAR(50) = NULL
AS
SET NOCOUNT ON
-- Test for trace existence in the Trace_IDs table, alert user if trace is invalid
-- Change linked server name here
IF EXISTS (
SELECT * FROM MYSERVER123.DBA_Info.dbo.Trace_IDs
WHERE (TraceName = @traceName OR TraceFile = @traceFile)
AND TraceServer = SERVERPROPERTY('ServerName')
)
BEGIN
PRINT('Trace ' + @traceName + ' already exsists or the file is in use, please choose another name/file')
RETURN
END
/*
Variable Declaration
--------------------
traceError - Will hold return code from sp_trace_create to validate trace creation
TraceID - Will hold the system ID of the newly created trace
on - Used byb sp_trace_setevent to turn on data columns for particular events
*/
DECLARE @traceError INT,
@TraceID INT,
@on BIT
SET @on = 1
-- Create the trace and store the output in traceError, then test traceError for failure
-- and alert the user if the trace cannot be started
EXEC @traceError = sp_trace_create @TraceID output, 0, @traceFile, @maxFileSize, NULL
IF @traceError <> 0
BEGIN
PRINT('Trace could not be started: ' + @traceError)
RETURN
END
-- Add events that we want to collect data on for the trace
-- Audit Login events (14)
exec sp_trace_setevent @TraceID, 14, 1, @on
exec sp_trace_setevent @TraceID, 14, 9, @on
exec sp_trace_setevent @TraceID, 14, 6, @on
exec sp_trace_setevent @TraceID, 14, 10, @on
exec sp_trace_setevent @TraceID, 14, 14, @on
exec sp_trace_setevent @TraceID, 14, 11, @on
exec sp_trace_setevent @TraceID, 14, 12, @on
-- Audit Logout events (15)
exec sp_trace_setevent @TraceID, 15, 15, @on
exec sp_trace_setevent @TraceID, 15, 16, @on
exec sp_trace_setevent @TraceID, 15, 9, @on
exec sp_trace_setevent @TraceID, 15, 13, @on
exec sp_trace_setevent @TraceID, 15, 17, @on
exec sp_trace_setevent @TraceID, 15, 6, @on
exec sp_trace_setevent @TraceID, 15, 10, @on
exec sp_trace_setevent @TraceID, 15, 14, @on
exec sp_trace_setevent @TraceID, 15, 18, @on
exec sp_trace_setevent @TraceID, 15, 11, @on
exec sp_trace_setevent @TraceID, 15, 12, @on
-- ExistingConnection events (17)
exec sp_trace_setevent @TraceID, 17, 12, @on
exec sp_trace_setevent @TraceID, 17, 1, @on
exec sp_trace_setevent @TraceID, 17, 9, @on
exec sp_trace_setevent @TraceID, 17, 6, @on
exec sp_trace_setevent @TraceID, 17, 10, @on
exec sp_trace_setevent @TraceID, 17, 14, @on
exec sp_trace_setevent @TraceID, 17, 11, @on
-- RPC:Completed events (10)
exec sp_trace_setevent @TraceID, 10, 15, @on
exec sp_trace_setevent @TraceID, 10, 16, @on
exec sp_trace_setevent @TraceID, 10, 1, @on
exec sp_trace_setevent @TraceID, 10, 9, @on
exec sp_trace_setevent @TraceID, 10, 17, @on
exec sp_trace_setevent @TraceID, 10, 10, @on
exec sp_trace_setevent @TraceID, 10, 18, @on
exec sp_trace_setevent @TraceID, 10, 11, @on
exec sp_trace_setevent @TraceID, 10, 12, @on
exec sp_trace_setevent @TraceID, 10, 13, @on
exec sp_trace_setevent @TraceID, 10, 6, @on
exec sp_trace_setevent @TraceID, 10, 14, @on
-- SQL:BatchCompleted events (12)
exec sp_trace_setevent @TraceID, 12, 15, @on
exec sp_trace_setevent @TraceID, 12, 16, @on
exec sp_trace_setevent @TraceID, 12, 1, @on
exec sp_trace_setevent @TraceID, 12, 9, @on
exec sp_trace_setevent @TraceID, 12, 17, @on
exec sp_trace_setevent @TraceID, 12, 6, @on
exec sp_trace_setevent @TraceID, 12, 10, @on
exec sp_trace_setevent @TraceID, 12, 14, @on
exec sp_trace_setevent @TraceID, 12, 18, @on
exec sp_trace_setevent @TraceID, 12, 11, @on
exec sp_trace_setevent @TraceID, 12, 12, @on
exec sp_trace_setevent @TraceID, 12, 13, @on
-- SQL:BatchStarting events (13)
exec sp_trace_setevent @TraceID, 13, 12, @on
exec sp_trace_setevent @TraceID, 13, 1, @on
exec sp_trace_setevent @TraceID, 13, 9, @on
exec sp_trace_setevent @TraceID, 13, 6, @on
exec sp_trace_setevent @TraceID, 13, 10, @on
exec sp_trace_setevent @TraceID, 13, 14, @on
-- If a filter has been used, setup the filter column
-- and the keyword using sp_trace_setfilter
IF @filterColumn > 0
BEGIN
EXEC sp_trace_setfilter @traceID, @filterColumn, 0, 6, @filterKeyword
END
-- Set the trace to status 1, running
EXEC sp_trace_setstatus @TraceID, 1
-- Log all needed trace information in the Trace_IDs table using the linked repository server
-- Change linked server name here
INSERT INTO MYSERVER123.DBA_Info.dbo.Trace_IDs
( TraceName, TraceID, TraceFile, TraceServer )
VALUES
( @traceName, @TraceID, @traceFile, CONVERT(nvarchar(128), SERVERPROPERTY('ServerName')) )
-- Notify user of trace creation
PRINT('Trace Started')
SET NOCOUNT OFF
GO |