zoukankan      html  css  js  c++  java
  • 监控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
    */
    
  • 相关阅读:
    Jenkins构建项目
    jenkins的理解及安装
    GitLab初识以及代码迁移
    深入浅出Git(偏向理论)
    理解下所谓的ssh隧道
    洛谷-P1908 逆序对
    洛谷-P1010 幂次方
    洛谷-P1226 【模板】快速幂||取余运算
    洛谷-P1074 靶形数独
    洛谷-P1433 吃奶酪
  • 原文地址:https://www.cnblogs.com/momogua/p/8304393.html
Copyright © 2011-2022 走看看