v$sql 里对应不上v$session ?

ncufunk 2015-11-30 04:13:11
先用这条语句:
SELECT sql_id,sql_text FROM V$SQL WHERE sql_text like '%jfys%' and sql_text like '%tst%'

查得有一个sql_id 的值是 a9gx1f52d1vjp

然后用 语句: select * from v$session where sql_id='a9gx1f52d1vjp'
则没有得到任何记录,请问这是怎么回事呀?
...全文
235 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
lhdz_bj 2015-12-08
  • 打赏
  • 举报
回复 1
按照楼主这查,这两个视图本来就没这种对应关系的。 v$sql中是用户提交过的SQL,v$session中是当前系统的会话。 例如:一个会话,跑完这个SQL后,就退出了,也就是消失了,你怎么可能对应的上? 又比如:一个会话跑完这个SQL后,又跑了N多其他的SQL,这也是对应不上的,v$session.sql_id只是存储会话最后一次运行的SQL。 你要查执行完的SQL,这个需求本身也许就有点问题,更准确的说,应该是查执行过多少次的SQL,因为在数据库里,同一条SQL语句,是可以多次执行的。 例如:你可以查v$sql.executions,如果其>=1,那么,可以说这个SQL被执行过了,但是否又被运行了,这个不好说,那么你只能看这个SQL的其他指标是否还在变化,例如:buffer_gets,disk_reads等,都可以判断的。另外,还一个字段,users_executing,这个字段是指正在运行这个语句的用户数,如果其<1或=0,那么说,这个SQL语句当前没回话执行。所以,你可以这么判断下: select sql_fulltext from v$sql where executions>=1 and user_excuting=0; 该语句是查出了,被执行过的,且当前未被执行的SQL。 oracle的视图非常丰富,只要我们熟悉掌握它们,我们就可以得到我们需要的信息。 仅供参考。
ncufunk 2015-12-01
  • 打赏
  • 举报
回复
引用 1 楼 ssqtjffcu1 的回复:
v$sql里面的不代表当前正在执行的sql语句哦,所以不一定要在v$session里查的到吧
那应该在哪查的到全的呢?其实,我要查的就是已经执行完的语句。
ssqtjffcu 2015-12-01
  • 打赏
  • 举报
回复
v$sql里面的不代表当前正在执行的sql语句哦,所以不一定要在v$session里查的到吧

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧