2014-11-05 140 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