Sql server 如何通过电子邮件获得Sql Server数据库中架构更改的通知?

Sql server 如何通过电子邮件获得Sql Server数据库中架构更改的通知?,sql-server,database-schema,Sql Server,Database Schema,我们将多个数据库的多个实例部署到多个站点。这些站点都有自己的DBA。在总部,我们希望监控所有卫星数据库,并在任何模式更改(表结构、存储过程、视图等)时收到通知 是否有任何可用的工具可以执行此功能?在SQL Server 2005以后的版本中,您可以创建数据库范围的DDL触发器,在进行架构修改时触发。然后,您可以使用数据库邮件发送电子邮件 请参阅: 下面是一个使用EVENTDATA()并将日志记录到表中的示例: USE AdventureWorks GO CREATE TABLE [dbo].[

我们将多个数据库的多个实例部署到多个站点。这些站点都有自己的DBA。在总部,我们希望监控所有卫星数据库,并在任何模式更改(表结构、存储过程、视图等)时收到通知


是否有任何可用的工具可以执行此功能?

在SQL Server 2005以后的版本中,您可以创建数据库范围的DDL触发器,在进行架构修改时触发。然后,您可以使用数据库邮件发送电子邮件

请参阅:

下面是一个使用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()  

从。

+1开始,不需要添加太多内容即可添加执行msdb.dbo.sp_send_dbmail…从该代码发送电子邮件。。。。