Oracle 导出失败:EXP-00006:内部不一致错误

Oracle 导出失败:EXP-00006:内部不一致错误

我对 Oracle exp 的调用失败,原因如下:

EXP-00006: internal inconsistency error
EXP-00000: Export terminated unsuccessfully

我执行的命令是

C:\oracle\product\11.1.0\db_1\BIN\exp user/pass@instance file=dump.dmp log=log.log compress=y owner=user

失败的表包含

  • 1 非空数(38)列(主键)
  • 18 个 varchar2(100) 列

主键也是另一个表的外键。

所有搜索结果都表明我应该联系 Oracle,但是没有其他方法可以解决此问题吗?也许重建一个表?

答案1

如果您有 Oracle 支持,请告诉他们。这可能是导出本身的内部问题,他们会要求提供更多信息,告诉您要尝试什么等等,直到您解决问题。如果有的话,您可能还会得到补丁/修复。

我建议使用数据泵进行导出,因为导出早已弃用。您需要定义一个目录,Oracle 应将导出的数据放入该目录,然后启动数据泵。它比导入/导出更简单、更快速、更可靠、更灵活。

例子:

SQL> CREATE OR REPLACE DIRECTORY expdump AS '/export/home/oracle/expdump';

SQL> GRANT READ, WRITE ON DIRECTORY expdump TO user_who_will_export;

然后运行:

$ expdp user/pass schemas=schema1,schema2 directory=expdump dumpfile=myexport.dmp logfile=myexport.log

补充:看起来您的数据库一致性存在问题。使用 RMAN 运行逻辑和物理验证以发现任何其他问题:

RMAN> connect target /

RMAN> run {
# set disk to be default device type
CONFIGURE DEFAULT DEVICE TYPE TO DISK;
# number of concurrent sessions to spawn (if you can affor parallelism)
CONFIGURE DEVICE TYPE DISK PARALLELISM 10 BACKUP TYPE TO BACKUPSET;
# check datafiles for corruption 10 datafiles in each session (if you can afford paralellism)
BACKUP VALIDATE CHECK LOGICAL DATABASE FILESPERSET=10;
}

代码是通用的,此代码片段借用自http://oraclespin.wordpress.com/2008/06/11/how-to-check-physical-and-logical-data-corruption-using-rman/

答案2

运行:分析表验证结构级联;

看看它是否返回错误,表示有错误。如果索引已损坏,则删除并重新创建,如果是其他问题,请尝试修复表(如果您可以/知道如何修复)。如果需要,请寻求 Oracle 支持以提供帮助。

答案3

我通过确定问题出在哪个表来解决了这个问题。然后我把那个表复制到一个新表中:

create table X as Select * from Y

之后,我删除了旧表并重命名了新表。我创建了约束,一切都很好。

相关内容