• Job定时自动执行SQL日志记录脚本


    数据库类型

    SQL Server

    用途

    用于自动记录SQL当天运行的SQL语句及相关事务,对于DB及业务系统维护人员来说还是很有用的

    可解决相关问题

    1、当业务数据表中一条重要数据误删之后,要找回该条数据的插入记录用于恢复数据

    2、查询数据表中数据被谁修改、删除

    3、用于数据库遇到查询耗时、事务堵塞、CPU内存消耗等问题分析

     相关函数的解释:

       sp_trace_setevent (Transact-SQL) - SQL Server | Microsoft Learn

       sp_trace_setstatus (Transact-SQL) - SQL Server | Microsoft Learn

    以下是存储过程sql内容

      注:存储过程创建完成之后,配置JOB定时执行就行,当天的记录会归在同一个日志文件中

      产生的日志文件示例:duration202408260000.trc,用SQL Server Profiler工具打开

    1. --exec dbo.TraceEis
    2. CREATE proc TraceEis
    3. /*目的:自动开启追踪日志*/
    4. as
    5. begin
    6. declare @rc int
    7. declare @TraceID int
    8. declare @maxfilesize bigint
    9. declare @DateTime datetime
    10. set @DateTime = DATEADD(MI,-1,dateadd(day,1,getdate()))--定义追踪文件结束的记录日期
    11. set @maxfilesize = 4096 --定义跟踪文件的大小,单位是MB
    12. declare @path nvarchar(50)
    13. set @path=N'D:\SQLLog\duration'+'20'+convert(varchar(10),getdate(),12)+replace(convert(varchar(5),getdate(),108),':','')
    14. exec @rc = sp_trace_create @TraceID output, 0, @path, @maxfilesize, @DateTime
    15. if (@rc != 0) goto error
    16. /*
    17. 0 :没有错误。
    18. 1 :未知错误。
    19. 10:无效选项。 指定的选项不兼容时返回此代码。
    20. 12:文件未创建。
    21. 13:内存不足。 在没有足够内存执行指定的操作时返回此代码。
    22. 14:无效停止时间。 在指定的停止时间已发生时返回此代码。
    23. 15:参数无效。 在用户已提供不兼容的参数时返回此代码。
    24. */
    25. declare @on bit
    26. set @on = 1
    27. --在完成了远程过程调用 (RPC) 时发生
    28. exec sp_trace_setevent @TraceID, 10, 1, @on --TextData
    29. exec sp_trace_setevent @TraceID, 10, 8, @on --HostName
    30. exec sp_trace_setevent @TraceID, 10, 10, @on --ApplicationName
    31. exec sp_trace_setevent @TraceID, 10, 11, @on --LoginName
    32. exec sp_trace_setevent @TraceID, 10, 12, @on --SPID
    33. exec sp_trace_setevent @TraceID, 10, 13, @on --Duration
    34. exec sp_trace_setevent @TraceID, 10, 14, @on --StartTime
    35. exec sp_trace_setevent @TraceID, 10, 16, @on --read
    36. exec sp_trace_setevent @TraceID, 10, 17, @on --write
    37. exec sp_trace_setevent @TraceID, 10, 18, @on --CPU
    38. --在完成了 Transact-SQL 批处理时发生
    39. exec sp_trace_setevent @TraceID, 12, 1, @on
    40. exec sp_trace_setevent @TraceID, 12, 8, @on
    41. exec sp_trace_setevent @TraceID, 12, 10, @on
    42. exec sp_trace_setevent @TraceID, 12, 14, @on
    43. exec sp_trace_setevent @TraceID, 12, 11, @on
    44. exec sp_trace_setevent @TraceID, 12, 12, @on
    45. exec sp_trace_setevent @TraceID, 12, 13, @on
    46. exec sp_trace_setevent @TraceID, 12, 16, @on
    47. exec sp_trace_setevent @TraceID, 12, 17, @on
    48. exec sp_trace_setevent @TraceID, 12, 18, @on
    49. -- Set the Filters
    50. declare @intfilter int
    51. declare @bigintfilter bigint
    52. -- Set the trace status to start
    53. exec sp_trace_setstatus @TraceID, 1
    54. -- display trace id for future references
    55. select TraceID=@TraceID
    56. goto finish
    57. error:
    58. select ErrorCode=@rc
    59. finish:
    60. end
  • 相关阅读:
    云上的云服务器、裸金属以及容器可以为 Lakehouse 提供海量的计算资源
    80W美团架构师整理分享出了Spring5企业级开发实战文档
    记录一个出现多次的小BUG:用串口读的数据,只能有一次赋值
    P02014195 郑芷涵(信息论课程作业)
    openwrt 23.05.2 稳定版本 导入树莓派4B
    IDA Pro正版多少钱?本文告诉你!
    使用百度飞桨EasyDL实现电商UGC图片自动分类
    iOS之crash分析篇--符号化
    网易云信IM后端自定义发送消息,前端接收不到,但消息已发送【BUG记录】
    基于强化学习的空域作战辅助决策(1D)
  • 原文地址:https://blog.csdn.net/qq_24886681/article/details/142170325