数据泵导入SKIP_CONSTRAINT_ERRORS的bug(三)
2008-10-25 12:57:57 来源:WEB开发网ORA-31693: 表数据对象 "YANGTK"."T_CONS" 无法加载/卸载并且被跳过, 错误如下:
ORA-00001: 违反唯一约束条件 (YANGTK.SYS_C0023723)作业 "YANGTK"."SYS_IMPORT_FULL_01" 已经完成, 但是有 1 个错误 (于 01:54:08 完成)
由于没有外键和唯一索引,采用直接路径导入,因此SKIP_CONSTRAINT_ERRORS参数无效,下面添加一个触发器:
SQL>CREATEORREPLACETRIGGERT_T_CONSBEFOREINSERTONT_CONS
2BEGIN
3NULL;
4END;
5/
触发器已创建
SQL>HOSTimpdpyangtk/yangtkdirectory=d_outputdumpfile=t_cons.dpcontent=data_onlydata_options=skip_constraint_errors
Import:Release11.1.0.6.0-64bitProductionon星期四,1610月,20081:58:54
Copyright(c)2003,2007,Oracle.Allrightsreserved.
连接到:OracleDatabase11gEnterpriseEditionRelease11.1.0.6.0-64bitProduction
WiththePartitioning,OLAP,DataMiningandRealApplicationTestingoptions已成功加载/卸载了主表"YANGTK"."SYS_IMPORT_FULL_01"启动"YANGTK"."SYS_IMPORT_FULL_01":yangtk/********directory=d_outputdumpfile=t_cons.dpcontent=data_onlydata_options=skip_constraint_errors处理对象类型TABLE_EXPORT/TABLE/TABLE_DATA
..导入的"YANGTK"."T_CONS"5.648KB8用完了17行
9 行因以下错误而被拒绝:
ORA-00001: 违反唯一约束条件 (YANGTK.SYS_C0023723)
带主键的被拒绝行是:
拒绝的行 #1:
列 ID: 1
拒绝的行 #2:
列 ID: 2
拒绝的行 #3:
列 ID: 3
拒绝的行 #4:
列 ID: 4
拒绝的行 #5:
列 ID: 5
拒绝的行 #6:
列 ID: 6
拒绝的行 #7:
列 ID: 7
拒绝的行 #8:
列 ID: 8
拒绝的行 #9:
列 ID: 9作业 "YANGTK"."SYS_IMPORT_FULL_01" 已于 01:59:00 成功完成。
现在已经可以确定,在直接路径导入过程中,DATA_OPTIONS参数无效。其实在文档中Oracle还是进行了说明:
Restrictions
IfSKIP_CONSTRAINT_ERRORSisusedandifadataobjecthasuniqueindexesorconstraintsdefinedonitatthetimeoftheload,thentheAPPENDhintwillnotbeusedforloadingthatdataobject.Therefore,loadingsuchdataobjectswilltakelongerwhentheSKIP_CONSTRAINT_ERRORSoptionisused.
EvenifSKIP_CONSTRAINT_ERRORSisspecified,itisnotusedunlessadataobjectis
beingloadedusingtheexternaltableaccessmethod.
只不过开始没有注意到这里,而是将注意力放在了唯一索引处。从这个意义上将,这个问题不是bug,而是Oracle的实现方式。
不过个人仍然认为,既然设计了这个参数,且用户指定了这个参数,数据泵就应该放弃直接路径导入。
更多精彩
赞助商链接