您当前的位置: 首页 > 数据库教程 > Oracle教程 > Oracle非法数据库对象引起错误及解决

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

作者:不详 来源:网络 发布时间: 2011-10-20 15:10 点击:
正文: Oracle数据库使用的时间越长,操作数据库的人越多,可能会遇到一些非法数据库对象引起的错误。 例如: 按用户exp时会报错(oracle10G) .exporting synonyms EXP-00008:ORACLE error3113encountered ORA-03113:end-of-file on communication channel EXP-00000:Ex

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

  正文:
  
  Oracle数据库使用的时间越长,操作数据库的人越多,可能会遇到一些非法数据库对象引起的错误。
  
  例如:
  
  按用户exp时会报错(oracle10G)
  
  .exporting synonyms
  
  EXP-00008:ORACLE error3113encountered
  
  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 ORDERBY SYNTIME;
  
  我的经验是这些数据库的用户下很可能有非法数据库对象。删除不合法的数据对象,就可以了。一般情况下生成当前用户下重编译非法数据库对象的SQL语句:
  
  set pages500;
  
  set lines200;
  
  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;
  
  但也有例外的情况:
  
  当原始的表被drop掉后,依据它创建的同义词就变得不能访问了。
  
  原始的表重建以后,同义词仍然不可以访问。
  
  但在user_objects里面的status状态是'VALID',却不是'INVALID'。
  
  这需要我们把它们找出来,运行查询同义词表结构的语句:
  
  spool/tmp/1.sql;
  
  select'desc'||synonym_name||';' from user_synonyms;
  
  spool off;
  
  @/tmp/1.sql;
  
  出错的同义词,一定要先彻底删除掉,再重建创建同义词。
  
  drop synonym&synonym_name;
  
  create synonym&synonym_name for&owner.&table_name;
  
  重编译后,仍然出错的数据对象,经开发人员同意后,我们还可以选择drop它们。我还遇到过一次在drop非法数据库对象的时候,不加双引号之前,提示数据对象不存在。一定要在数据库对象加上双引号就可以删掉了。(这可能跟创建数据对象所用的辅助性工具有关)
  
  例如:
  
  drop table scott."emp" cascade constraints;
  
  drop trigger scott."trigger_name";
  
  如果所有的非法数据对象都没有了,还会出现上面的错误。可能是jvm(java虚拟环境)的问题。DBMS_JAVA.LONGNAME()过程函数一执行,就会报错。还有一个解决办法:重建sys用户下跟同义词有关的视图,让它找不到记录。
  
  drop view EXU9SYNU;
  
  create view EXU9SYNU as
  
  SELECT"SYNNAM","SYNNAM2","SYNTAB",
  
  "TABOWN","TABNODE","PUBLIC$","SYNOWN",
  
  "SYNOWNID","TABOWNID","SYNOBJNO","SYNTIME"
  
  FROMsys.exu9syn
  
  --WHERE synownid=UID;(原来的视图创建方法)
  
  WHERE0=1;
  
  grant select on sys.EXU9SYNU to public;
  
  这样一来按用户导出数据时,可以跳过同义词部分,继续完成后面的工作。

分享到:
本文"Oracle非法数据库对象引起错误及解决"由远航站长收集整理而来,仅供大家学习与参考使用。更多网站制作教程尽在远航站长站。
顶一下
(1)
100%
踩一下
(0)
0%
[点击 次] [返回上一页] [打印]
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 密码: 验证码:
关于本站 - 联系我们 - 网站声明 - 友情连接- 网站地图 - 站点地图 - 返回顶部
Copyright © 2007-2013 www.yhzhan.com(远航站长). All Rights Reserved .
远航站长:为中小站长提供最佳的学习与交流平台,提供网页制作与网站编程等各类网站制作教程.
官方QQ:445490277 网站群:26680406 网站备案号:豫ICP备07500620号-4