We can be find out who made DDL Changes in SQL Server database through the sys.traces dynamic management view . sys.traces DMV’s provides you details about below points:-
- who dropped tables in a database
- who altered tables in database
- who created table in database
- who created database
- who altered or changes the stored procedure
- who dropped or altered the schema
Firstly we are going to find the list of Trace event details in SQL Server and with the help of event id proceed further:-
SELECT DISTINCT e.trace_event_id , e.name FROM sys.fn_trace_geteventinfo (1) fgt JOIN sys.trace_events e ON fgt.eventID = e.trace_event_id
Above output shown different-different events like Object:Altered, Object:Created and Object:Deleted.
With the help of event id we can find out who had dropped, altered or created database object in SQL Server.
I have used event class id 46,47 and 164 to track database Object:Altered, Object:Created and Object:Deleted
Find the below query to track who dropped or created or altered database object in SQL Server :-
DECLARE @File_Name NVARCHAR(250) SELECT @File_Name = SUBSTRING(path, 0,LEN(path) - CHARINDEX('\',REVERSE(path)) + 1)+ '\Log.trc'FROM sys.traces WHERE is_default = 1 ; SELECT loginname ,hostname ,applicationname , databasename ,objectName ,starttime ,e.name AS EventName ,databaseid FROM sys.fn_trace_gettable(@File_Name, DEFAULT) AS tgt INNER JOIN sys.trace_events e ON tgt.EventClass = e.trace_event_id WHERE ( tgt.EventClass = 47 OR tgt.EventClass = 164 or tgt.EventClass=46) AND tgt.EventSubClass = 0 order by StartTime desc
After execution of above query you will get the output like below:-