执行DBMS_REDEFINITION报ORA-42030错误

【背景】今天在做一个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.



上一篇:iOS开发UI篇—iPad和iPhone开发的比较


下一篇:感冒了~ vs中py和vb实现一个小算法