sqlserver数据库跟踪,金蝶erp的数据报表
·
需求: 跟踪一个每次只能查询一个月的报表,最后把所有的数据都放到一个数据库表里。
- 首先跟踪测试环境数据库(测试环境没人使用方便看出当前报表的sql),复制出几条测试环境跟踪出的sql用来筛选正式环境的sql。
- 打开安装sqlserver时带的sqlserver profiler-左上角文件-新建跟踪-连接需要跟踪的服务器,常规默认就行,在事件选择里勾选跟踪项
TSQL里这两个主要是跟踪SQL,然后在勾选Stored Procedures里的这两项,主要是跟踪erp里的存储过程。
点击列筛选器根据databaseid筛选出要跟踪的数据库(select db_id()查自己数据库id),
点击确定-运行。
在这种情况下直接运行在erp里要跟踪的报表,运行前可以清楚其余跟踪出没用的sql(因为当前数据库不止你一个人在操作),当erp里的数据报表已经查询出来数据后,点击暂停。开始分析
5.把spid和textdata拉到前面,因为主要用的就是这两列
SPID:当前连接的id,只要连接没断开SPID不会变,所以我们从SPID筛选出是自己的连接
TEXTDATA:当前执行的sql或者存储过程
CTRL+F根据在测试环境跟踪出的SQL来确定当前连接的SPID,然后把跟踪出的当前SPID的从第一条SQL,依次复制出来。(start和completed可能重复只复制一个就行,这里坑比较多,有的start和complete都是隔了好几行才重复)
6.跟踪出来以后的查询条件都是写死的,然后分析sql,找到所有的2024(年份),每隔几个字母后面都会跟一个数字大部分都叫Fperiod,把年份换成动态的,月份也换成动态的
7.因为跟踪出来的是多条sql,所以创建批量执行存储过程,
然后把跟踪出来的sql生成的表都改成自己的表名称,因为要定时任务重复执行,所以每次执行该存储过程时,都先删除该表,
又因为需要记录每个月的数据,所以复制一个一模一样的表结构用来存最终的数据,并新建一个now_date字段存年月,并且每次执行时候删除最终表里上个月的数据,然后把查询出来的上个月的数据插入到最终表里。
8.在sqlserver-management-studio里创建定时任务,定时任务内容是执行该存储过程。执行前先把之前几个月的数据补上。
更多推荐
所有评论(0)