Oracle运维笔记之有关外部表的ORA-20011错误-阿里云开发者社区

开发者社区> 数据库> 正文

Oracle运维笔记之有关外部表的ORA-20011错误

简介: Oracle运维笔记之有关外部表的ORA-20011错误

最近测试服务器在迁移后,每天的22点多就会出现以下错误:

Wed Nov 04 22:17:48 2020
DBMS_STATS: GATHER_STATS_JOB encountered errors. Check the trace file.
Errors in file /oracle/app/diag/rdbms/ofsaa/ofsaa1/trace/ofsaa1_j001_54452.trc:
ORA-20011: Approximate NDV failed: ORA-29913: error in executing ODCIEXTTABLEOPEN callout
KUP-11024: This external table can only be accessed from within a Data Pump job.

从错误信息上看,是在对外部表收集统计信息时出现的错误。通过oerr ora命令没有找到20011的相关信息,接下来就只有查看MOS了。在文档1274653.1,ORA-20011 ORA-29913 and ORA-29400 with Associated KUP-XXXXX Errors from DBMS_STATS.GATHER_STATS_JOB中,是这样介绍错误原因的:

图片.png

内部表文件丢失,但是数据库字典信息中由于某些原因没有及时更新,仍然保留着内部表的信息。当用DBMS_STATS收集该内部表的统计信息时,调用内部表信息,但由于文件已经不存在导致了报错。
看到这里也就确定了问题所在,测试库有一张外部表,在迁移后,外部表文件没有迁移到新服务器上,还在之前的服务器,这就导致了在新服务器上只有外部表的定义,而没有文件,所以在收集统计信息时才会报错。
在知道原因后,跟测试人员确认,得知这张外部表不是必要的表,那么只需要在数据库中删除掉这张外部表了,参考MOS的步骤如下:
1.定位外部表的文件路径

define owner
undefine table_pattern
select el.table_name, el.owner, dir.directory_path||'/'||dir.directory_name "path"
from dba_external_locations el, dba_directories dir
where el.owner like '%ETL_ADMIN%'
and el.directory_owner = dir.owner
and el.directory_name = dir.directory_name
order by 1, 2;

2.锁定收集统计信息或删除表

DBMS_STATS.LOCK_TABLE_STATS ('ownname','tabname');
AND/OR
DROP TABLE ownname.tabname;

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
数据库
使用钉钉扫一扫加入圈子
+ 订阅

分享数据库前沿,解构实战干货,推动数据库技术变革

其他文章