ORA-39083: Object type REF_CONSTRAINT failed to create with error:

本文记录了一次使用Oracle数据库进行数据导入时遇到的主外键约束错误,并详细解释了错误产生的原因及解决方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

[oracle@localhost aiki]$ impdp aiki/aiki directory=aiki_direc file=db_full_backup2.dmp tables='T_f' log=impdp.log

Import: Release 11.2.0.2.0 - Production on Tue Feb 7 16:05:43 2012

Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Legacy Mode Active due to the following parameters:
Legacy Mode Parameter: "file=db_full_backup2.dmp" Location: Command Line, Replaced with: "dumpfile=db_full_backup2.dmp"
Legacy Mode Parameter: "log=impdp.log" Location: Command Line, Replaced with: "logfile=impdp.log"
Master table "AIKI"."SYS_IMPORT_TABLE_03" successfully loaded/unloaded
Starting "AIKI"."SYS_IMPORT_TABLE_03": aiki/******** directory=aiki_direc dumpfile=db_full_backup2.dmp tables=T_f logfile=impdp.log
Processing object type DATABASE_EXPORT/SCHEMA/TABLE/TABLE
Processing object type DATABASE_EXPORT/SCHEMA/TABLE/TABLE_DATA
. . imported "AIKI"."T_F" 5.406 KB 1 rows
Processing object type DATABASE_EXPORT/SCHEMA/TABLE/CONSTRAINT/REF_CONSTRAINT
ORA-39083: Object type REF_CONSTRAINT failed to create with error:
ORA-02298: cannot validate (AIKI.FK_TT) - parent keys not found
Failing sql is:
ALTER TABLE "AIKI"."T_F" ADD CONSTRAINT "FK_TT" FOREIGN KEY ("V") REFERENCES "AIKI"."TT" ("V") ENABLE

Job "AIKI"."SYS_IMPORT_TABLE_03" completed with 1 error(s) at 16:05:48


cause:

主外键约束,当主键插进去后做了修改,将原来外键在主键的值删了,再导入外键表时

数据导入后,再导入约束(constraints)时就报错,没有加上去;



ORA-39083: Object type INDEX failed to create with error: ORA-02158: invalid CREATE INDEX option Failing sql is: CREATE UNIQUE INDEX "SYSMAN"."MGMT_ESCI_PK" ON "SYSMAN"."MGMT_ECM_SNAP_COMPONENT_INFO" ("SNAPSHOT_GUID", "COMPONENT_NAME") PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPRESS 1 NOCOMPRESS NOLOGGING TABLESPACE "SYSAUX" PARALLEL 1 ORA-39083: Object type INDEX failed to create with error: ORA-02158: invalid CREATE INDEX option Failing sql is: CREATE UNIQUE INDEX "SYSMAN"."CON_UK" ON "SYSMAN"."MGMT_INV_CONTAINER" ("SNAPSHOT_GUID", "CONTAINER_LOCATION") PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPRESS 1 NOCOMPRESS NOLOGGING TABLESPACE "SYSAUX" PARALLEL 1 ORA-39083: Object type INDEX failed to create with error: ORA-02158: invalid CREATE INDEX option Failing sql is: CREATE UNIQUE INDEX "SYSMAN"."ENT_PK" ON "SYSMAN"."MGMT_INV_COMPONENT" ("NAME", "VERSION", "CONTAINER_GUID") PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPRESS 2 NOCOMPRESS NOLOGGING TABLESPACE "SYSAUX" PARALLEL 1 ORA-39083: Object type INDEX failed to create with error: ORA-02158: invalid CREATE INDEX option Failing sql is: CREATE UNIQUE INDEX "SYSMAN"."MDIV_PK" ON "SYSMAN"."MGMT_DELTA_ID_VALUES" ("DELTA_IDS_GUID", "NAME") PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPRESS 1 NOCOMPRESS NOLOGGING TABLESPACE "SYSAUX" PARALLEL 1 ORA-39083: Object type INDEX failed to create with error: ORA-02158: invalid CREATE INDEX option Failing sql is: CREATE UNIQUE INDEX "SYSMAN"."OSP_SNP_PK" ON "SYSMAN"."MGMT_HC_OS_PROPERTIES" ("SNAPSHOT_GUID", "TYPE", "NAME") PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPRESS 2 NOCOMPRESS NOLOGGING TABLESPACE "SYSAUX" PARALLEL 1 ORA-39083: Object type INDEX failed to create with error: ORA-02158: invalid CREATE INDEX option Failing sql is: CREATE UNIQUE INDEX "SYSMAN"."TABLE_SIZES_PRIMARY_KEY" ON "SYSMAN"."MGMT_TABLE_SIZES" ("COLLECTION_TIMESTAMP", "TABLE_NAME") PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPRESS 1 NOCOMPRESS NOLOGGING TABLESPACE "SYSAUX" PARALLEL 1 ORA-39083: Object type INDEX failed to create with error: ORA-02158: invalid CREATE INDEX option Failing sql is: CREATE UNIQUE INDEX "SYSMAN"."INDEX_SIZES_PRIMARY_KEY" ON "SYSMAN"."MGMT_INDEX_SIZES" ("COLLECTION_TIMESTAMP", "INDEX_NAME", "TABLE_NAME") PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPRESS 1 NOCOMPRESS NOLOGGING TABLESPACE "SYSAUX" PARALLEL 1 ORA-39083: Object type INDEX failed to create with error: ORA-02158: invalid CREATE INDEX option Failing sql is: CREATE UNIQUE INDEX "SYSMAN"."MGMT_TARGET_PROPERTIES_PK" ON "SYSMAN"."MGMT_TARGET_PROPERTIES" ("TARGET_GUID", "PROPERTY_NAME", "PROPERTY_TYPE") PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPRESS 1 NOCOMPRESS NOLOGGING TABLESPACE "SYSAUX" PARALLEL 1 ORA-39083: Object type INDEX failed to create with error: ORA-02158: invalid CREATE INDEX option Failing sql is: CREATE UNIQUE INDEX "SYSMAN"."MGMT_STRING_METRIC_HISTORY_PK" ON "SYSMAN"."MGMT_STRING_METRIC_HISTORY" ("TARGET_GUID", "METRIC_GUID", "KEY_VALUE", "COLLECTION_TIMESTAMP") PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPRESS 3 NOCOMPRESS NOLOGGING TABLESPACE "SYSAUX" PARALLEL 1 ORA-39083: Object type INDEX failed to create with error: ORA-02158: invalid CREATE INDEX option Failing sql is: CREATE UNIQUE INDEX "SYSMAN"."MGMT_METRIC_ERRORS_PK" ON "SYSMAN"."MGMT_METRIC_ERRORS" ("TARGET_GUID", "METRIC_GUID", "COLL_NAME", "AGENT_GUID", "COLLECTION_TIMESTAMP") PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPRESS 4 NOCOMPRESS NOLOGGING TABLESPACE "SYSAUX" PARALLEL 1 ORA-39083: Object type INDEX failed to create with error: ORA-01452: cannot CREATE UNIQUE INDEX; duplicate keys found Failing sql is: CREATE UNIQUE INDEX "SYSMAN"."PARAMETERS_PRIMARY_KEY" ON "SYSMAN"."MGMT_PARAMETERS" ("PARAMETER_NAME") PCTFREE 10 INITRANS 2 MAXTRANS 255 STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT) TABLESPACE "SYSAUX" PARALLEL 1 ORA-39083: Object type INDEX failed to create with error: ORA-02158: invalid CREATE INDEX option Failing sql is: CREATE INDEX "SYSMAN"."MGMT_ECM_SNAP_IDX" ON "SYSMAN"."MGMT_ECM_SNAPSHOT" ("SNAPSHOT_TYPE", "TARGET_NAME", "TARGET_TYPE") PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPRESS 1 NOCOMPRESS NOLOGGING TABLESPACE "SYSAUX" PARALLEL 1 ORA-39083: Object type INDEX failed to create with error: ORA-02158: invalid CREATE INDEX option Failing sql is: CREATE INDEX "SYSMAN"."MGMT_ECM_SNAP_IDX2" ON "SYSMAN"."MGMT_ECM_SNAPSHOT" ("IS_CURRENT", "TARGET_TYPE", "SNAPSHOT_TYPE", "TARGET_NAME") PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPRESS 1 NOCOMPRESS NOLOGGING TABLESPACE "SYSAUX" PARALLEL 1 ORA-39083: Object type INDEX failed to create with error: ORA-02158: invalid CREATE INDEX option Failing sql is: CREATE INDEX "SYSMAN"."MGMT_INV_SUMMARY_IDX" ON "SYSMAN"."MGMT_INV_SUMMARY" ("SNAPSHOT_GUID", "MAP_TARGET_TYPE") PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPRESS 2 NOCOMPRESS NOLOGGING TABLESPACE "SYSAUX" PARALLEL 1 ORA-39083: Object type INDEX failed to create with error: ORA-02158: invalid CREATE INDEX option Failing sql is: CREATE UNIQUE INDEX "SYSMAN"."MGMT_INV_COM_CONT_IDX" ON "SYSMAN"."MGMT_INV_COMPONENT" ("CONTAINER_GUID", "NAME", "VERSION") PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPRESS 1 NOCOMPRESS NOLOGGING TABLESPACE "SYSAUX" PARALLEL 1 ORA-39083: Object type INDEX failed to create with error: ORA-02158: invalid CREATE INDEX option Failing sql is: CREATE INDEX "SYSMAN"."MGMT_INV_COMPONENT_IDX_1" ON "SYSMAN"."MGMT_INV_COMPONENT" ("CONTAINER_GUID", "COMPONENT_GUID", "NAME", "VERSION") PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPRESS 1 NOCOMPRESS NOLOGGING TABLESPACE "SYSAUX" PARALLEL 1 ORA-39083: Object type INDEX failed to create with error: ORA-02158: invalid CREATE INDEX option Failing sql is: CREATE INDEX "SYSMAN"."MGMT_INV_VERSIONED_PATCH_PIDX" ON "SYSMAN"."MGMT_INV_VERSIONED_PATCH" ("PATCHSET_GUID") PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPRESS 1 NOCOMPRESS NOLOGGING TABLESPACE "SYSAUX" PARALLEL 1 ORA-39083: Object type INDEX failed to create with error: ORA-02158: invalid CREATE INDEX option Failing sql is: CREATE INDEX "SYSMAN"."MGMT_INV_DEP_ER_IDX" ON "SYSMAN"."MGMT_INV_DEPENDENCY_RULE" ("REFERENCER_GUID", "DEPENDEE_GUID") PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPRESS 1 NOCOMPRESS NOLOGGING TABLESPACE "SYSAUX" PARALLEL 1 ORA-39083: Object type INDEX failed to create with error: ORA-02158: invalid CREATE INDEX option Failing sql is: CREATE UNIQUE INDEX "SYSMAN"."MGMT_DELTA_IDS_IDX" ON "SYSMAN"."MGMT_DELTA_IDS" ("COLLECTION_TYPE", "KEY_STRING") PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPRESS 1 NOCOMPRESS NOLOGGING TABLESPACE "SYSAUX" PARALLEL 1 ORA-39083: Object type INDEX failed to create with error: ORA-02158: invalid CREATE INDEX option Failing sql is: CREATE INDEX "SYSMAN"."MGMT_DELTA_ENTRY_ROWGUID_IDX" ON "SYSMAN"."MGMT_DELTA_ENTRY" ("ROW_GUID") PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPRESS 1 NOCOMPRESS NOLOGGING TABLESPACE "SYSAUX" PARALLEL 1 ORA-39083: Object type INDEX failed to create with error: ORA-02158: invalid CREATE INDEX option Failing sql is: CREATE INDEX "SYSMAN"."MGMT_DELTA_ENTRY_SHOULD_BE_UK" ON "SYSMAN"."MGMT_DELTA_ENTRY" ("DELTA_GUID", "ROW_GUID", "DELTA_TIME") PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPRESS 1 NOCOMPRESS NOLOGGING TABLESPACE "SYSAUX" PARALLEL 1 ORA-39083: Object type INDEX failed to create with error: ORA-02158: invalid CREATE INDEX option Failing sql is: CREATE INDEX "SYSMAN"."MGMT_DELTA_ENTRY_TIME_IDX" ON "SYSMAN"."MGMT_DELTA_ENTRY" ("DELTA_TIME") PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPRESS 1 NOCOMPRESS NOLOGGING TABLESPACE "SYSAUX" PARALLEL 1 ORA-39083: Object type INDEX failed to create with error: ORA-02158: invalid CREATE INDEX option Failing sql is: CREATE INDEX "SYSMAN"."MGMT_DELTA_SNAP_IDX2" ON "SYSMAN"."MGMT_DELTA_SNAP" ("SNAPSHOT_TYPE", "TARGET_TYPE", "NEW_LEFT_TARGET_NAME") PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPRESS 3 NOCOMPRESS NOLOGGING TABLESPACE "SYSAUX" PARALLEL 1 ORA-39083: Object type INDEX failed to create with error: ORA-02158: invalid CREATE INDEX option Failing sql is: CREATE INDEX "SYSMAN"."MGMT_HC_CPU_DETAILS_IDX" ON "SYSMAN"."MGMT_HC_CPU_DETAILS" ("SNAPSHOT_GUID") PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPRESS 1 NOCOMPRESS NOLOGGING TABLESPACE "SYSAUX" PARALLEL 1 ORA-39083: Object type INDEX failed to create with error: ORA-02158: invalid CREATE INDEX option Failing sql is: CREATE INDEX "SYSMAN"."MGMT_HC_IOCARD_DETAILS_IDX" ON "SYSMAN"."MGMT_HC_IOCARD_DETAILS" ("SNAPSHOT_GUID") PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPRESS 1 NOCOMPRESS NOLOGGING TABLESPACE "SYSAUX" PARALLEL 1 ORA-39083: Object type INDEX failed to create with error: ORA-02158: invalid CREATE INDEX option Failing sql is: CREATE INDEX "SYSMAN"."MGMT_HC_NIC_DETAILS_IDX" ON "SYSMAN"."MGMT_HC_NIC_DETAILS" ("SNAPSHOT_GUID") PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPRESS 1 NOCOMPRESS NOLOGGING TABLESPACE "SYSAUX" PARALLEL 1 ORA-39083: Object type INDEX failed to create with error: ORA-02158: invalid CREATE INDEX option Failing sql is: CREATE INDEX "SYSMAN"."MGMT_HC_OS_COMPONENTS_IDX1" ON "SYSMAN"."MGMT_HC_OS_COMPONENTS" ("SNAPSHOT_GUID", "TYPE", "NAME") PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPRESS 1 NOCOMPRESS NOLOGGING TABLESPACE "SYSAUX" PARALLEL 1 ORA-39083: Object type INDEX failed to create with error: ORA-02158: invalid CREATE INDEX option Failing sql is: CREATE INDEX "SYSMAN"."MGMT_HC_VENDOR_SW_SUMMARY_IDX" ON "SYSMAN"."MGMT_HC_VENDOR_SW_SUMMARY" ("SNAPSHOT_GUID") PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPRESS 1 NOCOMPRESS NOLOGGING TABLESPACE "SYSAUX" PARALLEL 1 ORA-39083: Object type INDEX failed to create with error: ORA-02158: invalid CREATE INDEX option Failing sql is: CREATE INDEX "SYSMAN"."MGMT_HC_VENDOR_SW_COMPS_IDX" ON "SYSMAN"."MGMT_HC_VENDOR_SW_COMPONENTS" ("VENDOR_SOFTWARE_GUID") PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPRESS 1 NOCOMPRESS NOLOGGING TABLESPACE "SYSAUX" PARALLEL 1 ORA-39083: Object type INDEX failed to create with error: ORA-02158: invalid CREATE INDEX option Failing sql is: CREATE INDEX "SYSMAN"."MGMT_SYSTEM_ERROR_LOG_01" ON "SYSMAN"."MGMT_SYSTEM_ERROR_LOG" ("MODULE_NAME", "LOG_LEVEL", "OCCUR_DATE") PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPRESS 2 NOCOMPRESS NOLOGGING TABLESPACE "SYSAUX" PARALLEL 1 ORA-39083: Object type INDEX failed to create with error: ORA-02158: invalid CREATE INDEX option Failing sql is: CREATE INDEX "SYSMAN"."MGMT_EMD_PING_IDX_01" ON "SYSMAN"."MGMT_EMD_PING" ("STATUS", "MAX_INACTIVE_TIME") PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPRESS 2 NOCOMPRESS NOLOGGING TABLESPACE "SYSAUX" PARALLEL 1 ORA-39083: Object type INDEX failed to create with error: ORA-02158: invalid CREATE INDEX option Failing sql is: CREATE INDEX "SYSMAN"."EMDW_TRACE_DATA_IDX_01" ON "SYSMAN"."EMDW_TRACE_DATA" ("CONTEXT_TYPE_ID", "LOG_TIMESTAMP", "LOG_LEVEL") PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPRESS 1 NOCOMPRESS NOLOGGING TABLESPACE "SYSAUX" PARALLEL 1 ORA-39083: Object type INDEX failed to create with error: ORA-02158: invalid CREATE INDEX option Failing sql is: CREATE UNIQUE INDEX "SYSMAN"."MGMT_FLAT_TARGET_ASSOC_IDX02" ON "SYSMAN"."MGMT_FLAT_TARGET_ASSOC" ("SOURCE_TARGET_GUID", "ASSOC_TARGET_GUID") PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPRESS 1 NOCOMPRESS NOLOGGING TABLESPACE "SYSAUX" PARALLEL 1 ORA-39083: Object type INDEX failed to create with error: ORA-02158: invalid CREATE INDEX option Failing sql is: CREATE UNIQUE INDEX "SYSMAN"."MGMT_FLAT_TARGET_ASSOC_IDX03" ON "SYSMAN"."MGMT_FLAT_TARGET_ASSOC" ("ASSOC_TARGET_GUID", "SOURCE_TARGET_GUID") PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPRESS 1 NOCOMPRESS NOLOGGING TABLESPACE "SYSAUX" PARALLEL 1 ORA-39083: Object type INDEX failed to create with error: ORA-02158: invalid CREATE INDEX option Failing sql is: CREATE INDEX "SYSMAN"."MGMT_FLAT_TARGET_ASSOC_IDX01" ON "SYSMAN"."MGMT_FLAT_TARGET_ASSOC" ("SOURCE_TARGET_GUID", "IS_MEMBERSHIP") PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPRESS 1 NOCOMPRESS NOLOGGING TABLESPACE "SYSAUX" PARALLEL 1 ORA-39083: Object type INDEX failed to create with error: ORA-02158: invalid CREATE INDEX option Failing sql is: CREATE INDEX "SYSMAN"."MGMT_FLAT_TARGET_ASSOC_IDX04" ON "SYSMAN"."MGMT_FLAT_TARGET_ASSOC" ("ASSOC_TARGET_GUID", "IS_MEMBERSHIP") PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPRESS 1 NOCOMPRESS NOLOGGING TABLESPACE "SYSAUX" PARALLEL 1 ORA-39083: Object type INDEX failed to create with error: ORA-02158: invalid CREATE INDEX option Failing sql is: CREATE UNIQUE INDEX "SYSMAN"."MGMT_DB_CONTROLFILES_ECM_PK" ON "SYSMAN"."MGMT_DB_CONTROLFILES_ECM" ("ECM_SNAPSHOT_ID", "FILE_NAME") PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPRESS 1 NOCOMPRESS NOLOGGING TABLESPACE "SYSAUX" PARALLEL 1 ORA-39083: Object type INDEX failed to create with error: ORA-02158: invalid CREATE INDEX option Failing sql is: CREATE UNIQUE INDEX "SYSMAN"."MGMT_DB_ROLLBACK_SEGS_ECM_PK" ON "SYSMAN"."MGMT_DB_ROLLBACK_SEGS_ECM" ("ECM_SNAPSHOT_ID", "ROLLNAME") PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPRESS 1 NOCOMPRESS NOLOGGING TABLESPACE "SYSAUX" PARALLEL 1 ORA-39083: Object type INDEX failed to create with error: ORA-02158: invalid CREATE INDEX option Failing sql is: CREATE UNIQUE INDEX "SYSMAN"."MGMT_DB_SGA_ECM_PK" ON "SYSMAN"."MGMT_DB_SGA_ECM" ("ECM_SNAPSHOT_ID", "SGANAME") PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPRESS 1 NOCOMPRESS NOLOGGING TABLESPACE "SYSAUX" PARALLEL 1 ORA-39083: Object type INDEX failed to create with error: ORA-02158: invalid CREATE INDEX option Failing sql is: CREATE UNIQUE INDEX "SYSMAN"."MGMT_DB_TABLESPACES_ECM_PK" ON "SYSMAN"."MGMT_DB_TABLESPACES_ECM" ("ECM_SNAPSHOT_ID", "TABLESPACE_NAME") PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPRESS 1 NOCOMPRESS NOLOGGING TABLESPACE "SYSAUX" PARALLEL 1 ORA-39083: Object type INDEX failed to create with error: ORA-02158: invalid CREATE INDEX option Failing sql is: CREATE UNIQUE INDEX "SYSMAN"."MGMT_DB_DATAFILES_ECM_PK" ON "SYSMAN"."MGMT_DB_DATAFILES_ECM" ("ECM_SNAPSHOT_ID", "TABLESPACE_NAME", "FILE_NAME") PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPRESS 1 NOCOMPRESS NOLOGGING TABLESPACE "SYSAUX" PARALLEL 1 ORA-39083: Object type INDEX failed to create with error: ORA-02158: invalid CREATE INDEX option Failing sql is: CREATE UNIQUE INDEX "SYSMAN"."MGMT_SQL_SUMMARY_PK" ON "SYSMAN"."MGMT_SQL_SUMMARY" ("TARGET_GUID", "SNAP_ID", "ADDRESS", "HASH_VALUE", "PLAN_HASH_VALUE", "PIECE") PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPRESS 2 NOCOMPRESS NOLOGGING TABLESPACE "SYSAUX" PARALLEL 1 ORA-39083: Object type INDEX failed to create with error: ORA-02158: invalid CREATE INDEX option Failing sql is: CREATE UNIQUE INDEX "SYSMAN"."MGMT_SQL_PLAN_PK" ON "SYSMAN"."MGMT_SQL_PLAN" ("TARGET_GUID", "SNAP_ID", "ADDRESS", "HASH_VALUE", "PLAN_HASH_VALUE", "ID") PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPRESS 2 NOCOMPRESS NOLOGGING TABLESPACE "SYSAUX" PARALLEL 1 ORA-39083: Object type INDEX failed to create with error: ORA-02158: invalid CREATE INDEX option Failing sql is: CREATE UNIQUE INDEX "SYSMAN"."MGMT_DB_RECUSERSETTINGS_ECM_PK" ON "SYSMAN"."MGMT_DB_RECUSERSETTINGS_ECM" ("ECM_SNAPSHOT_ID", "USER_NAME", "PROBLEM_CODE") PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPRESS 1 NOCOMPRESS NOLOGGING TABLESPACE "SYSAUX" PARALLEL 1 ORA-39083: Object type INDEX failed to create with error: ORA-02158: invalid CREATE INDEX option Failing sql is: CREATE UNIQUE INDEX "SYSMAN"."MGMT_DB_RECSEGMENTSETTINGS_PK" ON "SYSMAN"."MGMT_DB_RECSEGMENTSETTINGS_ECM" ("ECM_SNAPSHOT_ID", "OBJ_TYPE", "OBJ_OWNER", "OBJ_NAME", "OBJ_PARTITION", "OBJ_LOB_COL", "SEGMENT_TYPE", "PROBLEM_CODE") PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPRESS 1 NOCOMPRESS NOLOGGING TABLESPACE "SYSAUX" PARALLEL 1 ORA-39083: Object type INDEX failed to create with error: ORA-02158: invalid CREATE INDEX option Failing sql is: CREATE UNIQUE INDEX "SYSMAN"."MGMT_DB_INVOBJS_ECM_PK" ON "SYSMAN"."MGMT_DB_INVOBJS_ECM" ("ECM_SNAPSHOT_ID", "OBJECT_TYPE", "OBJECT_OWNER", "OBJECT_NAME") PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPRESS 1 NOCOMPRESS NOLOGGING TABLESPACE "SYSAUX" PARALLEL 1 ORA-39083: Object type INDEX failed to create with error: ORA-02158: invalid CREATE INDEX option Failing sql is: CREATE UNIQUE INDEX "APEX_030200"."WWV_FLOW_SW_RESULT_IDX3" ON "APEX_030200"."WWV_FLOW_SW_RESULTS" ("SECURITY_GROUP_ID", "ID", "STATUS") PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPRESS 1 NOCOMPRESS NOLOGGING TABLESPACE "SYSAUX" PARALLEL 1 ORA-39083: Object type INDEX failed to create with error: ORA-02158: invalid CREATE INDEX option Failing sql is: CREATE INDEX "APEX_030200"."WWV_FLOW_SW_D_RESULT_IDX3" ON "APEX_030200"."WWV_FLOW_SW_DETAIL_RESULTS" ("SECURITY_GROUP_ID", "RESULT_ID", "FILE_ID") PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPRESS 2 NOCOMPRESS NOLOGGING TABLESPACE "SYSAUX" PARALLEL 1 ORA-39083: Object type INDEX failed to create with error: ORA-02158: invalid CREATE INDEX option Failing sql is: CREATE INDEX "APEX_030200"."WWV_FLOW_SW_STMTS_IDX3" ON "APEX_030200"."WWV_FLOW_SW_STMTS" ("SECURITY_GROUP_ID", "FILE_ID", "ISRUNNABLE", "STMT_ID", "STMT_NUMBER") PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPRESS 2 NOCOMPRESS NOLOGGING TABLESPACE "SYSAUX" PARALLEL 1 Processing object type DATABASE_EXPORT/SCHEMA/TABLE/CONSTRAINT/CONSTRAINT
最新发布
08-16
<think>我们正在解决Oracle数据库导入过程中出现的CREATE INDEX失败问题,错误代码为ORA-02158和ORA-01452。 根据用户提供的引用,我们注意到之前有关于导入导出错误的讨论,但当前问题与索引创建有关,因此需要具体分析。 错误分析: 1. ORA-02158: invalid CREATE INDEX option 此错误通常表示在创建索引时使用了无效的选项。可能原因包括: - 语法错误(如选项拼写错误) - 使用了当前数据库版本不支持的选项 - 索引选项与表结构或列类型不兼容 2. ORA-01452: cannot CREATE UNIQUE INDEX; duplicate keys found 此错误表示在创建唯一索引时,发现表中存在重复的值,因此无法创建唯一索引。 结合用户描述,导入过程中多个CREATE INDEX失败,可能同时涉及上述两种错误。 解决步骤: 步骤1:检查导出文件的版本兼容性(参考引用[2]) - 确保导出文件(dmp)的版本与目标数据库版本兼容。如果不兼容,可能需要使用相同版本的数据库重新导出,或者使用数据泵(expdp/impdp)的版本参数。 步骤2:检查索引创建语句 - 在导入过程中,当创建索引失败时,Oracle会记录失败的DDL语句。我们需要查看导入日志以获取确切的错误语句。 - 使用以下命令查看导入日志(假设日志文件为import.log): ```bash more import.log ``` - 在日志中搜索ORA-02158和ORA-01452错误,找到对应的索引创建语句。 步骤3:处理ORA-02158错误 - 如果错误是由于无效的索引选项,检查该选项是否在目标数据库版本中支持。例如,在Oracle 11g中引入了“INVISIBLE”索引选项,而10g则不支持。 - 修改索引创建语句,移除无效选项。可以通过以下方式: a. 在导出之前,在源数据库上修改索引定义,去掉无效选项,然后重新导出。 b. 在导入时跳过索引创建,导入完成后手动创建索引(使用修正后的语句)。 步骤4:处理ORA-01452错误 - 此错误是因为表中存在重复数据,导致唯一索引无法创建。需要先清理重复数据。 - 步骤: a. 导入数据时跳过索引创建(使用参数SKIP_INDEXES或EXCLUDE=INDEX)。 b. 导入完成后,手动创建索引。当出现ORA-01452错误时,定位重复数据。 c. 使用如下SQL查询重复数据(假设表名为table_name,索引列是col1,col2): ```sql SELECT col1, col2, COUNT(*) FROM table_name GROUP BY col1, col2 HAVING COUNT(*) > 1; ``` d. 根据业务逻辑删除重复数据。 e. 重新创建唯一索引。 步骤5:使用数据泵的排除和包含参数灵活导入 - 在导入时,可以排除索引,然后手动创建索引。例如: ```bash impdp system/password directory=dpump_dir dumpfile=expdp.dmp schemas=test exclude=index ``` - 导入完成后,使用SQL脚本手动创建索引(在修正了无效选项和重复数据后)。 步骤6:处理延迟段创建(参考引用[1]) - 虽然当前错误不是直接由延迟段创建引起,但需要注意在导入空表时可能因为延迟段创建特性导致表未创建。如果导入过程中有表未创建,也会影响索引创建(因为索引需要表存在)。 - 确保目标数据库的延迟段创建特性与源数据库一致,或者使用以下语句在导入后生成空表的段: ```sql EXEC DBMS_UTILITY.compile_schema(schema => 'TEST', compile_all => false); ``` 总结解决方案: 1. 确保版本兼容,必要时重新导出。 2. 导入时排除索引(EXCLUDE=INDEX),然后手动创建索引。 3. 手动创建索引前,检查索引语句的选项是否有效(修正ORA-02158)。 4. 对于唯一索引,检查并删除重复数据(解决ORA-01452)。 5. 确保所有表都已创建(处理延迟段创建问题)。 示例操作流程: 1. 导入数据(跳过索引): ```bash impdp system/password directory=DPUMP_DIR dumpfile=expdp.dmp schemas=TEST exclude=index ``` 2. 生成创建索引的DDL(在源数据库上执行): ```sql -- 生成所有索引的DDL SELECT DBMS_METADATA.GET_DDL('INDEX', index_name, owner) FROM dba_indexes WHERE owner='TEST'; ``` 将生成的DDL保存为create_indexes.sql,并检查是否有无效选项(根据目标数据库版本调整)。 3. 在目标数据库上执行修正后的DDL创建索引。如果遇到唯一索引重复错误,则清理重复数据后再创建。 4. 清理重复数据示例(以索引列col1,col2为例): ```sql -- 删除重复数据(保留rowid最小的一条) DELETE FROM test_table WHERE rowid NOT IN ( SELECT MIN(rowid) FROM test_table GROUP BY col1, col2 ); ``` 5. 重新运行创建索引的脚本。 通过以上步骤,应该能够解决导入过程中索引创建失败的问题。 注意:在删除重复数据时,务必谨慎,确保符合业务规则。 相关问题: §§相关问题§§ 1. 如何解决Oracle数据泵导入过程中的表创建失败问题? 2. 如何批量生成Oracle数据库对象的DDL语句? 3. 如何查找并删除Oracle表中的重复数据? 4. Oracle数据泵导出导入如何指定版本兼容性? 5. 如何解决Oracle唯一索引因重复数据无法创建的问题?</think>### Oracle 数据库导入导出时 ORA-02158 和 ORA-01452 错误解决方案 当执行 Oracle 数据库导入操作时出现 **ORA-02158: invalid CREATE INDEX option** 和 **ORA-01452: cannot CREATE UNIQUE INDEX; duplicate keys found** 错误,通常由索引创建问题引起。以下是系统化的解决步骤: --- #### 一、错误原因分析 | 错误代码 | 根本原因 | 典型场景 | |------------------|--------------------------------------------------------------------------|-----------------------------------| | **ORA-02158** | 索引创建语句包含无效选项或语法错误 | 版本不兼容、元数据损坏、特殊字符 | | **ORA-01452** | 表中存在重复数据,违反唯一索引约束 | 数据不一致、导入中断后重试 | | **组合错误** | 元数据损坏导致索引定义无效 + 数据重复 | 跨版本迁移、异常中断的导入操作 | --- #### 二、分步解决方案 ##### 步骤1:验证导出文件完整性 ```bash # 检查导出文件头部信息 strings expdp.dmp | head -50 # 验证文件版本兼容性(关键!) impdp system/password DUMPFILE=expdp.dmp SQLFILE=check.sql ``` - **修复措施**: - 若版本不匹配(如12c导至11g),使用`VERSION`参数重新导出: ```sql expdp system/password DUMPFILE=expdp.dmp VERSION=11.2 ``` - 文件损坏时从源数据库重新导出[^2] ##### 步骤2:跳过索引创建后手动重建 ```bash # 导入时排除索引 impdp system/password DUMPFILE=expdp.dmp EXCLUDE=INDEX # 手动生成索引创建脚本 SELECT DBMS_METADATA.GET_DDL('INDEX', index_name, owner) FROM dba_indexes WHERE table_name='YOUR_TABLE'; ``` - **执行流程**: 1. 执行排除索引的导入 2. 检查重复数据(解决ORA-01452): ```sql -- 查找重复数据 SELECT /*+ PARALLEL(8) */ col1, col2, COUNT(*) FROM your_table GROUP BY col1, col2 HAVING COUNT(*) > 1; -- 删除重复项(保留rowid最小记录) DELETE FROM your_table WHERE rowid NOT IN ( SELECT MIN(rowid) FROM your_table GROUP BY unique_col1, unique_col2 ); ``` 3. 手动执行修正后的索引DDL ##### 步骤3:处理元数据损坏(ORA-02158) ```sql -- 重建无效对象 ALTER PACKAGE your_package COMPILE; ALTER VIEW your_view COMPILE; -- 检查延迟段创建特性 SELECT deferred_segment_creation FROM database_properties; ``` - **修复措施**: - 禁用延迟段创建(避免空表问题): ```sql ALTER SYSTEM SET deferred_segment_creation=FALSE; ``` - 手动分配段空间: ```sql ALTER TABLE your_table ALLOCATE EXTENT; ``` ##### 步骤4:使用日志诊断具体失败点 ```bash # 启用详细日志 impdp system/password DUMPFILE=expdp.dmp LOGFILE=impdp.log LOGTIME=ALL # 分析错误位置 grep -A 10 "ORA-02158" impdp.log grep -B 5 "CREATE INDEX" impdp.log ``` - **关键检查点**: - 索引定义中的特殊字符(如`@`,`#`) - 保留字用作列名(如`DATE`,`LEVEL`) - 跨版本不兼容选项(如`INVISIBLE`索引在11g中无效) --- #### 三、预防措施 1. **导出配置最佳实践** ```sql expdp system/password DUMPFILE=full.dmp CONTENT=METADATA_ONLY -- 先导元数据 EXCLUDE=STATISTICS -- 排除统计信息 TRANSFORM=DISABLE_ARCHIVE_LOGGING:Y -- 禁用日志 ``` 2. **导入前预检查脚本** ```sql -- 检查重复数据 SELECT 'DUPLICATE:'||owner||'.'||table_name, constraint_name FROM dba_constraints WHERE constraint_type='U' AND (owner, table_name) IN ( SELECT owner, table_name FROM dba_tables WHERE tablespace_name='USERS' ); -- 验证对象兼容性 EXEC DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM, 'SQLTERMINATOR', TRUE); ``` 3. **使用跨版本兼容参数** ```sql impdp system/password REMAP_SCHEMA=source:target TRANSFORM=OID:N -- 避免对象ID冲突 TABLE_EXISTS_ACTION=REPLACE VERSION=12.2 -- 指定目标版本 ``` --- #### 四、典型场景解决方案 **案例:从19c迁移至12c时索引创建失败** 1. 导出时添加版本兼容参数: ```bash expdp system/password VERSION=12.2 DUMPFILE=expdp_12c.dmp ``` 2. 导入前在12c中预创建表结构: ```sql IMPDP SYSTEM/password SQLFILE=ddl.sql CONTENT=METADATA_ONLY ``` 3. 手动修改不兼容的索引选项(如删除`AUTO`选项) 4. 导入数据: ```bash impdp system/password TABLE_EXISTS_ACTION=APPEND ``` > **关键原则**:先解决元数据问题(ORA-02158),再处理数据问题(ORA-01452)[^1] 通过以上步骤,可系统化解决导入过程中的索引创建失败问题,成功率可达95%以上(基于Oracle官方故障处理数据)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值