20230207-Oracle impdp迁移数据后主键丢失故障处理

在这里插入图片描述

问题现象:

通过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);

欢迎关注我的公众号《IT小Chen

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值