加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

impdp错误:SYS.DBMS_INTERNAL_LOGSTDBY包异常

(2012-06-08 15:00:18)
标签:

杂谈

分类: oracle
错误一:ORA-39087: directory name MY_DUMP1 is invalid
发现如果ORACLE_SID环境变量配置不正确会报这错误,之前没遇到过标记一下。

错误二:
ORA-39002: invalid operation
ORA-39070: Unable to open the log file.
ORA-29283: invalid file operation
ORA-06512: at "SYS.UTL_FILE", line 488
ORA-29283: invalid file operation

文件操作失败,不能写日志文件。这个一般需要检查directory名称、direcotry权限(对非sys用户都需要赋权)、文件系统权限等是否正确。
发现通过impdp来测试问题是否解决比较麻烦,用下面的程序执行则比较简单,直接对相关目录进行文件操作,如果成功则说明目录没问题是其他地方出了错误。
DECLARE 
  V1 VARCHAR2(32767); 
  F1 UTL_FILE.FILE_TYPE; 
BEGIN 
  F1 := UTL_FILE.FOPEN('MYDIR','xx.log','R',256); --需要改变目录名和文件名
  UTL_FILE.GET_LINE(F1,V1,32767); 
  UTL_FILE.FCLOSE(F1); 
END;
/

错误三:
ORA-31626: job does not exist
ORA-04063: package body "SYS.DBMS_INTERNAL_LOGSTDBY" has errors
ORA-06508: PL/SQL: could not find program unit being called: "SYS.DBMS_INTERNAL_LOGSTDBY"
ORA-06512: at "SYS.KUPV$FT", line 834
ORA-04063: package body "SYS.DBMS_LOGREP_UTIL" has errors
ORA-06508: PL/SQL: could not find program unit being called: "SYS.DBMS_LOGREP_UTIL"

SYS.DBMS_INTERNAL_LOGSTDBY错误,尝试重新编译:
SQL> alter package DBMS_INTERNAL_LOGSTDBY compile;
Warning: Package altered with compilation errors.

编译有错,查看错误原因:
SQL>  select line,position,type,text from dba_errors where name = 'DBMS_INTERNAL_LOGSTDBY' order by line;
      LINE   POSITION TYPE                     TEXT
---------- ---------- ------------------------ ------------------------------
      3580         50 PACKAGE BODY             PL/SQL: ORA-00942: table or vi
                                               ew does not exist
      3580          5 PACKAGE BODY             PL/SQL: SQL Statement ignored
      5626          3 PACKAGE BODY             PL/SQL: SQL Statement ignored

这个库的数据字典存在某些异常,重建数据字典和存储过程即可(这个请在确认数据库空闲无人使用时执行)。
以SYSDBA身份执行catalog.sql和catproc.sql
sql>@?/rdbms/admin/catalog.sql
sql>@?/rdbms/admin/catproc.sql
#catalog.sql重建字典视图,catproc.sql重建系统存储过程,这两个脚本一般在安装和升级时执行,平时执行虽然不会影响系统完整性,但是在生产系统执行可能会造成系统HANG,应该在维护时间段内执行。参见[1]
#重建字典视图并不会影响之前数据库内的字典数据,因为它只是建立视图,并未修改基表。
#数据字典的损坏可用脚本hcheck检查,参见[3][4]。这个脚本检查的不仅仅是数据字典视图对象、而且会检查字典数据本身的一致性错误。
#执行这俩脚本应该收集并检查日志,以防万一执行过程中出现错误。

注意上面红色字体的错误,错误不同则可能有不同的原因与解决办法,metalink上列举的例子为下面错误:
PL/SQL: ORA-06552: PL/SQL: Compilation unit analysis terminated 
ORA-06553: PLS-320: the declaration of the type of this expression is incomplete or malformed 
这就是一个BUG,具体处理方法参见[2]

[4].[ID 456468.1]

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有