MSSQL·查询T-SQL执行记录

阅文时长 | 0.78分钟 字数统计 | 1261.6字符
主要内容 | 1、引言&背景 2、查询最近的t-sql执行记录 3、查询实际执行过的事务日志 4、声明与参考资料
『mssql·查询t-sql执行记录』
编写人 | scschero 编写时间 | 2021/5/30 pm2:18
文章类型 | 系列 完成度 | 已完成
座右铭 每一个伟大的事业,都有一个微不足道的开始。

一、引言&背景   完成度:100%

a) 应对问题

mssql数据库中如何查询t-sql的执行记录?

b) 应用场景

查询t-sql的执行记录,影响的哪些表,查询的哪些内容,查询的脚本源码等。

c) 解决原理&方法

有两种方式查询t-sql执行记录。

  • 一种可以查询最近的t-sql执行记录,信息完整可显示详细的脚本。
  • 一种可以查询实际执行过的事务日志,只能看到影响的表,进行的是什么类型的操作(select,insert,delete,update)等。

二、查询最近的t-sql执行记录   完成度:100%

sys.dm_exec_query_stats这个视图主要是对执行计划的统计,包含消耗成本,运行次数等等。mssql默认不缓存全部,所以只有部分数据。
若要缓存全部,可通过开启跟踪,审计之类的方法,是可以记录所有操作的,但对db有一定的开销。

select top 1000
       qs.creation_time,
       substring(   st.text,
                    (qs.statement_start_offset / 2) + 1,
                    ((case qs.statement_end_offset
                          when -1 then
                              datalength(st.text)
                          else
                              qs.statement_end_offset
                      end - qs.statement_start_offset
                     ) / 2
                    ) + 1
                ) as statement_text,
       st.text,
       qs.total_worker_time,
       qs.last_worker_time,
       qs.max_worker_time,
       qs.min_worker_time
from sys.dm_exec_query_stats qs
    cross apply sys.dm_exec_sql_text(qs.sql_handle) st
where 1 = 1
      and qs.creation_time
      between '2017-09-09 10:00:00' and '2025-09-11 18:00:00'
      and st.text like '%%'
order by qs.creation_time desc;

三、查询实际执行过的事务日志   完成度:100%

查看数据库事务日志中的记录,fn_dblog中读取。

/* allocunitname常用的检索类型
lop_buf_write
lop_set_free_space
lop_lock_xact
lop_shrink_noop
lop_xact_ckpt
lop_prep_xact
lop_insert_rows
lop_modify_columns
lop_count_delta
lop_hobt_delta
lop_modify_header
lop_commit_xact
lop_delete_split
lop_end_ckpt
lop_begin_xact
lop_modify_row
lop_insysxact
lop_file_hdr_modify
lop_clear_gam_bits
lop_format_page
lop_begin_ckpt
lop_set_bits
*/


select [begin time],
       [end time],
       allocunitname,
       operation,
       [rowlog contents 0] as r0,
       [rowlog contents 1] as r1,
       *
from fn_dblog(null, null)
where allocunitname like 'dbo.%' --影响的表
      and operation in ( 'lop_delete_rows' )--操作类型

四、声明与参考资料   完成度:100%

原创博文,未经许可请勿转载。

如有帮助,欢迎点赞、收藏、关注。如有问题,请评论留言!如需与博主联系的,直接博客私信scschero即可。

(0)
上一篇 2022年3月21日
下一篇 2022年3月21日

相关推荐