使用数据泵(expdp)导数时遇到了ORA-31626 & ORA-00942 错误
数据库版本为Oracle Database 10g Release 10.2.0.5.0,具体错误如下所示:
$ expdp system/xxx tables=xxx.xxx directory=DUMPDIR dumpfile=xxxx.dmp logfile=xxx.log; Export: Release 10.2.0.5.0 - 64bit Production on Saturday, 27 July, 2019 10:39:07 Copyright (c) 2003, 2007, Oracle. All rights reserved. Connected to: Oracle Database 10g Release 10.2.0.5.0 - 64bit Production ORA-31626: job does not exist ORA-00942: table or view does not exist ORA-00942: table or view does not exist ORA-00942: table or view does not exist ORA-00942: table or view does not exist ORA-00942: table or view does not exist ORA-00942: table or view does not exist ORA-00942: table or view does not exist
复制
检查验证发现表确实是存在的,搜索metalink,发现官方文档有介绍:“DataPump Export (EXPDP) Reports ORA-942 Even If Table Exists (Doc ID 1371613.1)”,下面的的操作步骤基本按照官方文档的介绍处理:
在数据库开启跟踪
SQL> alter system set events '942 trace name errorstack level 3';
然后使用expdp命令导数
在数据库关闭跟踪
SQL> alter system set events '942 trace name errorstack off';
检查告警日志,就能发现对应的跟踪文件,如下所示:
Errors in file /u01/app/oracle/admin/epps/udump/epps_ora_15524.trc:
ORA-00942: table or view does not exist
Sat Jul 27 10:39:08 CST 2019
The value (30) of MAXTRANS parameter ignored.
在跟踪文件,我们会发现PL/SQL Call Stack信息。这个跟官方文档的内容有所差别,这个也正常,一模一样的错误信息还是很少见的。
根据官方文档提示, 这个是因为DataPump内部包损坏了(damaged DataPump internal package),如果查单纯看包'DBMS_DATAPUMP',发现其状态是VALID,对这些没有多少研究。所以不清楚更深一层次的原因!
select owner, object_name, object_type, status from dba_objects where object_name = 'DBMS_DATAPUMP';
复制
官方文档"How To Reload Datapump Utility EXPDP/IMPDP (文档 ID 430221.1)"给出了如何解决这个问题(个人根据下面步骤解决了这个问题):
参考资料:
DataPump Export (EXPDP) Reports ORA-942 Even If Table Exists (Doc ID 1371613.1)
How To Reload Datapump Utility EXPDP/IMPDP (文档 ID 430221.1)