我对 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
之后,我删除了旧表并重命名了新表。我创建了约束,一切都很好。