1:SQL的事件探测器原理
2:我想做个select触发器,就是想知道什么时候对该表做了查询
  并把该SQL语句保存到一个磁盘文件里面
3:比如前台做了一个操作,传到后台的SQL语句是
  select * from guest where guest_id=89
用事件探测器跟踪出来的,我怎么把那条语句取出来,因为事件探测器跟踪的语句只能显示,我要的效果就是:
 比如我用某个东西跟踪到了那条语句,我就把等号后面的89保存起来,
也就是执行跟踪到了那么一个对guest表的查询操作,就要让他触发一个事件。
怎么让一个表在被查询的时候触发一个事件?
或者能模仿SQL的事件探测器,把跟踪到的SQL语句进行分析,如果出现了那个对guest表的查询,在程序里面就做一个事件处理(把等号右边的”89“保存起来)。
急急急 急急急急急急急急
!!!!!!!!!!!!!!

解决方案 »

  1.   

    那你就做个筛选跟踪。。用脚本创建,将跟踪文件保存到磁盘上,或者跟踪信息保存到数据库里。其实,你对SQL Profile多了解一点使用就知道怎么做了,不需要了解原理。下面是个使用sql profile脚本的例子,你也可以在图形界面筛选好后,再保存为脚本,就可以在后台一直运行了。但对系统性能影响蛮大的,而其如果跟踪的内容多,产生的东西就会很多。
    DECLARE @em int;
    DECLARE @TraceId int;
    DECLARE @maxFileSize bigint;
    DECLARE @fileName nvarchar(128);declare @on bit;--set trace values
    set @maxFileSize =5;
    SET @fileName=N'C:\ProfilerTrace';
    set @on =1;--create trace
    exec @em=sp_trace_create @TraceId output,
    0,
    @fileName,
    @maxFileSize,
    null;--error handling
    if(@em !=0)
    goto error--set the trace events and data columns to collect--collect rpc:completed event and selected data columns]exec sp_trace_setevent @traceid,10,13,@on;
    exec sp_trace_setevent @traceid,10,34,@on;
    exec sp_trace_setevent @traceid,10,1,@on;
    exec sp_trace_setevent @traceid,10,18,@on;
    exec sp_trace_setevent @traceid,10,16,@on;
    exec sp_trace_setevent @traceid,10,17,@on;
    exec sp_trace_setevent @traceid,10,25,@on;
    exec sp_trace_setevent @traceid,10,35,@on;
    exec sp_trace_setevent @traceid,10,10,@on;
    exec sp_trace_setevent @traceid,10,14,@on;
    exec sp_trace_setevent @traceid,10,15,@on;
    exec sp_trace_setevent @traceid,10,12,@on;
    exec sp_trace_setevent @traceid,10,11,@on;
    exec sp_trace_setevent @traceid,10,51,@on;
    exec sp_trace_setevent @traceid,10,2,@on;--collect sp:stmtcompleted event and select data columnsexec sp_trace_setevent @traceid,43,13,@on;
    exec sp_trace_setevent @traceid,43,34,@on;
    exec sp_trace_setevent @traceid,43,1,@on;
    exec sp_trace_setevent @traceid,43,18,@on;
    exec sp_trace_setevent @traceid,43,16,@on;
    exec sp_trace_setevent @traceid,43,17,@on;
    exec sp_trace_setevent @traceid,43,25,@on;
    exec sp_trace_setevent @traceid,43,35,@on;
    exec sp_trace_setevent @traceid,43,10,@on;
    exec sp_trace_setevent @traceid,43,14,@on;
    exec sp_trace_setevent @traceid,43,15,@on;
    exec sp_trace_setevent @traceid,43,12,@on;
    exec sp_trace_setevent @traceid,43,11,@on;
    exec sp_trace_setevent @traceid,43,51,@on;
    exec sp_trace_setevent @traceid,43,2,@on;--collect sql:batchstarting event and selected data columnsexec sp_trace_setevent @traceid,13,13,@on;
    exec sp_trace_setevent @traceid,13,34,@on;
    exec sp_trace_setevent @traceid,13,1,@on;
    exec sp_trace_setevent @traceid,13,18,@on;
    exec sp_trace_setevent @traceid,13,16,@on;
    exec sp_trace_setevent @traceid,13,17,@on;
    exec sp_trace_setevent @traceid,13,25,@on;
    exec sp_trace_setevent @traceid,13,35,@on;
    exec sp_trace_setevent @traceid,13,10,@on;
    exec sp_trace_setevent @traceid,13,14,@on;
    exec sp_trace_setevent @traceid,13,15,@on;
    exec sp_trace_setevent @traceid,13,12,@on;
    exec sp_trace_setevent @traceid,13,11,@on;
    exec sp_trace_setevent @traceid,13,51,@on;
    exec sp_trace_setevent @traceid,13,2,@on;--collect sql:batchcompleted event and select data columns
    exec sp_trace_setevent @traceid,12,13,@on;
    exec sp_trace_setevent @traceid,12,34,@on;
    exec sp_trace_setevent @traceid,12,1,@on;
    exec sp_trace_setevent @traceid,12,18,@on;
    exec sp_trace_setevent @traceid,12,16,@on;
    exec sp_trace_setevent @traceid,12,17,@on;
    exec sp_trace_setevent @traceid,12,25,@on;
    exec sp_trace_setevent @traceid,12,35,@on;
    exec sp_trace_setevent @traceid,12,10,@on;
    exec sp_trace_setevent @traceid,12,14,@on;
    exec sp_trace_setevent @traceid,12,15,@on;
    exec sp_trace_setevent @traceid,12,12,@on;
    exec sp_trace_setevent @traceid,12,11,@on;
    exec sp_trace_setevent @traceid,12,51,@on;
    exec sp_trace_setevent @traceid,12,2,@on;
    --collect showplan xml event and select data columnsexec sp_trace_setevent @traceid,122,13,@on;
    exec sp_trace_setevent @traceid,122,34,@on;
    exec sp_trace_setevent @traceid,122,1,@on;
    exec sp_trace_setevent @traceid,122,18,@on;
    exec sp_trace_setevent @traceid,122,16,@on;
    exec sp_trace_setevent @traceid,122,17,@on;
    exec sp_trace_setevent @traceid,122,25,@on;
    exec sp_trace_setevent @traceid,122,35,@on;
    exec sp_trace_setevent @traceid,122,10,@on;
    exec sp_trace_setevent @traceid,122,14,@on;
    exec sp_trace_setevent @traceid,122,15,@on;
    exec sp_trace_setevent @traceid,122,12,@on;
    exec sp_trace_setevent @traceid,122,11,@on;
    exec sp_trace_setevent @traceid,122,51,@on;
    exec sp_trace_setevent @traceid,122,2,@on;--set filtersexec sp_trace_setfilter @traceid,3,0,0,9--start the traceexec sp_trace_setstatus @traceid,1;--display trace id for later use
    select traceid=@TraceId;
    goto finish;--error trap
    error:
    select errorcode=@em;--exit
    finish: ;
    go---stop the traceexec sp_trace_setstatus 2,0;--close the traceexec sp_trace_setstatus 2,2;
    select * from fn_trace_gettable('c:\ProfilerTrace.trc',default)
      

  2.   

    SQL Profile也可以作必要筛选的
    SQL Profile可以保存到表的保存到表后爱怎么处理怎么处理
      

  3.   

    这个上面讲的也多
    http://www.ibm.com/developerworks/cn/java/j-lo-p6spy/
    但具体方法没讲
      

  4.   


    profiler 都带有这些功能,lz参考。
      

  5.   


    这个貌似是db2的吧。这边有本专门讲 sql profile的书,可以参考下。
    http://www.sqlservercentral.com/articles/books/65797/
      

  6.   

    obuntu:
      你发的那些语句我怎么用?
      

  7.   

    发的语句不能用,只是提供参考,你要根据你的需要选择相关的Profile事件和列。
      

  8.   

    sql profile进行事务分析了。
      

  9.   


    其实我的要求是:你前台每操作一次(不是产生一个SQL语句传入后台吗,假如传了查询,我就对该语句进行分析处理,知道吧,是操作一次,分析处理一次,跟踪到一条SQL语句,把该语句导入到表中,然后进行分析,看看这个语句是不是我想要的,如果不是继续跟踪,是这个意思,也就是跟踪到一条分析处理一条,不是批跟踪,批处理),你发的那些代码,这个类似SQL自带的事件探测器,不能实时的进行跟踪处理,我的要求是要实时的进行跟踪,分析,处理。这个能做到吗?
      

  10.   

    我的ini@http模式,前台发的请求,都是以https发到后台,由后台的isapi予以实现、执行
    所以这个后台isapi能记录所有的sql
      

  11.   


    只要你不kill trace的进程,想跟踪多久就多久。。相当于实时的。