问题现象:
ORACLE数据库下,有时候想自己搞些性能监控的job,不可避免要在存储过程中使用到某些系统动态视图,但会报下面错误:
Compilation errors for PROCEDURE SCOTT.P_SES_MON
Error: PL/SQL: ORA-00942: 表或视图不存在
Line: 5
Text: SELECT * FROM v$session;
Error: PL/SQL: SQL Statement ignored
Line: 4
Text: INSERT INTO t_ses_log
但在正常的SQL中是能够对v$session进行访问的。
问题解决:
联想到运行statspack报告的perfstat用户没有此问题,查看下statspack的创建脚本,发现需要单独使用下面
语句进行赋权:
/* Select privs for catalog objects - ROLES disabled in PL/SQL packages */
grant select on V_$SESSION to scott;
问题搞定!