普通表转分区表-在线重定义

来源:这里教程网 时间:2026-03-03 21:01:43 作者:

原表非分区表:T_EC_EVENT_CONTENT 创建中间表:INIT_T_EC_EVENT_CONTENT创建中间分区表create table INIT_T_EC_EVENT_CONTENT (   EVENTID      VARCHAR2(50),   JHDATE       DATE not null,   FWQBH        VARCHAR2(8),   SENDER       VARCHAR2(50),   RECEIVER     VARCHAR2(50),   NODEID       VARCHAR2(8),   ACTIONTYPE   VARCHAR2(100),   EVENTSIZE    NUMBER(30),   EVENTTYPE    VARCHAR2(2),   MEMO         VARCHAR2(2000),   MESSAGEID    VARCHAR2(50),   EVENTCONTENT CLOB,   CLIENTIP     VARCHAR2(50),   CLIENTOS     VARCHAR2(50),   MBFWQBH      VARCHAR2(8),   ID           VARCHAR2(50) not null,   KSSJ         TIMESTAMP(6),   JSSJ         TIMESTAMP(6) )partition by range (JHDATE) INTERVAL(NUMTOYMINTERVAL(1,'MONTH')) (  PARTITION MT1 VALUES LESS THAN (TO_DATE('2020-01-01 00:00:00','YYYY-MM-DD hh24:mi:ss'))  storage     (       initial 8M       next 100M       minextents 1       maxextents unlimited     ) )storage     (       initial 8M       next 100M       minextents 1       maxextents unlimited     ); --验证是否可以进行在线重定义,验证原表是否有主键exec dbms_redefinition.can_redef_table('test', 'T_EC_EVENT_CONTENT');======所有操作之前要先验证--开始重定义,把原表数据复制到中间表数据 exec dbms_redefinition.start_redef_table('test', 'T_EC_EVENT_CONTENT', 'INIT_T_EC_EVENT_CONTENT');--迁移权限对象 SQL> declare     num_errors PLS_INTEGER;     begin     dbms_redefinition.copy_table_dependents('TEST', 'T_EC_EVENT_CONTENT', 'INIT_T_EC_EVENT_CONTENT',     dbms_redefinition.cons_orig_params, TRUE, TRUE, TRUE, TRUE, num_errors);     end;     / PL/SQL procedure successfully completed--同步临时表与原始表中的数据,差异数据同步 exec dbms_redefinition.sync_interim_table('test', 'T_EC_EVENT_CONTENT', 'INIT_T_EC_EVENT_CONTENT');--结束重定义,自动把两张表互换名称 exec dbms_redefinition.finish_redef_table('test', 'T_EC_EVENT_CONTENT', 'INIT_T_EC_EVENT_CONTENT');--取消重定义 exec dbms_redefinition.abort_redef_table('test', 'T_EC_EVENT_CONTENT', 'INIT_T_EC_EVENT_CONTENT'); --查询是否有错 select object_name, base_table_name, ddl_txt from   DBA_REDEFINITION_ERRORS;

相关推荐