今天alter日志中发现如下错误:
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.
此错误产生原因是在做datadump时候,oracle在产生三个临时表储存临时信息。err$,et$,sys_import_xxx....当在数据泵在未正常中止后,比如人为中止,造成datadump的临时外部表没有正常清理,或者是外部表文件被删除后,没有清理外部表的定义,就会造成oracle在做统计信息job时出现如此错误。
我们可以通过如下查询语句来查看oracle的ET$临时表对象
select OWNER,OBJECT_NAME,OBJECT_TYPE, status,
to_char(CREATED,'dd-mon-yyyy hh24:mi:ss') created
,to_char(LAST_DDL_TIME , 'dd-mon-yyyy hh24:mi:ss') last_ddl_time
from dba_objects where object_name like 'ET$%';
select owner, TABLE_NAME, DEFAULT_DIRECTORY_NAME, ACCESS_TYPE from dba_external_tables order by 1,2;查询属于datadump生成的外部表
解决办法:
删除掉属于datadump的外部表
drop table user.table purge;