plsql dev中dynamic performance tables not accessible分析解决 相信很多使用plsql dev的朋友多遇到过类此如下面的提示: dynamic performance tables not accessible,automatic statistics disabled for this session you can disable statistics in the pr
plsql dev中dynamic performance tables not accessible分析解决相信很多使用plsql dev的朋友多遇到过类此如下面的提示:
dynamic performance tables not accessible,automatic statistics disabled for this session you can disable statistics in the preference menu,or obtanin selectpriviliges on the v$session,v$sesstat and v$statname tables一、产生该提示原因
plsql dev在用户运行过程中,要收集用户统计信息,但是由于你现在登录的用户没有访问v$session,v$sesstat and v$statname视图的权限,所以不能收集当前用户的统计信息,和plsql dev工具中配置的automatic statistics相冲突,所以就出现了这个提示,试验验证:
[oracle@xifenfei ~]$ sqlplus / as sysdbasql*plus: release 11.2.0.3.0 production on thu nov 10 04:31:57 2011copyright (c) 1982, 2011, oracle. all rights reserved.connected to:oracle database 11g enterprise edition release 11.2.0.3.0 - productionwith the partitioning, olap, data mining and real application testing optionssys@xff>create user chf identified by xifenfei;user created.sys@xff>grant create session,resource to chf;grant succeeded.sys@xff>conn chf/xifenfeiconnected.chf@xff>select * from session_privs;privilege----------------------------------------create sessionunlimited tablespacecreate tablecreate clustercreate sequencecreate procedurecreate triggercreate typecreate operatorcreate indextype10 rows selected.chf@xff>select table_name from user_tab_privs;no rows selected创建一个chf用户,授权create session,resource,无v$session,v$sesstat and v$statname视图访问权限,使用plsql dev登录并查询user_tables表(登录时不会提示,只有用户执行了查询或者相关类此操作时候才会提示)
二、解决问题
根据警告提示,可以有两种方法解决这种警告
1、关闭plsql dev统计功能
在 tools->preferences->options里 把automatic statistics前的那个勾子去掉,保存
2、给访问用户授权访问相关视图
授权访问v_$session,v_$sesstat,v_$statname,注意不能直接对v$视图进行授权
chf@xff>conn / as sysdbaconnected.sys@xff>grant select on v_$session to chf;grant succeeded.sys@xff>grant select on v_$sesstat to chf;grant succeeded.sys@xff>grant select on v_$statname to chf;grant succeeded.sys@xff>conn chf/xifenfeiconnected.chf@xff>select table_name from user_tab_privs;table_name------------------------------v_$sessionv_$sesstatv_$statname三、问题分析
通过上面的解决方法,为什么授权访问v$session,v$sesstat and v$statname视图就可以statistics用户的信息了呢?请见下面的两张图
图1:通过plsql dev中的tools–>session选项看用户统计信息
图2:通过sql语句查询用户统计信息
通过两张图的比较可能会发现,他们的数值有一点点出入,那是因为我先通过tools查询出用户统计信息,再通过sql查询,所以图1中的数据有些选项会比图2小那么一点点,通过对v$session,v$sesstat and v$statname视图分析,发现其实plsql dev就是通过下面sql实现统计功能,也从而进一步说明了,为什么plsql dev收集统计信息需要对v$session,v$sesstat and v$statname视图授于访问权限
select c.name, b.statistic#, b.value from v$session a, v$sesstat b, v$statname c where a.sid = b.sid and a.audsid = userenv('sessionid') and b.statistic# = c.statistic# order by c.statistic#;