执行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.



相关文章
|
自然语言处理 并行计算 PyTorch
GitHub 开源神器 Bark模型,让文本转语音更简单!
GitHub 开源神器 Bark模型,让文本转语音更简单!
457 0
|
存储 Java 测试技术
【通用行业开发部】阿里开源TransmittableThreadLocal使用经验记录
本文章主要记录我在一次业务优化中,使用线程池带来的子父线程值传递问题,及使用TransmittableThreadLocal来解决该问题的经验,并对TransmittableThreadLocal原理做些梳理。
|
前端开发 数据库
ruoyi-nbcio增加flowable流程待办消息的提醒,并提供右上角的红字数字提醒(一)
ruoyi-nbcio增加flowable流程待办消息的提醒,并提供右上角的红字数字提醒(一)
346 0
|
druid Java 数据库连接
SringBoot整合Druid+Mybatisplus实现多数据源
SringBoot整合Druid+Mybatisplus实现多数据源
SringBoot整合Druid+Mybatisplus实现多数据源
“快捷方式指向的驱动器或网络连接不可用” 解决方法
“快捷方式指向的驱动器或网络连接不可用” 解决方法
|
消息中间件 存储 Java
消息中间件kafka+zookeeper集群部署、测试与应用
业务系统中,通常会遇到这些场景:A系统向B系统主动推送一个处理请求;A系统向B系统发送一个业务处理请求,因为某些原因(断电、宕机。。),B业务系统挂机了,A系统发起的请求处理失败;前端应用并发量过大,部分请求丢失或后端业务系统卡死。
2395 76
|
Shell Windows
解决在cmder中bash(WSL)上下箭头不能使用问题
有三种解决方式,第一种方式最简单实用 安装新版本wslbridge 这个解决方法最简单,最实用,下载第三方wslbridge,安装即可使用. 这时再进入cmder,运行bash.exe,可以发现上下左右箭头已经可以工作了.
2647 0
|
机器学习/深度学习 程序员 异构计算
【深度学习工具】Python代码查看GPU资源使用情况
在训练神经网络模型时候,有时候我们想查看GPU资源的使用情况,如果使用Ctrl+Shift+Esc不太符合我们程序员的风格😅,如果可以使用代码查看GPU使用情况就比较Nice。话不多说,直接上代码。
1130 0