• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

使用SQLServer Audit来监控触发器的启用、禁用情况

mysql 搞代码 4年前 (2022-01-09) 38次浏览 已收录 0个评论
文章目录[隐藏]

使用情景: 有时候会发现在触发器中的业务逻辑没有执行,可能是因为触发器的逻辑错误所引起的。但是有时候却是因为一些触发器被禁用了。 由于 SQLServer 默认不跟踪触发器的启用还是禁用。且禁用触发器的命令( Disable Trigger )不在默认跟踪里面捕获。但

使用情景:

有时候会发现在触发器中的业务逻辑没有执行,可能是因为触发器的逻辑错误所引起的。但是有时候却是因为一些触发器被禁用了。

由于SQLServer默认不跟踪触发器的启用还是禁用。且禁用触发器的命令(Disable Trigger)不在默认跟踪里面捕获。但是可以在服务器级别的跟踪(不是使用Profiler)获取这些信息,捕获SQL:StmtCompleted并在TextData列筛选,但是对于负载较重的系统,这样会有比较大的影响。

如果你的是企业版,可以考虑使用一个新特性:SQL Server Audit。可以使用DATABASE AUDIT SPECIFICATION来捕获这些事件。

使用步骤:

第一步,使用以下语句先创建服务器级别监控:

USE master;GOCREATE SERVER AUDIT ServerAudit  TO FILE (FILEPATH = 'E:\temp\', MAXSIZE = 1 GB)--注意更改文件路径  WITH (ON_FAILURE = CONTINUE);GOALTER SERVER AUDIT ServerAudit  WITH (STATE = ON);

注意,路径需要修改,temp文件夹也要实现开启。

第二步,创建数据库级别监控:

对于本文,我们关注SCHEMA_OBJECT_CHANGE_GROUP,以AdventureWorks为例子:

USE AdventureWorks;GOCREATE DATABASE AUDIT SPECIFICATION schema_changeFOR SERVER AUDIT ServerAuditADD (SCHEMA_OBJECT_CHANGE_GROUP)WITH (STATE = ON);GO

第三步,创建一个示例表,然后创建一个示例触发器:

CREATE TABLE dbo.splunge ( id INT ) ;GOCREATE TRIGGER dbo.splunge_trigger ON dbo.splunge    FOR INSERTAS    BEGIN        SELECT  1 ;    ENDGO

第四步,可以使用以下脚本来检查:

SELECT  event_time ,        succeeded ,        server_principal_name ,        [object_name] ,        [statement]FROM    sys.fn_get_audit_file('E:\Temp\ServerAudit*', NULL, NULL)WHERE   database_name = 'AdventureWorks' ;

结果如下,可以看到捕获了创建的记录:

现在来禁用这个触发器,然后再查询一下:

DISABLE TRIGGER dbo.splunge_trigger ON dbo.splunge;GOSELECT  event_time ,        succeeded ,        server_principal_name ,        [object_name] ,        [statement]FROM    sys.fn_get_audit_file('E:\Temp\ServerAudit*', NULL, NULL)WHERE   database_name = 'AdventureWorks' ;

结果如下:

如果你重新启用这个触发器,你会再看到另外一行,如果觉得返回数据太多,可以在where语句中添加筛选:

AND [statement] LIKE '%disable%trigger%'

但是有时候会存在误报,比如,在你的代码里面可能存在同样的信息。但是筛选数据对性能和检查问题总是有好处的。

本文来源gaodai$ma#com搞$$代**码网$

小结:

捕获事件有很多种方式。此功能仅限2008企业版使用。


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:使用SQLServer Audit来监控触发器的启用、禁用情况

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址