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);
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29785807/viewspace-2934237/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【Datapump】Oracle資料泵遷移資料命令參考(expdp/impdp說明)Oracle
- Oracle DG同步失敗故障處理(二)Oracle
- redis資料丟失你怎麼處理?Redis
- 使用資料泵(expdp、impdp)遷移資料庫流程資料庫
- 使用impdp,expdp資料泵進入海量資料遷移
- Oracle DataGuard歸檔日誌丟失處理方法Oracle
- oracle中undo表空間丟失處理方法Oracle
- redis cluster 故障後,主從位於相同節點的修復(丟失了部分資料)Redis
- max_allowed_packet引起MySQL遷移丟失資料的問題MySql
- 儲存崩潰導致資料丟失如何處理
- AWS RDS Oracle資料遷移Oracle
- 【故障處理】如何避免在執行impdp後出現ORA-00001錯誤
- Oracle更新Opatch故障處理Oracle
- Jison解決JS處理後端返回的Long型資料精度丟失問題JS後端
- Oracle 目錄許可權丟失故障恢復Oracle
- 【北亞資料恢復】MongoDB資料遷移檔案丟失的MongoDB資料恢復案例資料恢復MongoDB
- 關於丟失表空間資料檔案的處理方式
- Oracle資料庫(資料泵)遷移方案(上)Oracle資料庫
- Oracle資料庫(資料泵)遷移方案(下)Oracle資料庫
- oracle資料庫的impdp,expdpOracle資料庫
- 【伺服器資料恢復】ZFS伺服器遷移資料時資料丟失的資料恢復案例伺服器資料恢復
- 無外網Oracle資料庫遷移Oracle資料庫
- Oracle資料庫(DataGuard)遷移方案(上)Oracle資料庫
- Oracle資料庫(DataGuard)遷移方案(中)Oracle資料庫
- Oracle資料庫(DataGuard)遷移方案(下)Oracle資料庫
- Oracle 10g RAC故障處理Oracle 10g
- Oracle 11.2.0.4 Dataguard兩則故障處理Oracle
- Oracle 11g impdp 先資料後索引匯入方法Oracle索引
- 故障分析 | MySQL 遷移後 timestamp 列 cannot be nullMySqlNull
- chkdsk 後資料丟失的恢復方法
- 【伺服器資料恢復】伺服器之間遷移資料時資料丟失的資料恢復案例伺服器資料恢復
- X7一體機資料庫遷移問題處理資料庫
- [資料庫][分庫分表]分庫分表之後,id主鍵如何處理資料庫
- 資料庫故障處理優質文章彙總(含Oracle、MySQL、MogDB等)資料庫OracleMySql
- oracle RAC 更換儲存遷移資料Oracle
- OGG整合抽取模式丟失歸檔處理模式
- Oracle client安裝the jre is 0故障處理Oracleclient
- vuex頁面重新整理後資料丟失Vue