実行計画・統計情報取得の手順

ロールの作成・付与や、情報を格納するテーブルを作成するといった準備が必要。

準備と言っても大したことはなく、oracle の標準スクリプトをパシパシ叩く
くらいでさほど時間はかからない。その手順を紹介する。



SYS ユーザで接続

$ sqlplus / as sysdba

PLUSTRACE ロールの作成

SQL> @$ORACLE_HOME/sqlplus/admin/plustrce.sql

このスクリプトでは、plustrace ロールの作成、 DBA ロール(Admin オプション付)の付与、
v_$ (動的パフォーマンスビュー[v$] の元テーブル)への参照権限を付与している。

plustrce ロールは、drop → create しているため、既に存在する場合は、
以下のエラーが表示されるが、その後正しくロールが再作成されていれば問題なし。

drop role plustrace
          *
行1でエラーが発生しました。:
ORA-01919: ロール'PLUSTRACE'は存在しません

SQL> create role plustrace;

ロールが作成されました。

plustrace ロールの付与

SQL> grant plustrace to <ユーザ名>;

実行計画・統計情報を取得するユーザに plustrace ロールを付与。

plan_table の作成

SQL> @$ORACLE_HOME/rdbms/admin/utlxplan.sql

実行計画を保存する plan_table を作成。

10g 以降は、plan_table が存在しない場合に一時テーブルに保存される仕様。
よって plan_table は必須ではないが、セッション切断後は実行計画を残らない。
任意の項目だが、特別な理由がない限り作成したほうがよいと思う。

トレースの取得

SQL> set autotrace on
SQL> <任意のSQLを実行>;

終了したい時は、

SQL> set autotrace off

【補足】エラー発生時の対処

SQL> set autotrace on

下記のエラーが発生する場合は対処が必要。
(問題なければ何も表示されない)

SP2-0618: 
  セッション識別子が見つかりません。PLUSTRACEロールが有効かを確認してください。
SP2-0611: 
  STATISTICSレポートを使用可能にするときにエラーが発生しました。

ロールが正しく作成されているかを確認し、必要に応じて plustrce.sql を再実行。
権限が付与されていない場合、plustrace ロールの付与する。