前言:
平時在SCOTT用戶上做實驗時需要用到AUTOTRACE功能
但由於沒有權限,所以會報以下錯誤:
SQL> conn scott/a123456
已連接。
SQL> set autotrace traceonly
SP2-0618: 無法找到會話標識符。啓用檢查 PLUSTRACE 角色
SP2-0611: 啓用 STATISTICS 報告時出錯
上網搜了下是由於SCOTT用戶沒有PLUSTRACE 角色權限導致的。
現在來創建PLUSTRACE 角色並賦權給PUBLIC
----
實驗:
-- 參考eygle的文章:http://www.eygle.com/faq/AutoTrace.htm
SQL> conn sys/a123456 as sysdba
已連接。
SQL> show user
USER 爲 "SYS"
SQL> @?\rdbms\admin\utlxplan
表已創建。
已用時間: 00: 00: 00.18
SQL> create public synonym plan_table for plan_table;
create public synonym plan_table for plan_table
*
第 1 行出現錯誤:
ORA-00955: 名稱已由現有對象使用
已用時間: 00: 00: 00.06
SQL> grant all on plan_table to public ;
授權成功。
已用時間: 00: 00: 00.07
SQL> @?\sqlplus\admin\plustrce
SQL> drop role plustrace;
drop role plustrace
*
第 1 行出現錯誤:
ORA-01919: 角色 'PLUSTRACE' 不存在
已用時間: 00: 00: 00.03
SQL> create role plustrace;
角色已創建。
已用時間: 00: 00: 00.08
SQL>
SQL> grant select on v_$sesstat to plustrace;
授權成功。
已用時間: 00: 00: 00.01
SQL> grant select on v_$statname to plustrace;
授權成功。
已用時間: 00: 00: 00.01
SQL> grant select on v_$mystat to plustrace;
授權成功。
已用時間: 00: 00: 00.03
SQL> grant plustrace to dba with admin option;
授權成功。
已用時間: 00: 00: 00.01
SQL>
SQL> set echo off
SQL>
SQL> grant plustrace to public ;
授權成功。
--
到此爲止,已經成功給所有用戶賦予執行AUTOTRACE的權限了。現在切換到SCOTT用戶支測試一下
已用時間: 00: 00: 00.01
SQL> conn scott/a123456
已連接。
SQL> set autot trace
已用時間: 00: 00: 00.02
SQL> select * from emp ;
已選擇14行。
已用時間: 00: 00: 00.01
執行計劃
----------------------------------------------------------
Plan hash value: 3956160932
--------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 14 | 532 | 3 (0)| 00:00:01 |
| 1 | TABLE ACCESS FULL| EMP | 14 | 532 | 3 (0)| 00:00:01 |
--------------------------------------------------------------------------
統計信息
----------------------------------------------------------
104 recursive calls
0 db block gets
23 consistent gets
0 physical reads
0 redo size
1631 bytes sent via SQL*Net to client
519 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
14 rows processed
--=========================================================================--
以下是剛纔用到的兩個腳本的內容:
--1.?\rdbms\admin\utlxplan
/*
create table PLAN_TABLE (
statement_id varchar2(30),
plan_id number,
timestamp date,
remarks varchar2(4000),
operation varchar2(30),
options varchar2(255),
object_node varchar2(128),
object_owner varchar2(30),
object_name varchar2(30),
object_alias varchar2(65),
object_instance numeric,
object_type varchar2(30),
optimizer varchar2(255),
search_columns number,
id numeric,
parent_id numeric,
depth numeric,
position numeric,
cost numeric,
cardinality numeric,
bytes numeric,
other_tag varchar2(255),
partition_start varchar2(255),
partition_stop varchar2(255),
partition_id numeric,
other long,
distribution varchar2(30),
cpu_cost numeric,
io_cost numeric,
temp_space numeric,
access_predicates varchar2(4000),
filter_predicates varchar2(4000),
projection varchar2(4000),
time numeric,
qblock_name varchar2(30),
other_xml clob
);
*/
-- 2. ?\sqlplus\admin\plustrce
/*
set echo on
drop role plustrace;
create role plustrace;
grant select on v_$sesstat to plustrace;
grant select on v_$statname to plustrace;
grant select on v_$mystat to plustrace;
grant plustrace to dba with admin option;
set echo off
*/