在Oracle中收集查询计划统计信息时收到警告,请问原因是什么?
问题原因与解决方法
你遇到的警告,核心原因是当前dbms_xplan.display_cursor查询的不是你加了gather_plan_statistics提示的目标SQL,而是默认读取了最近执行的SELECT SYS_CONTEXT('USERENV', 'CURRENT_SCHEMA') FROM DUAL语句——这个语句既没加统计收集提示,也没开启对应统计级别,所以触发了警告。
解决步骤
- 先定位目标SQL的SQL_ID:通过查询
v$sql视图找到你要分析的那条SQL的ID,示例语句:SELECT sql_id, sql_text FROM v$sql WHERE sql_text LIKE '%你的目标查询的特征片段%'; -- 注意替换成你实际查询里的独特内容,避免匹配到无关SQL - 带着SQL_ID调用
dbms_xplan.display_cursor:把查到的SQL_ID传入参数,比如目标SQL_ID是xxxxxx,执行:SELECT * FROM table(dbms_xplan.display_cursor(sql_id => 'xxxxxx', format => 'adaptive allstats last')); - 额外提醒:如果目标SQL刚执行完,且中间没跑其他SQL,也可以用
sql_id => null,但这种方式容易因为误操作取到无关语句,更推荐明确指定SQL_ID。
内容的提问来源于stack exchange,提问作者Rudra
相关产品推荐
相关产品推荐

