正在执行的Oracle SQL为何找不到执行计划

License2Kill 2015-07-17 09:23:44
通过gv$session和gv$sql关联得到正在执行的SQL_ID,至始至终这个SQL都在执行(这个很确定,而且这句SQL跑2小时以上都不结束)。
然后用select * from dbms_xplan.display_cursor('6xr0whwktqqs6')查执行计划,报下面错误:

NOTE: cannot fetch plan for SQL_ID: 6xr0whwktqqs6, CHILD_NUMBER: 0
Please verify value of SQL_ID and CHILD_NUMBER;
It could also be that the plan is no longer in cursor cache (check v$sql_p

请教Oracle大侠,6xr0whwktqqs6这句SQL以前执行过,因为cursor sharing原因,Oracle想拿旧的执行计划,但是奇怪的是,
旧的执行计划已经不在了。
问题:
1、既然执行计划不在,为何Oracle还要通过cursor sharing机制拿旧的执行计划,而且拿不到旧的执行计划还不自动生成新的执行计划
2、SQL_ID: 6xr0whwktqqs6的执行计划已经不在,为何还保留在cursor cache中,而且还误导Oracle重用其执行计划
3、怀疑是环境配置问题,试了另外一个环境没这个问题,如果环境配置问题,有人知道哪里配置错了吗
...全文
568 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
License2Kill 2015-07-24
  • 打赏
  • 举报
回复
gv$sql_plan
你提醒我了,还有高深的分析大家发出来哦,结帖会给分的哦
小灰狼W 2015-07-17
  • 打赏
  • 举报
回复
这是一个RAC环境吧。看看这条语句在哪个节点上执行(inst_id),然后在那个节点上执行 dbms_xplan.display_cursor 查询 或者直接从gv$sql_plan来看

3,490

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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