SQL Server データベースのスキーマ変更の通知を電子メールで受け取るにはどうすればよいですか?

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

  •  23-09-2019
  •  | 
  •  

質問

複数のデータベースの複数のインスタンスを複数のサイトにデプロイします。これらのサイトにはすべて独自の DBA がいます。ここ本社では、すべてのサテライト データベースを監視し、スキーマ (テーブル構造、ストアド プロシージャ、ビューなど) が変更されたときに通知を受け取りたいと考えています。

この機能を実行できるツールはありますか?

役に立ちましたか?

解決

SQL Server 2005 以降では、スキーマの変更が行われたときに起動される、データベース全体の DDL トリガーを作成できます。その後、データベース メールを使用して電子メールを送信できます。

参照してください: 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()  

から ここ.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top