oracle11g 分析sql语句,SQL跟踪

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/quanwei132/article/details/83896487

背景:公司采购了一个OA系统,数据库是ORACLE的,没有源码;有一些二次开发的接口

          竟然是信息中心部门采购的,一群不懂技术的人,都不知道选型,也不考虑后续扩展,真是日了狗。

需求:信息中心要把所有OA流程,与之关联的查询设置、应用绑定设置、授权部门/人/组、自定义业务表、排序、自定义计算规则 都查出来,保存到一个表中,再用一个软件呈现

了解情况如下:无源码,反编译竟然找不到DML语句,以及DML语句与功能的管理(200多个jar包,class都在jar中),看了30多个,已经想日狗了

解决思路:我想找个SQL跟踪工具,点击页面某个菜单、或功能 查看sql 解决问题。

苦逼过程:1,首先查找了sqlmonitor,服务器搭建很麻烦,数据库竟然没有安装。我去,sqlmonitor 我小白了下,了解是性能优化的,貌似不能解决问题,就没有研究【放弃】

                   2,研究LogMiner半天这个,返现都是INSERT 之类的,并且时间设置失败(小白一个,没解决),只能全量,我还不想新增OA流程去找SQL关系。【放弃】
 

终极解决方案:

1,查询最近的sql (假如你预计你什么时候点击功能,时间就怎么设置)

SELECT * FROM v$sql  where last_active_time>TO_DATE('2018-11-09 13:17:00','yyyy-mm-dd hh24:mi:ss')
ORDER BY LAST_ACTIVE_TIME DESC;

注释:发现有sql ,但是里面:1 ;   :2等等 是什么鬼。

2,解决上面的鬼东西,看如下

select
s.sql_text,
b.name,b.position,b.dup_position,
b.value_string,s.LAST_ACTIVE_TIME,s.SQL_FULLTEXT
from v$sql s, v$sql_bind_capture b
where  s.last_active_time>TO_DATE('2018-11-09 13:17:00','yyyy-mm-dd hh24:mi:ss') and s.hash_value=b.hash_value
ORDER BY s.LAST_ACTIVE_TIME DESC,b.position;

注释:大多数执行sql 都需要预编译的,故很多参数绑定在v$sql_bind_capture 这个表。

猜你喜欢

转载自blog.csdn.net/quanwei132/article/details/83896487