经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 数据库运维 » MS SQL Server » 查看文章
SQL Server基础之默认跟踪
来源:cnblogs  作者:刀奈特程序员  时间:2018/10/8 9:03:00  对本文有异议

    用过SQL Server Profiler的都知道,它可以跟踪SQL Server,并将SQL Server执行过的SQL显示在界面。默认跟踪(Default Trace)便是集成在SQL Server中,和SQL Server Profiler功能类似的一项服务,它的结果记录在log.trc文件中。顾名思义,默认跟踪(Default Trace)默认开启,若不想使用需要手动关闭。

  1. --查看默认跟踪是否开启,value=1表示开启。
  2. select value from sys.configurations where configuration_id = 1568
  1. --开启默认跟踪
  2. sp_configure 'show advanced options' , 1 ;
  3. GO
  4. RECONFIGURE;
  5. GO
  6. sp_configure 'default trace enabled' , 1 ;
  7. GO
  8. RECONFIGURE;
  9. GO
  1. --关闭默认跟踪
  2. sp_configure 'default trace enabled' , 0 ;
  3. GO
  4. RECONFIGURE;
  5. GO
  6. sp_configure 'show advanced options' , 0 ;
  7. GO
  8. RECONFIGURE;
  9. GO

    SQL Server只维护5log.trc文件,每个最大20M,实行滚动更新机制,即在5个文件都达到20M或者SQL Server实例重启时,删除最早建立的,重新生成一个新的log.trc文件。因为这个规则,导致只能查询到最近一段时间的跟踪记录,并且SQL Server越忙碌,可查询时间越短。这当然成为默认跟踪的一个缺点。不过,可以通过使用代理定时读取log.trc文件或者在服务器上使用小软件定时将log.trc文件复制到其他目录的方式进行弥补

  1. --获取正在使用的log.trc文件路径
  2. --:: 是必须的。
  3. SELECT value FROM ::fn_trace_getinfo(0) where property=2
  1. --读取正在被SQL Server使用的log.trc跟踪文件
    --此段SQL将返回一个行集
    declare @LogTrcWenJianLuJing nvarchar(4000)
  2. SELECT @LogTrcWenJianLuJing=convert(nvarchar(4000),value) FROM ::fn_trace_getinfo(0) where property=2
  3. select * From ::fn_trace_gettable(@LogTrcWenJianLuJing,DEFAULT)
  1. --此段SQL读取最早一个trc文件
  2.  
  3. --获取正在使用的trc文件路径
  4. declare @ZhengZaiShiYongDeTrcWenJianLuJing nvarchar(4000)
  5. SELECT @ZhengZaiShiYongDeTrcWenJianLuJing=convert(nvarchar(4000),value) FROM ::fn_trace_getinfo(0) where property=2
  6.  
  7. /*默认跟踪结果文件都是类似"log_87.trc"这样的文件名,log_+数字,其后数字滚动加一,即创建新文件时,它的命名是"log_88.trc"
  8. 根据这个特性,可以逆推取得最早一个trc文件*/
  9. declare @WeiZhi int
  10. declare @BianLiangChangDu int
  11. set @BianLiangChangDu=len(@ZhengZaiShiYongDeTrcWenJianLuJing)
  12. set @WeiZhi= @BianLiangChangDu-CHARINDEX('\',REVERSE(@ZhengZaiShiYongDeTrcWenJianLuJing))+1
  13.  
  14. --获取的除去.trc后缀的文件名
  15. declare @ZhengZaiShiYongDeTrcWenJianMing nvarchar(250)
  16. select @ZhengZaiShiYongDeTrcWenJianMing=replace(Lower(RIGHT(@ZhengZaiShiYongDeTrcWenJianLuJing,@BianLiangChangDu-@WeiZhi)),'.trc','')
  17. --获取正在使用的文件名中的数字并减去4组合log_获得最早一个trc文件名
  18. declare @ZuiZaoTrcWenJianMing nvarchar(250)
  19. set @ZuiZaoTrcWenJianMing='log_'+CONVERT(nvarchar(250), convert(int,right(@ZhengZaiShiYongDeTrcWenJianMing,len(@ZhengZaiShiYongDeTrcWenJianMing)-CHARINDEX('_',@ZhengZaiShiYongDeTrcWenJianMing))-4))
  20. --获取最早文件路径
  21. declare @ZuiZaoTrcWenJianLuJing nvarchar(4000)
  22. select @ZuiZaoTrcWenJianLuJing=REPLACE (@ZhengZaiShiYongDeTrcWenJianLuJing,@ZhengZaiShiYongDeTrcWenJianMing,@ZuiZaoTrcWenJianMing)
  23. --读取最早一个trc文件
  24. select * From ::fn_trace_gettable(@ZuiZaoTrcWenJianLuJing,DEFAULT)

    默认跟踪较SQL Server Profile轻量许多,自然也没有SQL Server Profile功能强大。它不会跟踪所有事件,但比较关键的信息,如:Auditing eventsDatabase eventSerror eventsFull text eventsObject creationObject deletionObject alteration,都有跟踪,足以满足基本需求

 

参考文献:

https://docs.microsoft.com/zh-cn/previous-versions/sql/sql-server-2008-r2/ms173875%28v%3dsql.105%29

https://docs.microsoft.com/zh-cn/previous-versions/sql/sql-server-2008-r2/ms188425(v%3dsql.105)

 

=====================================================================================
本文只代表本人的见解,可能存在错误,仅用于技术交流。如果你喜欢该文,可以扫下面的二维码打赏我(打赏敬请备注“博客园打赏”五字)。

 

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号