SP2-0618: Cannot find the Session Identifier. Check PLUSTRACE role is enabled

路途中的人2012發表於2016-01-30
測試環境:OEL6.5+Oracle 11g R2

在進行執行計劃測試的時候,遇到一個小問題。

在用普通使用者執行下面這條命令的時候,普通使用者名稱為hhu,已經賦予了create session和resource許可權。在執行set autotrace on的時候,出現瞭如下錯誤:
SYS@ORCL> create user hhu identified by hhu;
User created.
SYS@ORCL> grant create session,resource to hhu;
Grant succeeded.
SYS@ORCL> conn hhu/hhu
Connected.
HHU@ORCL> create table t as select * from all_objects;
Table created.
HHU@ORCL> create index idx_object_id on t(object_id);
Index created.
HHU@ORCL> set autotrace on 
SP2-0618: Cannot find the Session Identifier.  Check PLUSTRACE role is enabled
SP2-0611: Error enabling STATISTICS report

第一次遇到這樣的錯誤(可見還是菜鳥),目前還沒財力購買一個mos帳號,於是乎去google了一下(官方文件應該也有解釋,但是第一次遇到這樣的問題,效率上不行),得到如下解釋:
要執行autotrace命令使用者必須要擁有PLUSTRACE角色,而這個角色預設賦予給使用者的。使用sys使用者執行$ORACLE_HOME/sqlplus/admin/plustrce.sql可以建立PLUSTRACE角色。
plustrce.sql這個指令碼會建立PLUSTRACE角色並賦予查詢v$sesstat,v$statnme以及v$mystat的許可權。PLUSTRACE被以with admin option方式授權給DBA角色。
對於9i和更早期的資料庫版本,可能還需要執行$ORACLE_HOME/rdbms/admin/utlxplan.sql指令碼來建立plan table。而在10g以及更高的版本中,PLAN_TBALE是預先存在的。
也就是說,錯誤原因是我所使用的普通使用者缺少一個能執行autotrace命令的相關角色,那麼我只需要建立好這個角色即可,而建立這個角色只需要執行
$ORACLE_HOME/sqlplus/admin/plustrce.sql即可。


執行plustrce.sql指令碼,得到的結果如下:

點選(此處)摺疊或開啟

  1. SYS@ORCL>@$ORACLE_HOME/sqlplus/admin/plustrce.sql;
  2. SYS@ORCL> 
  3. SYS@ORCL> drop role plustrace;
  4. drop role plustrace
  5.           *
  6. ERROR at line 1:
  7. ORA-01919: role 'PLUSTRACE' does not exist


  8. SYS@ORCL> create role plustrace;

  9. Role created.

  10. SYS@ORCL> 
  11. SYS@ORCL> grant select on v_$sesstat to plustrace;

  12. Grant succeeded.

  13. SYS@ORCL> grant select on v_$statname to plustrace;

  14. Grant succeeded.

  15. SYS@ORCL> grant select on v_$mystat to plustrace;

  16. Grant succeeded.

  17. SYS@ORCL> grant plustrace to dba with admin option;

  18. Grant succeeded.

  19. SYS@ORCL> 
  20. SYS@ORCL> set echo off
執行完$ORACLE_HOME/sqlplus/admin/plustrce.sql這個指令碼後,我們需要將PLUSTRACE角色賦予給hhu使用者。
HHU@ORCL> conn / as sysdba
Connected.
SYS@ORCL> grant plustrace to hhu;
Grant succeeded.
SYS@ORCL> conn hhu/hhu
Connected.
HHU@ORCL> set autotrace on
HHU@ORCL> set linesize 1000
HHU@ORCL> 

下面是$ORACLE_HOME/sqlplus/admin/plustrce.sql這個指令碼的完整內容(實際上看上面這個指令碼的執行過程也能分析出來):
[oracle@hhu ~]$ cat $ORACLE_HOME/sqlplus/admin/plustrce.sql
--
-- Copyright (c) Oracle Corporation 1995, 2002.  All Rights Reserved.
--
-- NAME
--   plustrce.sql
--
-- DESCRIPTION
--   Creates a role with access to Dynamic Performance Tables
--   for the SQL*Plus SET AUTOTRACE ... STATISTICS command.
--   After this script has been run, each user requiring access to
--   the AUTOTRACE feature should be granted the PLUSTRACE role by
--   the DBA.
--
-- USAGE
--   sqlplus "sys/knl_test7 as sysdba" @plustrce
--
--   Catalog.sql must have been run before this file is run.
--   This file must be run while connected to a DBA schema.


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

可以發現,其實就是幾條簡單的建立角色並賦予相關許可權的命令的組合,如果知道整個指令碼內容,PLUSTRACE這個角色名是可以任意取的;在最後的命令中使用with admin option,說明該角色可被級聯授予。


@huan


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29067253/viewspace-1984654/,如需轉載,請註明出處,否則將追究法律責任。

相關文章