設定CURRENT_SCHEMA後獲取執行計劃報錯
當設定了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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 執行計劃-1:獲取執行計劃
- 獲取SQL執行計劃SQL
- 【sql調優之執行計劃】獲取執行計劃SQL
- 獲取執行計劃之Autotrace
- 獲取執行計劃的方法
- 物化檢視重新整理遞迴SQL獲取執行計劃報錯遞迴SQL
- 【執行計劃】Oracle獲取執行計劃的幾種方法Oracle
- Oracle獲取執行計劃的方法Oracle
- Oracle 獲取SQL執行計劃方法OracleSQL
- 獲取SQL執行計劃的方式:SQL
- oracle 執行計劃設定Oracle
- oracle dbms_xplan獲取執行計劃Oracle
- 如何獲取真實的執行計劃
- 獲取執行計劃的6種方法
- 【java】【多執行緒】獲取和設定執行緒名字、獲取執行緒物件(3)Java執行緒物件
- Oracle 獲取執行計劃的幾種方法Oracle
- Oracle10g如何獲取執行計劃Oracle
- MySQL 5.7獲取指定執行緒正在執行SQL的執行計劃資訊MySql執行緒
- 執行計劃__獲取方法、檢視執行順序、統計資訊詳解
- 多執行緒-獲取和設定執行緒物件名稱執行緒物件
- 獲取oracle sql語句詳細些執行計劃OracleSQL
- 會話的跟蹤以及執行計劃的獲取會話
- oracle explain plan for獲取執行計劃並不可靠.OracleAI
- linux設定crontab定時執行任務計劃Linux
- 微課sql最佳化(9)、如何獲取執行計劃SQL
- 介紹幾種獲取SQL執行計劃的方法(上)SQL
- 報錯的語句也可以產生執行計劃
- 使用 EXPLAIN PLAN 獲取SQL語句執行計劃 (R0.1)AISQL
- 達夢資料庫獲取SQL真實的執行計劃資料庫SQL
- Linux 執行定時任務後,Laravel 專案報錯LinuxLaravel
- 多執行緒-執行緒排程及獲取和設定執行緒優先順序執行緒
- thinkphp 設定執行目錄為/public後 404錯誤PHP
- sql執行計劃變更和刪除快取中執行計劃的方法SQL快取
- 利用statspack來獲取生成環境中top SQL及其執行計劃SQL
- oracle 9i 獲取sql執行計劃(書寫長的sql)OracleSQL
- mysql的執行計劃快取問題MySql快取
- 斷言無法獲取 content 內容;執行後不生成報告
- 交流(1)-- 執行計劃錯誤問題