Comment obtenez-vous la notification des changements de schéma dans la base de données Sql Server par courrier électronique?
-
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?
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 .