andrew4582

Database Trigger Log

Dec 31st, 2013
236
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
T-SQL 5.46 KB | None | 0 0
  1. --USE [AdventureWorks]
  2. --GO
  3.  
  4. /****** Object:  Table [dbo].[DatabaseLog]    Script Date: 12/31/2013 19:35:51 ******/
  5. IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[DatabaseLog]') AND type in (N'U'))
  6. DROP TABLE [dbo].[DatabaseLog]
  7. GO
  8.  
  9.  
  10. /****** Object:  Table [dbo].[DatabaseLog]    Script Date: 12/31/2013 19:29:13 ******/
  11. SET ANSI_NULLS ON
  12. GO
  13.  
  14. SET QUOTED_IDENTIFIER ON
  15. GO
  16.  
  17. CREATE TABLE [dbo].[DatabaseLog](
  18.     [DatabaseLogID] [int] IDENTITY(1,1) NOT NULL,
  19.     [PostTime] [datetime] NOT NULL,
  20.     [DatabaseUser] [sysname] NOT NULL,
  21.     [Event] [sysname] NOT NULL,
  22.     [Schema] [sysname] NULL,
  23.     [Object] [sysname] NULL,
  24.     [TSQL] [nvarchar](max) NOT NULL,
  25.     [XmlEvent] [xml] NOT NULL,
  26.  CONSTRAINT [PK_DatabaseLog_DatabaseLogID] PRIMARY KEY NONCLUSTERED
  27. (
  28.     [DatabaseLogID] ASC
  29. )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
  30. ) ON [PRIMARY]
  31.  
  32. GO
  33.  
  34. EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Primary key for DatabaseLog records.' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'DatabaseLog', @level2type=N'COLUMN',@level2name=N'DatabaseLogID'
  35. GO
  36.  
  37. EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'The date and time the DDL change occurred.' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'DatabaseLog', @level2type=N'COLUMN',@level2name=N'PostTime'
  38. GO
  39.  
  40. EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'The user who implemented the DDL change.' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'DatabaseLog', @level2type=N'COLUMN',@level2name=N'DatabaseUser'
  41. GO
  42.  
  43. EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'The type of DDL statement that was executed.' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'DatabaseLog', @level2type=N'COLUMN',@level2name=N'Event'
  44. GO
  45.  
  46. EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'The schema to which the changed object belongs.' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'DatabaseLog', @level2type=N'COLUMN',@level2name=N'Schema'
  47. GO
  48.  
  49. EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'The object that was changed by the DDL statment.' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'DatabaseLog', @level2type=N'COLUMN',@level2name=N'Object'
  50. GO
  51.  
  52. EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'The exact Transact-SQL statement that was executed.' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'DatabaseLog', @level2type=N'COLUMN',@level2name=N'TSQL'
  53. GO
  54.  
  55. EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'The raw XML data generated by database trigger.' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'DatabaseLog', @level2type=N'COLUMN',@level2name=N'XmlEvent'
  56. GO
  57.  
  58. EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Audit table tracking all DDL changes made to the AdventureWorks database. Data is captured by the database trigger ddlDatabaseTriggerLog.' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'DatabaseLog'
  59. GO
  60.  
  61. EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Primary key (nonclustered) constraint' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'DatabaseLog', @level2type=N'CONSTRAINT',@level2name=N'PK_DatabaseLog_DatabaseLogID'
  62. GO
  63.  
  64.   IF  EXISTS (SELECT * FROM sys.triggers WHERE parent_class_desc = 'DATABASE' AND name = N'ddlDatabaseTriggerLog')
  65. DISABLE TRIGGER [ddlDatabaseTriggerLog] ON DATABASE
  66.  
  67. GO
  68.  
  69.  
  70. /****** Object:  DdlTrigger [ddlDatabaseTriggerLog]    Script Date: 12/31/2013 19:29:59 ******/
  71. IF  EXISTS (SELECT * FROM sys.triggers WHERE parent_class_desc = 'DATABASE' AND name = N'ddlDatabaseTriggerLog')DROP TRIGGER [ddlDatabaseTriggerLog] ON DATABASE
  72. GO
  73.  
  74.  
  75. /****** Object:  DdlTrigger [ddlDatabaseTriggerLog]    Script Date: 12/31/2013 19:29:59 ******/
  76. SET ANSI_NULLS ON
  77. GO
  78.  
  79. SET QUOTED_IDENTIFIER ON
  80. GO
  81.  
  82. CREATE TRIGGER [ddlDatabaseTriggerLog]
  83. ON DATABASE
  84. FOR DDL_DATABASE_LEVEL_EVENTS
  85. AS
  86. BEGIN
  87.     SET NOCOUNT ON;
  88.    
  89.     DECLARE @data XML;
  90.     DECLARE @schema  sysname;
  91.     DECLARE @object  sysname;
  92.     DECLARE @eventType  sysname;
  93.    
  94.     SET @data=EVENTDATA();
  95.    
  96.     SET @eventType=@data.value('(/EVENT_INSTANCE/EventType)[1]','sysname');
  97.    
  98.     SET @schema=@data.value('(/EVENT_INSTANCE/SchemaName)[1]','sysname');
  99.    
  100.     SET @object=@data.value('(/EVENT_INSTANCE/ObjectName)[1]','sysname')
  101.    
  102.     IF @object IS NOT NULL PRINT '  '+@eventType+' - '+@schema+'.'+@object;
  103.     ELSE PRINT '  '+@eventType+' - '+@schema;
  104.    
  105.     IF @eventType IS NULL PRINT CONVERT(NVARCHAR(MAX),@data);
  106.    
  107.     INSERT     [dbo].[DatabaseLog]([PostTime],[DatabaseUser],[Event],[Schema],[Object],[TSQL],[XmlEvent])
  108.     VALUES     (GETDATE(),CONVERT( sysname,CURRENT_USER),@eventType,CONVERT( sysname,@schema),CONVERT( sysname,@object),@data.value('(/EVENT_INSTANCE/TSQLCommand)[1]','nvarchar(max)'),@data);
  109. END;
  110.  
  111. GO
  112.  
  113. SET ANSI_NULLS OFF
  114. GO
  115.  
  116. SET QUOTED_IDENTIFIER OFF
  117. GO
  118.  
  119. Enable  TRIGGER [ddlDatabaseTriggerLog] ON DATABASE
  120. GO
  121.  
  122. EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Database trigger to audit all of the DDL changes made to the database.' , @level0type=N'TRIGGER',@level0name=N'ddlDatabaseTriggerLog'
  123. GO
Advertisement
Add Comment
Please, Sign In to add comment