我们希望将自动统计信息收集从外部脚本转移到 Oracle 9i 的作业调度程序中。这是一个非常简单的工作,代码基本上是这样的:
DBMS_JOB.SUBMIT(
JOB => <output variable>,
WHAT => 'DBMS_STATS.GATHER_DATABASE_STATS(
cascade => TRUE, options => ''GATHER AUTO'');',
NEXT_DATE => <start date>,
INTERVAL => 'SYSDATE + 7');
作业成功创建并运行,但失败并出现错误:
ORA-12012: error on auto execute of job 25
ORA-20000: Insufficient privileges to analyze an object in Database
ORA-06512: at "SYS.DBMS_STATS", line 11015
...
我没有得到的部分是我提交作业的用户具有收集这些数据库统计信息的正确权限——如果我手动运行该命令,它就可以工作。我很好奇 Oracle 是否忽略了用户在创建过程时所拥有的任何基于角色的特权,所以我直接授予用户 ANALYZE ANY,但仍然没有骰子。
是否有一些其他权限我必须直接授予用户才能完成这项工作?我宁愿不必为每个架构制作单独的作业(如果我在架构所有者下提交作业,这确实有效)。