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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- oracle 案例-控制檔案丟失故障處理過程Oracle
- Oracle使用資料泵 (expdp/impdp)實施遷移Oracle
- 【故障處理】DG環境主庫丟失歸檔情況下資料檔案的恢復
- redis資料丟失你怎麼處理?Redis
- 使用expdp、impdp遷移資料庫資料庫
- Oracle資料庫遷移之三:dblink+impdpOracle資料庫
- 遷移後處理外來鍵約束的問題
- 海量資料處理_資料泵分批資料遷移
- Oracle DG同步失敗故障處理(二)Oracle
- redis cluster 故障後,主從位於相同節點的修復(丟失了部分資料)Redis
- 【Datapump】Oracle資料泵遷移資料命令參考(expdp/impdp說明)Oracle
- Oracle資料庫聯機日誌檔案丟失處理方法(1)Oracle資料庫
- Oracle資料庫聯機日誌檔案丟失處理方法(3)Oracle資料庫
- Oracle資料庫聯機日誌檔案丟失處理方法(2)Oracle資料庫
- Oracle資料庫聯機日誌檔案丟失處理方法(4)Oracle資料庫
- Oracle資料庫聯機日誌檔案丟失處理方法(5)Oracle資料庫
- 使用資料泵(expdp、impdp)遷移資料庫流程資料庫
- Oracle使用impdp的network_link遷移資料庫Oracle資料庫
- max_allowed_packet引起MySQL遷移丟失資料的問題MySql
- Oracle資料庫聯機日誌檔案丟失處理方法(總結)!Oracle資料庫
- 儲存崩潰導致資料丟失如何處理
- 使用impdp,expdp資料泵進入海量資料遷移
- Oracle Expdp/Impdp 進行資料遷移的 幾點注意事項Oracle
- oracle中undo表空間丟失處理方法Oracle
- Oracle DataGuard歸檔日誌丟失處理方法Oracle
- Oracle_dg歸檔丟失問題處理Oracle
- ORACLE 資料遷移Oracle
- 使用impdp不當導致的資料丟失問題
- expdp/impdp使用sysdba許可權遷移資料
- 海量資料處理_使用外部表進行資料遷移
- Oracle資料庫聯機日誌檔案丟失處理方法(總結)(轉)Oracle資料庫
- Jison解決JS處理後端返回的Long型資料精度丟失問題JS後端
- 【北亞資料恢復】MongoDB資料遷移檔案丟失的MongoDB資料恢復案例資料恢復MongoDB
- oracle dataguard資料同步故障處理一例Oracle
- [原創] Oracle資料庫聯機日誌檔案丟失處理方法(總結)!Oracle資料庫
- expdp/impdp 使用version引數跨版本資料遷移
- Oracle資料庫關於錶行連線和行遷移處理方案Oracle資料庫
- ORACLE資料庫遷移Oracle資料庫