这个错误比较奇怪,设置AUTOTRACE是出现SP2-0611和ORA-942错误。
版本11.2 for Linux x86-64:
SQL> CONN TEST/TEST
已连接。
SQL> SET AUTOT TRACE
搜集统计信息时出错ORA-942
SP2-0611:启用STATISTICS报告时出错
SQL> SET AUTOT ON
搜集统计信息时出错ORA-942
SP2-0611:启用STATISTICS报告时出错
SQL> SET AUTOT OFF
SQL> SET AUTOT ON
搜集统计信息时出错ORA-942
SP2-0611:启用STATISTICS报告时出错
SQL> @?/rdbms/admin/utlxplan
表已创建。
SQL> SET AUTOT TRACE
搜集统计信息时出错ORA-942
SP2-0611:启用STATISTICS报告时出错
SQL> SET AUTOT ON
搜集统计信息时出错ORA-942
SP2-0611:启用STATISTICS报告时出错
这个错误以前还真没有碰到过,一般导致AUTOTRACE失败不是因为PLAN_TABLE不存在,就是由于缺少PLUSTRACE角色或PLUSTRACE角色包含的视图权限。
更多精彩内容:http://www.bianceng.cn/database/Oracle/
而11g中PLAN_TABLE是一个同义词,指向SYS的PLAN_TABLE$表,而且这个表的DML权限已经授权给PUBLIC了,因此不应该是这个表导致的问题。
将PLAN_TABLE建立了当前用户下,错误依旧。
怀疑是由于缺少权限造成的问题:
SQL> CONN / AS SYSDBA
已连接。
SQL> @?/sqlplus/admin/plustrce
SQL>
SQL> drop role plustrace;
drop role plustrace
*
第1行出现错误:
ORA-01919:角色'PLUSTRACE'不存在
SQL> create role plustrace;
角色已创建。
SQL>
SQL> grant select on v_$sesstat to plustrace;
授权成功。
SQL> grant select on v_$statname to plustrace;
授权成功。
SQL> grant select on v_$mystat to plustrace;
授权成功。
SQL> grant plustrace to dba with admin option;
授权成功。
SQL>
SQL> set echo off
SQL> GRANT PLUSTRACE TO TEST;
授权成功。
返回刚才的TEST用户,并重新登陆:
SQL> CONN TEST/TEST
已连接。
SQL> SET AUTOT ON
问题消失,看来就是由于缺少权限造成的。不过正常情况下Oracle的报错应该是:
SQL> CREATE USER A IDENTIFIED BY A;
用户已创建。
SQL> GRANT CONNECT TO A;
授权成功。
SQL> CONN A/A
已连接。
SQL> SET AUTOT ON
SP2-0618:无法找到会话标识符。启用检查PLUSTRACE角色
SP2-0611:启用STATISTICS报告时出错
SQL> SET AUTOT OFF
检查TEST用户拥有的权限:
SQL> SELECT OWNER, TABLE_NAME, PRIVILEGE
2 FROM USER_TAB_PRIVS
3 WHERE WNER = 'SYS'
4 AND PRIVILEGE = 'SELECT';
OWNER TABLE_NAME PRIVILEGE
------------------------------ ------------------------------ ---------------------
SYS V_$PROCESS SELECT
SYS V_$SESSION SELECT
SYS V_$PARAMETER SELECT
SYS V_$MYSTAT SELECT
怀疑因为包含了V_$MYSTAT视图的权限,使得Oracle没有报错缺少PLUSTRACE权限,而是报错ORA-942错误。
SQL> CONN / AS SYSDBA
已连接。
SQL> GRANT SELECT ON V_$MYSTAT TO A;
授权成功。
SQL> CONN A/A
已连接。
SQL> SET AUTOT ON
搜集统计信息时出错ORA-942
SP2-0611:启用STATISTICS报告时出错
问题果然如此。