執行DBMS_REDEFINITION報ORA-42030錯誤

wzq609發表於2016-12-22
【背景】今天在做一個SAP表VBRP的線上重定義,報瞭如下的錯誤,這個報錯的原因很清晰,就是由於VBRP_NEW20161221的有些欄位有問題導致資料插入不進去;

點選(此處)摺疊或開啟

  1. SQL> EXEC DBMS_REDEFINITION.START_REDEF_TABLE('SAPSR3', 'VBRP', 'VBRP_NEW20161221');
  2.     BEGIN DBMS_REDEFINITION.START_REDEF_TABLE('SAPSR3', 'VBRP', 'VBRP_NEW20161221'); END;
  3.     *
  4.     ERROR at line 1:
  5.     ORA-12008: error in materialized view refresh path
  6.     ORA-14400: inserted partition key does not map to any partition
  7.     ORA-06512: at "SYS.DBMS_REDEFINITION", line 56
  8.     ORA-06512: at "SYS.DBMS_REDEFINITION", line 1490
  9.     ORA-06512: at line 1


解決的方法也是很簡單的,就是刪除VBRP_NEW20161221,然後修改下欄位,再重新執行重定義即可。

點選(此處)摺疊或開啟

  1. drop materialized view log on VBRP


道理都懂,結果卻錯了一步,這個錯誤的時候應該先執行如下操作:

點選(此處)摺疊或開啟

  1. BEGIN
  2.     DBMS_REDEFINITION.ABORT_REDEF_TABLE(uname => 'SAPSR3',
  3.     orig_table => 'VRP',
  4.     int_table => 'VBRP_NEW20161221'
  5.     );
  6.     END


但是我卻進行了物化檢視和表的刪除操作,當表修改完成之後,重新執行重定義的時候就報了ORA-42030的錯誤:

點選(此處)摺疊或開啟

  1. SQL> EXEC DBMS_REDEFINITION.START_REDEF_TABLE('SAPSR3', 'VBRP', 'VBRP_NEW20161221');
  2.     *
  3.     ERROR at line 1:
  4.     ORA-42030: cannot online redefine table "SAPSR3"."VBRP" with commit SCN-based
  5.     MV log
  6.     ORA-06512: at "SYS.DBMS_REDEFINITION", line 56
  7.     ORA-06512: at "SYS.DBMS_REDEFINITION", line 1490
  8.     ORA-06512: at line 1

【原因】因為刪除了物化檢視,但是當前表的物化檢視日誌還是存在的

點選(此處)摺疊或開啟

  1. SQL> SELECT LOG_OWNER,MASTER,LOG_TABLE FROM DBA_MVIEW_LOGS;
  2.     LOG_OWNER MASTER LOG_TABLE
  3.     ----------------------- ----------------- --------------------
  4.     SAPSR3 VBRP MLOG$_VBRP

【解決方法】找到問題後,原因很很簡單,就是刪除物化檢視日誌

重新執行就可以了,

點選(此處)摺疊或開啟

  1. SQL> BEGIN
  2.     DBMS_REDEFINITION.CAN_REDEF_TABLE('SAPSR3','VBRP',DBMS_REDEFINITION.CONS_USE_PK);
  3.     END;
  4.     / 2 3 4
  5.     PL/SQL procedure successfully completed.



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

相關文章