表在线重定义(有主键)

联系:手机(13429648788)  QQ(107644445)

链接:https://www.orasos.com/%e8%a1%a8%e5%9c%a8%e7%ba%bf%e9%87%8d%e5%ae%9a%e4%b9%89.html

标题:表在线重定义(有主键)

作者:惜分飞©版权所有[文章允许转载,但必须以链接方式注明源地址,否则追究法律责任.]

主要是使用DBMS_REDEFINITION包实现,我这里主要是实现一个由普通表转为分区表的处理

在线重定义的表自行验证,看该表是否可以重定义
EXEC DBMS_REDEFINITION.CAN_REDEF_TABLE(user, ‘T_DEF’, DBMS_REDEFINITION.CONS_USE_PK);
–如果T_DEF表无主键,请添加上,不然会爆如下错误
begin DBMS_REDEFINITION.CAN_REDEF_TABLE(user, ‘T_DEF’, DBMS_REDEFINITION.CONS_USE_PK); end;
ORA-12089: cannot online redefine table “CHF”.”T_DEF” with no primary key
ORA-06512: at “SYS.DBMS_REDEFINITION”, line 137
ORA-06512: at “SYS.DBMS_REDEFINITION”, line 1479
ORA-06512: at line 2

执行表的在线重定义
EXEC DBMS_REDEFINITION.START_REDEF_TABLE(USER, ‘T_DEF’, ‘T_DEF_NEW’);

同步数据
exec dbms_redefinition.sync_interim_table(USER, ‘T_DEF’, ‘T_DEF_NEW’);

执行结束在线定义过程
EXEC DBMS_REDEFINITION.FINISH_REDEF_TABLE(user, ‘T_DEF’, ‘T_DEF_NEW’);

说明:
1、和使用交换分区的办法处理,这个是在线的,不用停业务
2、在线重定义处理后,原表中的数据不会被清空,可能需要额外的空间
3、处理速度没有直接使用交互分区快

One thought on “表在线重定义(有主键)

  1. 其实oracle表的在线重定义是间接通过,prebuilt物化视图实现的,在执行DBMS_REDEFINITION.START_REDEF_TABLE()后,我们可以通过查询,user_mviews与user_mview_logs,发现增加了对应的物化视图和物化视图日志,而SYNC_INTERIM_TABLE(),其实也只是物化视图的增量刷新,最终执行FINISH_REDEF_TABLE()的时候,将锁定原表,防止表上的DML,物化视图执行刷新,完成刷新后,将删除物化视图和对应的日志,将中间表rename成目标表。

Comments are closed.