li
  当前位置:主页 > 性能优化 > 文章内容
li
JOB调用DBMS_STATS包出错的诊断
来源: http://yangtingkun.itpub.net/  作者: yangtingkun    时间:2008-01-26   阅读:4  

在检查后台alert文件的时候,发现了一个job运行错误。


错误信息为:

Errors in file /opt/oracle/admin/tradedb/bdump/tradedb1_j000_10429.trc:
ORA-12012:
自动执行作业 68 出错
ORA-20000: Insufficient privileges to analyze an object in Schema
ORA-06512:
"SYS.DBMS_STATS", line 13323
ORA-06512:
"SYS.DBMS_STATS", line 13682
ORA-06512:
"SYS.DBMS_STATS", line 13760
ORA-06512:
"SYS.DBMS_STATS", line 13719
ORA-06512:
line 1

从错误信息看,应该是收集统计信息的时候缺少权限。

首先检查出错的JOB

SQL> SELECT JOB, WHAT FROM DBA_JOBS WHERE JOB = 68;

JOB WHAT
---------- -------------------------------------------------------------------
68 DBMS_STATS.GATHER_SCHEMA_STATS(USER, METHOD_OPT => 'FOR ALL INDEXED COLUMNS');

SQL> SELECT JOB, LAST_DATE, NEXT_DATE FROM DBA_JOBS WHERE JOB = 68;

JOB LAST_DATE NEXT_DATE
---------- ------------------- -------------------
68 2007-12-14 04:00:00 2007-12-21 12:37:27

这个JOB是用户在收集自己的统计信息,如果是收集其他用户的统计信息出错是比较正常的,而收集自己的统计信息报权限问题,肯定不正常。

而且这个JOB7天前还顺利执行,现在报错很可能是和最近的数据库修改有关。

根据目前的情况判断,存在两种可能,一种是bug,另一种是由于最近的修改导致的。

通过查询metalink,没有找到相关的bug描述,且大部分类似的错误都和权限有关。看来问题很可能是第二种情况。

如果是第二种情况,那么用户收集自己的统计信息怎么会出现权限不足呢。如果是用户下的表,则用户肯定有权限分析,如果在其他用户下,又不会去收集信息。看来问题应该不是出在表的身上。

再次观察JOB执行的命令,DBMS_STATS.GATHER_SCHEMA_STATS默认是收集索引信息的,那会不会是索引造成的问题。表虽然不会跑到其他用户下,可是索引是可能建立到其他用户下的。

查询索引的OWNER,果然发现问题:

SQL> SELECT DISTINCT OWNER FROM ALL_INDEXES WHERE TABLE_OWNER = 'GPO';

OWNER
------------------------------
SYS
GPO

IXDBA.NET社区论坛

进一步查询具体错误对象:

SQL> SELECT OWNER, TABLE_NAME, INDEX_NAME
2 FROM ALL_INDEXES
3 WHERE OWNER = 'SYS'
4 AND TABLE_OWNER = 'GPO';

OWNER TABLE_NAME INDEX_NAME
-------------------- ------------------------------ ------------------------------
SYS GPO_ACCREDIT_PRICE IND_GPO_ACC_PRICE_SELLER_ID

查看索引的创建时间,果然是昨天建立的:

SQL> SELECT OBJECT_NAME, CREATED FROM USER_OBJECTS
2 WHERE OBJECT_NAME = 'IND_GPO_ACC_PRICE_SELLER_ID';

OBJECT_NAME CREATED
------------------------------ -------------------
IND_GPO_ACC_PRICE_SELLER_ID 2007-12-20 16:05:35

删除索引后,在GPO用户下重建,问题解决。




  上一篇: 安装ORACLE10201 for ENTERPRISE...   下一篇: ORA-600(ktftb_backout_xids_3)错...
li
 §相关评论  
 热点文章

·Resize datafile导致ASM Crash
·在Oracle10g RAC下新增ASM磁盘
·ORACLE SQL性能优化系列 (一)
·oracle性能调优:管理oracle日志
·oracle RAC环境中系统时钟的调
·why:Rac的心跳线不支持交叉线?
·RAC的VIP及实例依赖关系:版本O
·如何启动DataGuard的备用数据库
·系统表空间IO错误 数据损坏处理
·不幸中的万幸:遭遇ORA-00600 [
·用ORACLE的高级复制实现内外网
li
 编辑推荐
·Resize datafile导致ASM Crash
·在Oracle10g RAC下新增ASM磁盘
·ORACLE SQL性能优化系列 (一)
·oracle性能调优:管理oracle日志
·oracle RAC环境中系统时钟的调
·why:Rac的心跳线不支持交叉线?
·RAC的VIP及实例依赖关系:版本O
·如何启动DataGuard的备用数据库
·系统表空间IO错误 数据损坏处理
·不幸中的万幸:遭遇ORA-00600 [
·用ORACLE的高级复制实现内外网
li
 相关篇章
·安装ORACLE10201 for ENTERPRISE...
·Enterprise Linux 5上安装64位Or...
·撤销事务报错出现多个ORA-600错误
·RAC安装出现ORA-341和ORA-312错误
·ORA-600(ksmovrflow)错误
·Oracle10g新增BLOCK CHANGE TRAC...
·Oracle11新特性——备份恢复功能...
·Oracle11g物理STANDBY打开模式应...
·2007年总结
·RAC环境的STANDBY数据库备份报错
·ORA-600(ktftb_backout_xids_3)错...
·检查LINUX环境的CPU缓存
·Oracle11新特性——撤销事务(二...
·撤销事务指定错误的XID导致ORA-6...
·RMAN CROSSCHECK命令小bug
·安装ORACLE10201 for REDHAT AS4...
·撤销事务报错ORA-55505
·安装Oracle10201 for REDHAT AS4...
·安装ORACLE10201 for REDHAT AS4...
·Oracle11新特性——备份恢复功能...
 
li
设为首页 | 关于我们 | 技术服务 | 收藏本站 | 网站地图 | 联系方式 | 本站友情连接