首页 > 数据库 > Oracle > alert日志中的两种ORA错误分析
SQL> select count(*) from "ET$00E73C1D0001";
select count(*) from "ET$00E73C1D0001"
*
ERROR at line 1:
ORA-06564: object IMPDP20130506 does not exist
对象既然不存在,那就使用desc来看看,到底可以不,但是desc又可以。
从这一点来说,这个对象还是有点特别。
SQL> desc "ET$00E73C1D0001";
Name Null? Type
----------------------------------------------------------------------------------------------------------------- -------- ----------------------------------------------------------------------------
ID NUMBER(15)
SN VARCHAR2(24)
GROUP_ID NUMBER(6)
SERVER_IP VARCHAR2(15)
SERVER_NAME VARCHAR2(40)
WORD NUMBER(4)
SERVER NUMBER(4)
SCENE NUMBER(4)
CN_GUID VARCHAR2(30)
BUY_TIME DATE
JEWEL_TOTAL NUMBER(7)
CN VARCHAR2(80)
CHARACTER_PUT VARCHAR2(50)
IP VARCHAR2(15)
WEAPONID NUMBER(15)
PUT_DATE DATE
WEAPONID_NEW NUMBER(15)
COUNT NUMBER
USER_CLASS NUMBER
CONSUME_WAY VARCHAR2(40)
通过上面的信息,可以很容易联想到应该是datapump中的临时表之类的,可能在上次datapump做expdp或者Impdp的时候出现了问题,结果这个临时表保留了下来。在做统计信息收集的时候就报出了错误。
但是上面还仅仅是个猜想,怎么验证呢,还是通过一个数据字典表dba_external_tables
select *from dba_external_tables where table_name='ET$00E73C1D0001';
OWNER TABLE_NAME TYP TYPE_NAME DEF DEFAULT_DIRECTORY_NAME REJECT_LIMIT ACCESS_
------------------------------ ------------------------------ --- ------------------------------ --- ------------------------------ ---------------------------------------- -------
ACCESS_PARAMETERS PROPERTY
-------------------------------------------------------------------------------- ----------
SYS ET$00E73C1D0001 SYS ORACLE_DATAPUMP SYS IMPDP20130506 UNLIMITED CLOB
DEBUG = (0 , 0) DATAPUMP INTERNAL TABLE "XXDATA"."CONSUME_LOG_XXXX_BEFORE201201 ALL
可以清晰的看到是在之前做impdp的时候抛出了错误,这个表是Impdp过程中产生的临时表。
还有一个思路就是在expdp/impdp等操作时,在数据库日志中也会有一定的信息标识,但是尝试查看数据库日志,这个问题是好几年前的了,几年前的alert日志已经被清空了,所以也无法求证在当时问题发生的时候到底是什么样的一个情况。
解决问题的步骤就很简单了,需要直接删除这个外部表即可。
SQL> drop table "ET$00E73C1D0001";
Table dropped.
通过这个案例可以看到,对于这些ORA错误还是需要通过日志来一步一步分析,逐个击破,可以大胆猜想,但是要小心求证,问题了解清楚了,解决起来都是很容易的。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/23718752/viewspace-1765141/ ,如需转载,请注明出处,否则将追究法律责任。