Вообще элементарно. Триггер на базу.
Шаг первый:
CREATE TABLE [dbo].[tbl_ListChange](
[LoginName] [varchar](2000) NULL,
[HostName] [varchar](100) NULL,
[ObjectName] [varchar](100) NULL,
[ObjectType] [varchar](100) NULL,
[EventType] [varchar](100) NULL,
[EventSQLCommand] [varchar](max) NULL,
[EventTime] [datetime] NOT NULL,
[XMLChange] [xml] NULL,
[Id] [int] IDENTITY(1,1) NOT NULL,
CONSTRAINT [PK_tbl_ListChange] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 80) ON [PRIMARY]
) ON [PRIMARY]
GO
EXEC sys.sp_addextendedproperty
name=N'MS_Description',
value=N'Полностью xml команда, содержащая все вообще ', @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'tbl_ListChange', @level2type=N'COLUMN',@level2name=N'XMLChange'
GO
Шаг второй: — триггер на базу:
CREATE TRIGGER [tgr_DDLListChange]
ON DATABASE
FOR DDL_DATABASE_LEVEL_EVENTS
AS
— Каретников. 25-03-2010. Мониторинг всех изменений в базе
SET NOCOUNT ON
DECLARE @dataXML XML
SET @dataXML = EVENTDATA() — получил данные по текущему событию.
IF (
SELECT @dataXML.value('(/EVENT_INSTANCE/ObjectName)[1]' ,'varchar(max)')
) IS NOT NULL
BEGIN
INSERT dbo.tbl_ListChange
(
LoginName — под чьим логином
,HostName — на чьей машине
,ObjectName — что изменено
,ObjectType — тип измененного обьекта
,EventType — тип изменения
,EventSQLCommand — полностью SQL команда
,EventTime — во сколь изменено
,XMLChange — полностью вся хмл-команда
)
VALUES
(
@dataXML.value('(/EVENT_INSTANCE/LoginName)[1]' ,'varchar(2000)') — под чьим логином
,HOST_NAME() — на чьей машине
,@dataXML.value('(/EVENT_INSTANCE/ObjectName)[1]' ,'varchar(100)') — что изменено
,@dataXML.value('(/EVENT_INSTANCE/ObjectType)[1]' ,'varchar(100)') — тип измененного обьекта
,@dataXML.value('(/EVENT_INSTANCE/EventType)[1]' ,'varchar(100)') — тип изменения
,@dataXML.value('(/EVENT_INSTANCE/TSQLCommand)[1]' ,'varchar(max)') — полностью SQL команда
,GETDATE()
, @dataXML
) — во сколь изменено
END
GO