监控SQL:用触发器来监控是哪些语句、存储过程修改了特定表(4)

实际问题如下:

有一个表A,表A中有一个字段B被某个存储过程修改了。

比如B的初始值为1,被某个存储过程改为了0,但是现在存储过程大概有1000多个,有没有什么好的方法,可以监测到这个字段是被谁修改的。


实现思路:

这种情况下,可以用多种方法,比较简单的就是用触发器,比如,要监控A表的数据修改,那么可以给A表创建一个触发器,同时创建一个日志表,当A表的数据被修改时,通过日志表记录,但是修改数据的sql语句或者存储过程。


实现代码如下:

 

--1.建表
create table t(id int,v varchar(10));

insert into t values(1,'abc')



--2.存储过程,用来模拟修改t表的数据
create proc proc_t(@id int,@v varchar(10))
as
update t
set v = @v
where id = @id

go



--3。创建日志表
create table tb_log(eventtype nvarchar(14),prama smallint,eventinfo nvarchar(1000),create_time datetime default getdate())
go



--4.触发器,修改数据时可以触发,从而记录下修改的sql
create trigger dbo.trigger_t
on t
after update
as

insert into tb_log(eventtype,prama,eventinfo)
exec('DBCC INPUTBUFFER('+@@spid+')') 
go




--5.模拟修改数据
exec proc_t 1,'123'
go


update t 
set v = 'xxx'
where id = 1 
go



--6.显示监控日志
select * from tb_log
/*
eventtype	prama	eventinfo	create_time
Language Event	0	update t set v = 'xxx'where id = 1 	2016-12-14 10:25:55.820
Language Event	0	exec proc_t 1,'123'	2016-12-14 10:26:05.840
*/

 

转载于:https://www.cnblogs.com/momogua/p/8304393.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值