Как вы получаете уведомление об изменениях схемы в вашей базе данных Sql Server по электронной почте? - PullRequest
4 голосов
/ 26 февраля 2010

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

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

1 Ответ

6 голосов
/ 26 февраля 2010

Начиная с 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()  

С здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...