SET LINESIZE 200
explain plan for
SQL文 ;
解析されました。
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY()) ;
実行計画が表示される。
-- 以下、Oracle11.1.0以降はPLAN_TABLEは提供されているのでCREATEは不要
PLAN_TABLEは、すべてのユーザーに対してEXPLAIN PLAN文の出力を保持するグローバル一時表として自動的に作成されます。
ご指摘いただい ora_gonsuke777さん、ありがとうございます。
-- Oracle10.2.0 以下のバージョンでは最初にPLAN_TABLEをCREATEしておかなければならない。
-- create PLAN_TABLE(CREATE USERしたらPLAN_TABLEもCREATEしておこう)
@?/rdbms/admin/utlxplan.sql
↑
sqlplus で ? は ORACLE_HOME(Oracleをインストールしたディレクトリ)
PLAN_TABLE はOracleのバージョンによりテーブルの内容が異なる。
Oracleのバージョンアップで古いバージョンのPLAN_TABLEをCREATE しまっていたら、
DROP TABLE PLAN_TABLE PURGE ;
し、現バージョンのPLAN_TABLEをCREATEし直す。
異なるバージョンのPLAN_TABLEを使っても、実行計画が正しく表示される保障はない。
昔、Oracleのパフォーマンス・チューニングで呼ばれた外資系の会社で。
PLAN_TABLEがないので実行計画を確認できない。
使うように指示されたスキーマには SELECT ANY TABLE権限などが設定されていたが
CREATE TABLE権限がない。ボスにPLAN_TABLEの必要性を説明したが、どうしてもPLAN_TABLEをCREATEさせてもらえない。最初からオラクル・サポートのアカウントはもらえたので、困り果ててオラクル・サポートにOracleやSQLの知識のない人にもPLAN_TABLEの必要性を説明するわかり易い文章をいただけませんか?って泣きついた。
statspackについても同じ手段を使った。
3ヶ月の契約が終わる頃、仕事が遅いから延長はなし。そりゃ、ほとんど毎日何とか権限が必要なので ... ってやっていたから実際にチューニングできる時間はかなり少なかったからね。
仕事が終わる数日前にわたしより前にOracleのパフォーマンス・チューニングで呼ばれた人が2人はいたことが判明。ボスは誰も契約の延長はしなかった。わたしの次のチューニング担当が決まっている、とのこと。
オラクル・サポートには今でも感謝している。