无权收集 table 统计数据

No privileges to gather table stats

我有一个 oracle 程序包,其中包含创建 table 的过程,然后它授予了权限。

代码与此类似:

Begin
Execute immediate 'create table SU.temp_tbl...';
...
...
Dbms_stats.gather_table_stats('SU', 'TEMP_TBL');
End;

过程的所有者是具有 DBA 角色的用户。

这个角色有

create any table privilege

比如

Analyze any table privilege

那么为什么当我在 运行 这个过程中,我在 gather table 命令上得到 'no privileges' 的异常, 但是 'create' 刚刚执行好了?

解决方案是什么?我是否需要 SU 用户明确授予 DBA 分析权限?

我用的是oracle 11g版本

谢谢。

权限必须直接授予 procedure/package 的所有者,而不是通过角色间接授予。

当然EXECUTE ON owner.name_of_procedure也是必须的

来自GATHER_TABLE_STATS Procedure

的使用说明

To invoke this procedure you must be owner of the table, or you need the ANALYZE ANY privilege.