报错信息 ORA-20011: Approximate NDV failed: ORA-29913: error in executing ODCIEXTTABLEOPEN callout ORA-29400: data cartridge error 1.首先检查alert.log. ORA-20011: Approximate NDV failed: ORA-29913: error in executing ODCIEXTTABLEOPEN callout ORA-29400: data cartridge error KUP-04040: file alert_orcl1.log in DIRALERT not found 这些情况下通常以下症状:DBMS_STATS正在执行某种形式ora - 20011, ora - 29913和ora - 29400错误,ora - 29913指定外部函数“ODCIEXTTABLEOPEN”表示有一个错误的callout外部函数“ODCIEXTTABLEOPEN”在试图打开一个外部表。 这个问题的主要原因是“外部表”的操作系统文件曾经存在过,但现在没有。但是,数据库仍然认为表的操作系统文件存在,因为关于对象的字典信息没有被修改以反映更改。当DBMS_STATS针对相关表运行时,它会调用外部表,但由于对象不在那里,所以调用失败。外部表可能不存在的原因有很多,包括:临时数据池外部表没有被正确地清理。当数据ump作业完成时,字典信息应该已经被删除。外部表的操作系统文件被删除,而没有清除相应的数据字典信息。 解决方案: 这个问题的解决方案基本上是清理多出的字典条目。不同的解决方案取决于主要原因的确切性质 在SQL*Plus中以SYSDBA的形式运行以下代码查询外部表。 set linesize 200 trimspool on
set pagesize 2000
col owner form a30
col created form a25
col last_ddl_time form a25
col object_name form a30
col object_type form a25
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 关联来自上面DBA_OBJECTS和DBA_EXTERNAL表的信息,以识别属于数据池的临时外部表。 再删除属于数据池的临时外部表 参考:ORA-20011 ORA-29913 and ORA-29400 with Associated KUP-XXXXX Errors from DBMS_STATS.GATHER_STATS_JOB (文档 ID 1274653.1)
|