oracle10G中查寻应用系统某时点执行的sql语句及对应的参数。

 前些日子,客服人员电话过来说生产环境有个故障。故障本身很简单,就是一个查询功能无法查出结果。本地模拟了一下没有问题。于是将查询对应的sql语句让客服通过plsql在生产环境执行,确能查出结果。所以考虑是sql语句传的参数有问题,可是生产环境的log4j日志中没有将执行的sql打印出来,当然参数也看不到了。于是从网上找到一种方法,直接通过查询oracle的系统表:v$sqlarea,即可查询出最近一段时间内应用系统执行的sql语句和对应参数。具体方式如下:


1)查询时间段内执行的sql语句

select * from v$sqlarea b WHERE  b.LAST_ACTIVE_TIME between to_date('2012-09-10 16:34:40','yyyy-mm-dd hh24:mi:ss') and to_date('2012-09-10 16:35:50','yyyy-mm-dd hh24:mi:ss') order by b.LAST_ACTIVE_TIME

 

注意,v$sqlarea表中记录会定时更新,不会保留很久,具体保留多久没有仔细研究。

上面语句执行完毕后,我们主要关注2个字段: "sql_text"和"sql_id".其中sql_text会显示这段时间内执行的sql语句。我们可以手动找到自己想要的那条sql语句。遗憾的是其中并未包含该sql对应的参数值。于是为了知道参数值,我们需要继续做下面一步:

2)查询sql执行时对应的参数值
SELECT * FROM V$SQL_BIND_CAPTURE TT WHERE TT.SQL_ID = “1步中查询出的sql_id字段值”

语句执行完毕后,我们只需关注最后一个字段:VALUE_STRING,该字段中的值就是我们想要的参数值

我比较懒,没有深入研究其中的原理,如有错误支持希望各位看官能够不吝赐教。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值