使用SQLServer Audit来监控触发器的启用、禁用情况
来源:互联网 发布:淘宝上东大门代购真店 编辑:程序博客网 时间:2024/05/16 13:44
使用情景:
有时候会发现在触发器中的业务逻辑没有执行,可能是因为触发器的逻辑错误所引起的。但是有时候却是因为一些触发器被禁用了。
由于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%'
但是有时候会存在误报,比如,在你的代码里面可能存在同样的信息。但是筛选数据对性能和检查问题总是有好处的。
小结:
捕获事件有很多种方式。此功能仅限2008企业版使用。
- 使用SQLServer Audit来监控触发器的启用、禁用情况
- Sqlserver 触发器的禁用和启用 触发器的创建
- SQLServer触发器禁用与启用
- 关于触发器的新建、禁用、启用、特点
- 禁用与启用触发器
- 禁用与启用触发器
- 启用/禁用触发器
- 禁用启用触发器
- ORACLE禁用启用触发器
- ORACLE禁用启用触发器
- ORACLE禁用启用触发器
- ORACLE禁用启用触发器
- ORACLE禁用启用触发器
- SQL触发器使用 禁用并重新启用触发器
- SQLServer触发器的使用
- sqlserver触发器的使用
- SqlServer触发器的使用
- sqlserver触发器的使用
- mysql 存储过程的学习【1】 变量
- 缩放图片工具类,创建缩略图、伸缩图片比例
- 数据库的拆分
- Rightmost Digit
- 文件一个上传工具类
- 使用SQLServer Audit来监控触发器的启用、禁用情况
- 关于货币
- GPU计算或者异构计算编程方式与参考资料
- 原项目是utf-8 但由于操作系统是中文的 eclipse(myeclipse)默认编码是GBK
- char* 指针初始化小练习
- AStyle 使用参数
- 程序员——伤不起的三十岁
- Java 多线程断点下载文件
- QRegExp正则表达式