Oracle impdp遷移資料後主鍵丟失故障處理

chenoracle發表於2023-02-07

問題現象:

透過IMPDP將B庫資料匯出A庫時,提示:

ORA-31684: Object type CONSTRAINT:"CJCTEST"."SYS_C0022260" already exists
ORA-31684: Object type CONSTRAINT:"CJCTEST"."SYS_C0021924" already exists

透過提示知道匯入時兩個約束已經存在了,是否由影響需要繼續檢查。

檢查A,B庫物件型別

B庫:

SQL> select object_type from dba_objects where object_name='SYS_C0022260';
OBJECT_TYPE
--------------------------------------
INDEX

A庫:

SQL> select object_type from dba_objects where object_name='SYS_C0022260';
OBJECT_TYPE
-------------------
INDEX

檢查A,B庫SYS_C0022260索引建立語句

SET LINE 300
SET PAGESIZE 1000
SET LONG 1000
select dbms_metadata.get_ddl('INDEX','SYS_C0022260','CJCTEST') from dual;
###
CREATE UNIQUE INDEX "CJCTEST"."SYS_C0022260" ON "CJCTEST"."CJC_MEMORY_MONITOR" ("ID")
PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS
TABLESPACE "CJC_INDEX01"

檢查A,B庫約束型別

原庫B庫,顯示為主鍵約束

SQL> select CONSTRAINT_NAME,CONSTRAINT_TYPE from dba_CONSTRAINTs where OWNER='CJCTEST' and CONSTRAINT_NAME='SYS_C0022260';
CONSTRAINT_NAME CO
------------------------------------------------------------ --
SYS_C0022260 P

目標庫A庫,顯示為檢查約束

SQL> select CONSTRAINT_NAME,CONSTRAINT_TYPE from dba_CONSTRAINTs where OWNER='CJCTEST' and CONSTRAINT_NAME='SYS_C0022260';
CONSTRAINT_NAME C
------------------------------ -
SYS_C0022260 C

檢查表定義

select dbms_metadata.get_ddl('TABLE','CJC_MEMORY_MONITOR','CJCTEST') from dual;

A庫:沒有CONSTRAINT "SYS_C0022260" PRIMARY KEY ("ID")

CREATE TABLE "CJCTEST"."CJC_MEMORY_MONITOR"
( "ANA_ID" VARCHAR2(255),
"CREATED_BY" VARCHAR2(255),
"CREATED_DATE" TIMESTAMP (6),
"ID" VARCHAR2(36) NOT NULL ENABLE,
"LAST_MODIFIED_BY" VARCHAR2(255),
"LAST_MODIFIED_DATE" TIMESTAMP (6),
"MAX_AVA_MEMORY" NUMBER(38,0) NOT NULL ENABLE,
"NANO" NUMBER(38,0),
"STACKTRACE" CLOB,
"SYS_TENANT_ID" VARCHAR2(255),
"TENANT_ID" VARCHAR2(255) NOT NULL ENABLE,
"TS" TIMESTAMP (6) DEFAULT cast(sysdate as timestamp),
"USED_MEMORY" NUMBER(38,0) NOT NULL ENABLE,
"USER_ID" VARCHAR2(255) NOT NULL ENABLE
) SEGMENT CREATION DEFERRED
PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
NOCOMPRESS LOGGING
TABLESPACE "CJC_DATA01"
LOB ("STACKTRACE") STORE AS BASICFILE (TABLESPACE "CJC_DATA01" ENABLE STORAGE IN ROW CHUNK 8192 RETENTION
NOCACHE LOGGING )

B庫:有CONSTRAINT "SYS_C0022260" PRIMARY KEY ("ID")

CREATE TABLE "CJCTEST"."CJC_MEMORY_MONITOR"
( "ANA_ID" VARCHAR2(255),
"CREATED_BY" VARCHAR2(255),
"CREATED_DATE" TIMESTAMP (6),
"ID" VARCHAR2(36) NOT NULL ENABLE,
"LAST_MODIFIED_BY" VARCHAR2(255),
"LAST_MODIFIED_DATE" TIMESTAMP (6),
"MAX_AVA_MEMORY" NUMBER(38,0) NOT NULL ENABLE,
"NANO" NUMBER(38,0),
"STACKTRACE" CLOB,
"SYS_TENANT_ID" VARCHAR2(255),
"TENANT_ID" VARCHAR2(255) NOT NULL ENABLE,
"TS" TIMESTAMP (6) DEFAULT cast(sysdate as timestamp),
"USED_MEMORY" NUMBER(38,0) NOT NULL ENABLE,
"USER_ID" VARCHAR2(255) NOT NULL ENABLE,
CONSTRAINT "SYS_C0022260" PRIMARY KEY ("ID")
USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS
TABLESPACE "CJC_INDEX01" ENABLE
) SEGMENT CREATION DEFERRED
PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
NOCOMPRESS LOGGING
TABLESPACE "CJC_DATA01"
LOB ("STACKTRACE") STORE AS BASICFILE (
TABLESPACE "CJC_DATA01" ENABLE STORAGE IN ROW CHUNK 8192 RETENTION
NOCACHE LOGGING )
ALTER TABLE CJC_MEMORY_MONITOR

檢查約束定義

select dbms_metadata.get_ddl('CONSTRAINT','SYS_C0022260','CJCTEST') from dual;

B庫:

ALTER TABLE "CJCTEST"."CJC_MEMORY_MONITOR" ADD CONSTRAINT "SYS_C0022260" PRIMARY KEY ("ID")
USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS
TABLESPACE "CJC_INDEX01" ENABLE

A庫:

ALTER TABLE "CJCTEST"."SCAPTO_MATTERLISTREPORT_MID" MODIFY ("LIST_ID" NOT NULL ENABLE)

問題原因:

約束對應的表名不一致,初步懷疑在匯入資料庫時約束名稱是自動生成的,

由於匯入表先後順序的不同,導致SYS_C0022260名稱被佔用。

解決方案:

A庫需要手動新增CJC_MEMORY_MONITOR表ID列主鍵

ALTER TABLE CJC_MEMORY_MONITOR ADD CONSTRAINT PK_CJC_MEMORY_MONITOR_ID PRIMARY KEY(ID);

同理處理SYS_C0021924物件

select dbms_metadata.get_ddl('CONSTRAINT','SYS_C0021924','CJCTEST') from dual;
ALTER TABLE "CJCTEST"."WB_DATA_CJC" ADD CONSTRAINT "SYS_C0021924" PRIMARY KEY ("ID")
ALTER TABLE "CJCTEST"."HI_CJC_AGREEMENT" MODIFY ("PK_AGREEMENT" NOT NULL ENABLE)

A庫手動新增主鍵

ALTER TABLE WB_DATA_CJC ADD CONSTRAINT PK_WB_DATA_CJC_ID PRIMARY KEY(ID);



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29785807/viewspace-2934237/,如需轉載,請註明出處,否則將追究法律責任。

相關文章