zoukankan      html  css  js  c++  java
  • 使用SQL语句实现SQL Profiler的功能

    SQL Profiler是个好东西。极大的方便了我们查看SQL语句的执行情况,也能帮助我们了解SQL的很多内部状态。那么除了运行SQL Profiler就没有其他方法可以实现了吗?当然不会,这里提供一个简单的示例以示说明:
    
    1. 使用系统存储过程sp_trace_create建立一个Trace,这个SP可以在on-line help上找到
    
    DECLARE @TraceIdOut int, @On bit, @rc int
    -- Define the trace
    exec @rc = sp_trace_create @TraceIdOut OUTPUT, 2, N'c:/sqlauditfile1'  --最后一个参数是最终Trace结果存放的位置
    print @TraceIdOut  --打印Trace ID的目的是当需要停止该Trace时好知道该挺哪个
    
    2. 使用系统存储过程sp_trace_setevent告知SQL所要监听的事件以及事件返回的信息,同样具体参数参看on-line help
    
    SET @On = 1
    exec sp_trace_setevent @TraceIdOut, 13, 1, @On --最后一个参数表明开始监听,这里很是奇特,该参数是bit型,但是直接传1不行,必须是一个bit型的变量。。。
    
    --这个例子监听的是SQL:BatchCompleted事件,返回的是SQL最终执行的语句(TextData)
    
    --如果想监听多个事件,或者需要返回多个信息,那么就多次执行该语句(不同的参数哦)
    
    3. 使用系统存储过程sp_trace_setstatus让指定Trace开始运行
    exec @rc = sp_trace_setstatus @TraceIdOut, @status = 1 
    
    4.开始执行一些SQL语句。
    
     
    
    5.执行差不多了,再次使用系统存储过程sp_trace_setstatus来停止Trace,并且关闭和删除这个Trace。
    
    exec sp_trace_setstatus 1,0  --停止Trace
    exec sp_trace_setstatus 1,2  --关闭和删除Trace
    
    6.发现C盘下多了第一步建立的文件,用SQL Profilter打开看看吧。。。
    
    注意:
    
    1.如果不执行第5步,那么第一步建立的文件是打不开的。
    
    2.SQL好像不能自行删除文件,也就是说如果文件存在,需要手工先行删除。
    
    3.第一步打印Trace ID的目的是为了最后一步用,因为不在一起执行。。。
    
    4.可以建立两个任务,第一个是一早执行,开始一个Trace;第二个是晚上执行,关闭Trace。那么客户一天的SQL语句执行情况都知道了。。。

    原帖地址:http://blog.csdn.net/bluemliu/article/details/1684412

  • 相关阅读:
    implement the bucket sort and some analysis
    冪運匴
    polynomial multiplication
    WinRAR(WinZip)压缩与解压实现(C#版Window平台)
    Windows 窗体计时器事件,则不引发在 Windows 服务
    VS 2008智能提示是英文的怎么改成中文的?
    C#_SQL数据访问帮助类
    C#_DllImport用法和路径问题
    Office2003/2007/2010强力卸载工具下载
    Windows_装的是2008R2系统,在电脑属性里显示内存12G(可用4G)
  • 原文地址:https://www.cnblogs.com/wugang/p/2974722.html
Copyright © 2011-2022 走看看