gpt4 book ai didi

sql-server - 如何通过电子邮件收到 Sql Server 数据库中架构更改的通知?

转载 作者:行者123 更新时间:2023-12-02 22:52:59 26 4
gpt4 key购买 nike

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

有没有可用的工具可以执行此功能?

最佳答案

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

请参阅:Using DDL Triggers in SQL Server 2005 to Capture Schema Changes

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

来自here .

关于sql-server - 如何通过电子邮件收到 Sql Server 数据库中架构更改的通知?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2341940/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com