日々常々

ふつうのプログラマがあたりまえにしたいこと。

実行計画の権限

autotraceを実行しようとして次のエラーが発生する場合は、メッセージが示すとおり権限不足。

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

Oracle10gXEだとDBAをつけとけばいけるので、特に権限を気にしない試験環境ならDBAでいいんじゃないかな。ユーザーズ・ガイドおよびリファレンスには次のように書いてるから、ダメだったらPLUSTRACEロールをGRANTする。ロールがなければ作る。その辺も書いてます。

この機能を使用するには、自分のスキーマにPLAN_TABLE表を作成する必要があります。また、PLUSTRACEロールが必要です。DBA権限に、 PLUSTRACEロールを付与する必要があります。

SQL*Plus ユーザーズ・ガイドおよびリファレンス 10g リリース2(10.2)

ログインの時点で権限は決まるので別プロセスからGRANTしても有効になりません。一旦接続を切ってください。なお、権限を持った状態で接続後に別プロセスでREVOKEしても使えます。一応。一応なのはエラーが出るから。

SQL> select * from dual;
統計表示収集中にエラー(ORA-942)が発生しました。
SP2-0612: AUTOTRACEレポートの生成中にエラーが発生しました。

DU
--
X

SP2-0612: AUTOTRACEレポートの生成中にエラーが発生しました。

実行計画
----------------------------------------------------------
Plan hash value: 272002086

--------------------------------------------------------------------------
| Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |      |     1 |     2 |     2   (0)| 00:00:01 |
|   1 |  TABLE ACCESS FULL| DUAL |     1 |     2 |     2   (0)| 00:00:01 |
--------------------------------------------------------------------------

SP2-0612: AUTOTRACE STATISTICSレポートの生成中にエラーが発生しました。

エラーメッセージが示すとおり、統計表示でエラーが出てるので、統計出さなきゃエラーにはならなかったり。だから何なのかと言われると別になんでもない。

SQL> set autotrace trace exp
SQL> select * from dual;

実行計画
----------------------------------------------------------
Plan hash value: 272002086

--------------------------------------------------------------------------
| Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |      |     1 |     2 |     2   (0)| 00:00:01 |
|   1 |  TABLE ACCESS FULL| DUAL |     1 |     2 |     2   (0)| 00:00:01 |
--------------------------------------------------------------------------

このエラーは別プロセスでGRANTしてset autotraceしなおせば解消されます。つまり再ログインは不要。正直何の役にも立たない情報。