PL\SQL 打开时出现"动态执行表不可访问,本会话的自动统计被禁止"

PL/SQL Developer报错处理
本文介绍了解决PL/SQL Developer中因缺少访问动态性能视图权限而导致的报错问题。提供了三种处理方法,包括授予特定用户或public查询权限,以及关闭自动统计功能。

转自:http://hi.baidu.com/victorlin23/blog/item/217c133ee5654ee8838b1363.html



这个报错信息在不同的PL/SQL Developer版本都会出现,从上面详细的报错提示信息中我们可以判断得到,报错原因不在工具本身。

在此,详细记录一下这个小问题的三种处理方法。

1.第一种处理方法(不推荐)

就是在报错的Error对话框中将“Don't show this message again”选项选中,下次就不在提示这个错误了。

这种方法应该可以叫做“鸵鸟方式”的处理方法。没有从根本上解决这个问题。

2.第二种处理方法(可以采纳)

报错信息中描述的非常详细,原因是动态性能表没有权利被访问导致的问题,因此,我们通过把所需访问权限赋予给具体用户的方法来解决这个问题。

这里给出我能想到的三种具体处理方法。大家可以继续补充。

1)如果只是某一具体用户有权限查询这三个动态性能视图,可以如下进行操作

这里注意一下:我们授权的视图是V_$session不是V$session,因为V$session是同名不是具体的视图。否则您会收到下面这个错误。

sys@ora10g> grant select on V$session to user_sec;

grant select on V$session to user_sec

*

ERROR at line 1:

ORA-02030: can only select from fixed tables/views

正确的授权方法如下:

SQL> grant select on V_$session to user_sec;

SQL> grant select on V_$sesstat to user_sec;

SQL> grant select on V_$statname to user_sec;

2)可以使用下面这个“简单粗暴”的方法处理之。

SQL> grant SELECT ANY DICTIONARY to user_sec;

3)以上两种方法是针对特定用户的处理方法,如果想让所有用户(不局限在上面的user_sec用户)都能够查询这三个动态性能视图,可以通过将查询权限授权给public方法来实现,操作如下。这样就可以保证所有开发人员都不会再出现上述的报错信息了。

SQL> grant select on V_$session to public;

SQL> grant select on V_$sesstat to public;

SQL> grant select on V_$statname to public;



3.第三种方法(推荐)

彻底禁掉PL/SQL Developer的这个功能。

方法如下:

导航到Tools --> Preferences --> Options

找到“Automatic Statistics”选项,将其前面的小对勾去掉,然后点击“Apply”和“OK”保存退出。

<think>我们正在解决Oracle环境下“动态执行不可访问,本会话自动统计被禁用”的问题。根据引用内容,此问题是由于当前用户没有权限访问动态性能视图v$session, v$sesstat, v$statname等导致的。解决方法是以sysdba身份登录,然后授予这些视图的SELECT权限给普通用户。 步骤: 1. 使用具有SYSDBA权限的账户(如sys)登录到数据库。 2. 执行GRANT SELECT语句,将v$session, v$sesstat, v$statname以及v$mystat的SELECT权限授予目标用户(例如sczy_tj)。 注意:在授权,视图名称大小写不敏感,但通常使用大写。另外,这些视图属于SYS用户,因此在授权需要加上SYS.前缀(在某些情况下可能需要,但如果已经通过同义词访问则可以不加)。不过,根据Oracle的实践,通常直接使用视图名称(如v_$session)或通过同义词(v$session)访问。在授权,我们通常使用同义词名。 但是,请注意:v$session实际上是v_$session的同义词,而v_$session是SYS用户下的视图。因此,在授权,可以直接对v$session进行授权(因为同义词是公有的),但更严谨的做法是授权基础视图v_$session(或使用SYS.v_$session)。 然而,引用中给出的方法是直接对v$session、v$sesstat等视图进行授权。因此,我们按照引用中的方法操作。 具体操作如下(以用户sczy_tj为例): </think>### 解决动态性能不可访问问题的方法 根据引用内容,您遇到的"动态执行不可访问,本会话自动统计禁止"问题需要为普通用户授予特定动态性能视图的查询权限。以下是具体解决方案: #### 🔧 解决方法步骤 1. **使用管理员账户登录** 以 `SYSDBA` 身份连接数据库: ```sql CONNECT sys/<密码> AS SYSDBA ``` 2. **授予必要视图权限** 为目标账号(如 `sczy_tj`)授权: ```sql GRANT SELECT ON v$session TO sczy_tj; GRANT SELECT ON v$sesstat TO sczy_tj; GRANT SELECT ON v$statname TO sczy_tj; GRANT SELECT ON v$mystat TO sczy_tj; -- 附加相关视图[^3] ``` 3. **验证权限状态** 检查用户权限: ```sql SELECT * FROM dba_tab_privs WHERE grantee = 'SCZY_TJ' AND table_name IN ('V_$SESSION','V_$SESSTAT','V_$STATNAME'); ``` #### ⚠️ 关键注意事项 1. **权限范围** - `v$session` 等视图存储在 `SYS` 模式下,必须显式授权[^2] - 普通用户默认无权限访问动态性能视图 2. **错误预防** ```sql -- 若遇到"或视图不存在"错误 GRANT SELECT ON sys.v_$session TO sczy_tj; -- 使用底层视图名 ``` 3. **权限回收方法**(如需撤销) ```sql REVOKE SELECT ON v$session FROM sczy_tj; REVOKE SELECT ON v$sesstat FROM sczy_tj; -- 同理撤销其他视图权限 ``` > **原理说明**:此问题是由于 Oracle 的安全机制限制普通用户访问性能监控视图导致的。通过显式授权后,PL/SQL Developer 等工具就能正常获取会话统计信息[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值