Как вы получаете уведомление об изменениях схемы в вашей базе данных Sql Server по электронной почте?

Мы развертываем несколько экземпляров нескольких баз данных на нескольких сайтах. У всех этих сайтов есть собственные администраторы баз данных. Здесь, в головном офисе, мы хотели бы отслеживать все вспомогательные базы данных и получать уведомления при изменении любой из схем (структуры таблиц, сохраненные процессы, представления и т. Д.).

Есть ли какой-нибудь инструмент, который может выполнять эту функцию?


person KevinT    schedule 26.02.2010    source источник


Ответы (1)


Начиная с SQL Server 2005, вы можете создавать триггеры DDL для всей базы данных, которые срабатывают при изменении схемы. Затем вы можете использовать почту базы данных для отправки электронной почты.

См. Раздел Использование DDL Триггеры в SQL Server 2005 для отслеживания изменений схемы

Вот пример, который использует EVENTDATA () и записывает в таблицу:

USE AdventureWorks
GO 
CREATE TABLE [dbo].[tblMonitorChange]
(
 [EventType] [varchar](100) NULL,
 [SchemaName] [varchar](100) NULL,
 [ObjectName] [varchar](100) NULL,
 [ObjectType] [varchar](100) NULL,
 [EventDate] [datetime] NULL,
 [SystemUser] [varchar](100) NULL,
 [CurrentUser] [varchar](100) NULL,
 [OriginalUser] [varchar](100) NULL
)


USE AdventureWorks
GO 
CREATE TRIGGER trgMonitorChange
ON DATABASE
FOR DDL_DATABASE_LEVEL_EVENTS
AS
set nocount on
declare @EventType varchar(100)
declare @SchemaName varchar(100)
declare @ObjectName varchar(100)
declare @ObjectType varchar(100)
SELECT 
 @EventType = EVENTDATA().value('(/EVENT_INSTANCE/EventType)[1]','nvarchar(max)')  
,@SchemaName = EVENTDATA().value('(/EVENT_INSTANCE/SchemaName)[1]','nvarchar(max)')  
,@ObjectName = EVENTDATA().value('(/EVENT_INSTANCE/ObjectName)[1]','nvarchar(max)')
,@ObjectType = EVENTDATA().value('(/EVENT_INSTANCE/ObjectType)[1]','nvarchar(max)')   
-- Is the default schema used 
if @SchemaName = ' ' select @SchemaName = default_schema_name from sys.sysusers u join sys.database_principals p 
                        on u.uid = p.principal_id  where u.name = CURRENT_USER
insert into tblMonitorChange 
      select @EventType, @SchemaName, @ObjectName, @ObjectType, getdate(), SUSER_SNAME(), CURRENT_USER, ORIGINAL_LOGIN()  

Из здесь.

person Mitch Wheat    schedule 26.02.2010
comment
+1, не потребуется много времени, чтобы добавить EXEC msdb.dbo.sp_send_dbmail .... для отправки электронного письма с этим кодом .... - person KM.; 26.02.2010