2014-11-05 45 views
0

我正在使用OracleBulkCopy将批次中的记录插入Oracle数据库3.在我的表中,为第一批插入了重复的记录,但未能为下一个记录。第一批也应该失败,因为它不应该允许重复的条目!下面你可能会发现我的表'创建脚本'(我已经删除了一些字段)。即使存在主键和唯一索引,Oracle也允许重复记录

任何想法?

-------------------------------------------------------- 
-- DDL for Table CHEQUES 
-------------------------------------------------------- 

    CREATE TABLE "DBOUSB"."CHEQUES" 
    ( "RECORDID" NUMBER(38,2), 
    "CHEQUE_NUMBER" VARCHAR2(8 CHAR), 
    "SCANNING_DATE" VARCHAR2(19 CHAR), 
    ) SEGMENT CREATION IMMEDIATE 
    PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 
NOCOMPRESS LOGGING 
    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 "USERS" 
LOB ("MSGNUMBERS") STORE AS BASICFILE (
    TABLESPACE "USERS" ENABLE STORAGE IN ROW CHUNK 8192 RETENTION 
    NOCACHE LOGGING 
    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)) 
LOB ("DOCSTYPE") STORE AS BASICFILE (
    TABLESPACE "USERS" ENABLE STORAGE IN ROW CHUNK 8192 RETENTION 
    NOCACHE LOGGING 
    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)) 
LOB ("DOCSPAGESTYPE") STORE AS BASICFILE (
    TABLESPACE "USERS" ENABLE STORAGE IN ROW CHUNK 8192 RETENTION 
    NOCACHE LOGGING 
    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)) 
LOB ("IMAGESLINK") STORE AS BASICFILE (
    TABLESPACE "USERS" ENABLE STORAGE IN ROW CHUNK 8192 RETENTION 
    NOCACHE LOGGING 
    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)) 
LOB ("IMAGES") STORE AS BASICFILE (
    TABLESPACE "USERS" ENABLE STORAGE IN ROW CHUNK 8192 RETENTION 
    NOCACHE LOGGING 
    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)) ; 
-------------------------------------------------------- 
-- DDL for Index CHEQUES_PK 
-------------------------------------------------------- 

    CREATE UNIQUE INDEX "DBOUSB"."CHEQUES_PK" ON "DBOUSB"."CHEQUES" ("RECORDID") 
    PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS 
    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 "USERS" ; 
    ALTER INDEX "DBOUSB"."CHEQUES_PK" UNUSABLE; 
-------------------------------------------------------- 
-- Constraints for Table CHEQUES 
-------------------------------------------------------- 

    ALTER TABLE "DBOUSB"."CHEQUES" ADD CONSTRAINT "CHEQUES_PK" PRIMARY KEY ("RECORDID") 
    USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS 
    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 "USERS" 
    ALTER INDEX "DBOUSB"."CHEQUES_PK" UNUSABLE; ENABLE; 
    ALTER TABLE "DBOUSB"."CHEQUES" MODIFY ("RECORDID" NOT NULL ENABLE); 
+1

没有必要在稍后添加主键约束的列上放置任何索引 - 主键约束将自动添加唯一索引。 – 2014-11-08 11:59:05

回答

1

我怀疑躺在事实,你cheques_pk指数为unusable状态的麻烦。

+0

它在OracleBulkCopy的第一批instert后变得不可用。 OracleBulkCopy禁用索引并使其不可用,然后在第二批中索引已经不可用,则会引发错误。我想要实现的是禁用第一次插入,以便索引不会变得不可用。 – alwaysVBNET 2014-11-08 14:57:04