当设置了CURRENT_SCHEMA后,利用EXPLAIN PLAN语句分析执行计划,在获取执行计划时出现错误。
例子如下:
SQL> conn / as sysdba
已连接。
SQL> alter session set current_schema = test;
会话已更改。
SQL> explain plan for select * from t;
已解释。
SQL> select * from table(dbms_xplan.display);
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
Error: cannot fetch last explain plan from PLAN_TABLE
造成这个问题的原因很简单,虽然设置了CURRENT_SCHEMA使得SELECT * FROM T这个语句在TEST方案下执行,但是EXPLAIN PLAN在写PLAN_TABLE的时候并没有写到对应SCHEMA下,而是写入当前用户的PLAN_TABLE表:
SQL> select count(*) from plan_table;
COUNT(*)
----------
0
SQL> alter session set current_schema = sys;
会话已更改。
SQL> select count(*) from plan_table;
COUNT(*)
----------
2
SQL> select * from table(dbms_xplan.display);
PLAN_TABLE_OUTPUT
------------------------------------------------------------------------------------
Plan hash value: 1601196873
--------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 30 | 2 (0)| 00:00:01 |
| 1 | TABLE ACCESS FULL| T | 1 | 30 | 2 (0)| 00:00:01 |
--------------------------------------------------------------------------
Note
-----
- dynamic sampling used for this statement (level=2)
已选择12行。
如果当前用户和设置的目标用户使用的是同一个PLAN_TABLE,则不会存在这个问题:
SQL> alter session set current_schema = test;
会话已更改。
SQL> drop table plan_table;
表已删除。
SQL> explain plan for select * from t;
已解释。
SQL> select * from table(dbms_xplan.display);
PLAN_TABLE_OUTPUT
------------------------------------------------------------------------------------
Plan hash value: 1601196873
--------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 30 | 2 (0)| 00:00:01 |
| 1 | TABLE ACCESS FULL| T | 1 | 30 | 2 (0)| 00:00:01 |
--------------------------------------------------------------------------
Note
-----
- dynamic sampling used for this statement (level=2)
已选择12行。
EXPLAIN PLAN没有支持CURRENT_SCHEMA,这个问题在11.2中仍然存在。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/4227/viewspace-673098/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/4227/viewspace-673098/