Oracle非法数据库对象引起错误及解决

网络整理 - 07-26
Oracle 数据库使用的时间越长,操作数据库的人越多,可能会遇到一些非法数据库对象引起的错误。

  例如:

  按用户 exp 时会报错(oracle10G)

  . exporting synonyms
  EXP-00008: ORACLE error 3113 encountered
  ORA-03113: end-of-file on communication channel
  EXP-00000: Export terminated unsuccessfully

  ORACLE8i 里面的的exp错误 ORA-00980。

  跟踪文件里的错误:

  ORA-07445: exception encountered:
    core dump [joe_well_known_internal()+39] [SIGSEGV]
  [Address not mapped to object] [0x1268D5C] [] []
  ......
  
  SELECT SYNNAM, DBMS_JAVA.LONGNAME(SYNNAM),
    DBMS_JAVA.LONGNAME(SYNTAB),TABOWN,
  TABNODE, PUBLIC$, SYNOWN, SYNOWNID, TABOWNID, SYNOBJNO
  FROM SYS.EXU9SYNU ORDER BY SYNTIME;

  我的经验是这些数据库的用户下很可能有非法数据库对象。删除不合法的数据对象,就可以了。一般情况下生成当前用户下重编译非法数据库对象的SQL语句:

  set pages 500;
  set lines 200;
  set trims on;
  set heading off;
  spool /tmp/1.sql;
  select 'alter '||object_type||' '||object_name||';
    compile' from user_objects where status='INVALID';
  spool off;
  @/tmp/1.sql;