Kev*_*inT 4 sql-server database-schema
我们将多个数据库的多个实例部署到多个站点.这些网站都有自己的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()
Run Code Online (Sandbox Code Playgroud)
从这里开始.
| 归档时间: |
|
| 查看次数: |
2746 次 |
| 最近记录: |