Comment obtenez-vous la notification des changements de schéma dans la base de données Sql Server par courrier électronique?

StackOverflow https://stackoverflow.com/questions/2341940

  •  23-09-2019
  •  | 
  •  

Question

Nous déployons plusieurs instances de bases de données multiples à plusieurs sites. Ces sites ont tous leurs propres CBM. Ici, au siège social, nous aimerions surveiller toutes les bases de données satellites et obtenir une notification lorsque l'un des changements des schémas (structures de table, procs stockées, vues, etc.).

est-il un outil disponible qui peut remplir cette fonction?

Était-ce utile?

La solution

Dans SQL Server 2005 partir, vous pouvez créer la base de données à l'échelle des déclencheurs qui ddl le feu lorsque des modifications du schéma sont faites. Vous pouvez ensuite utiliser la messagerie de base de données pour envoyer des e-mail.

S'il vous plaît voir: Utilisation de triggers DDL dans SQL Server 2005 pour capturer des modifications de schéma

Voici un exemple qui utilise EVENTDATA () et les journaux à une table:

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()  

De ici .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top