执行DBMS_REDEFINITION报ORA-42030错误-阿里云开发者社区

开发者社区> 数据库> 正文

执行DBMS_REDEFINITION报ORA-42030错误

简介: 【背景】今天在做一个SAP表VBRP的在线重定义,报了如下的错误,这个报错的原因很清晰,就是由于VBRP_NEW20161221的有些字段有问题导致数据插入不进去; 点击(此处)折叠或打开 SQL> EXEC DBMS_REDEFINITION.
【背景】今天在做一个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.



版权声明:本文首发在云栖社区,遵循云栖社区版权声明:本文内容由互联网用户自发贡献,版权归用户作者所有,云栖社区不为本文内容承担相关法律责任。云栖社区已升级为阿里云开发者社区。如果您发现本文中有涉嫌抄袭的内容,欢迎发送邮件至:developer2020@service.aliyun.com 进行举报,并提供相关证据,一经查实,阿里云开发者社区将协助删除涉嫌侵权内容。

分享:
数据库
使用钉钉扫一扫加入圈子
+ 订阅

分享数据库前沿,解构实战干货,推动数据库技术变革

其他文章