ITPub博客

首页 > IT职业 > IT职场 > 已有数据的非分区表转换成分区表

已有数据的非分区表转换成分区表

IT职场 作者:shenmingmingDBA 时间:2020-04-07 18:36:00 0 删除 编辑

--操作的用户需要有以下的权限

GRANT CONNECT, RESOURCE TO CMIGDW;

GRANT EXECUTE ON DBMS_REDEFINITION TO CMIGDW;

GRANT ALTER ANY TABLE TO CMIGDW;

GRANT DROP ANY TABLE TO CMIGDW;

GRANT LOCK ANY TABLE TO CMIGDW;

GRANT CREATE ANY TABLE TO CMIGDW;

GRANT SELECT ANY TABLE TO CMIGDW;

GRANT CREATE ANY TRIGGER TO CMIGDW;

GRANT CREATE ANY INDEX TO CMIGDW;






--需要分区的表


select * from YW_LS_CHELIANGTJXCLS;




--表结构


create table YW_LS_CHELIANGTJXCLS

(

  ZHUJIANBH  NUMBER(19) not null,

  TUJINGXCBH NUMBER(19),

  CHELIANGBH NUMBER(19),

  JINRUSJ    NUMBER(10),

  SHICHUSJ   NUMBER(10),

  JINRUJD    VARCHAR2(30),

  JINRUWD    VARCHAR2(30),

  SHICHUJD   VARCHAR2(30),

  SHICHUWD   VARCHAR2(30),

  JINRUWZ    VARCHAR2(1000),

  SHICHUWZ   VARCHAR2(1000),

  SHUJUZT    NUMBER(1) default 1,

  JINRUSD    NUMBER(6),

  SHICHUSD   NUMBER(6)

)




--创建一个与YW_LS_CHELIANGTJXCLS表字段相同,但是分区的表


create table YW_LS_CHELIANGTJXCLS2

(

  ZHUJIANBH  NUMBER(19) not null,

  TUJINGXCBH NUMBER(19),

  CHELIANGBH NUMBER(19),

  JINRUSJ    NUMBER(10),

  SHICHUSJ   NUMBER(10),

  JINRUJD    VARCHAR2(30),

  JINRUWD    VARCHAR2(30),

  SHICHUJD   VARCHAR2(30),

  SHICHUWD   VARCHAR2(30),

  JINRUWZ    VARCHAR2(1000),

  SHICHUWZ   VARCHAR2(1000),

  SHUJUZT    NUMBER(1) default 1,

  JINRUSD    NUMBER(6),

  SHICHUSD   NUMBER(6)

)

partition by range (JINRUSJ)

(

  partition YW_LS_CHELIANGTJXCLS_202005 values less than (1590940800),

    PARTITION YW_LS_CHELIANGTJXCLS_202006 values (maxvalue)


);




--开始执行在线重定义


SQL> EXEC dbms_redefinition.start_redef_table('JGPT_JX', 'YW_LS_CHELIANGTJXCLS', 'YW_LS_CHELIANGTJXCLS2');


PL/SQL procedure successfully completed




SQL> 


SQL> DECLARE


  error_count pls_integer := 0;


 BEGIN


   dbms_redefinition.copy_table_dependents('JGPT_JX', 'YW_LS_CHELIANGTJXCLS', 'YW_LS_CHELIANGTJXCLS2',


                                           0, true, false, true, false,


                                           error_count);


 


   dbms_output.put_line('errors := ' || to_char(error_count));


 END;


 /


PL/SQL procedure successfully completed


--结束在线重定义


SQL> EXEC  dbms_redefinition.finish_redef_table('JGPT_JX', 'YW_LS_CHELIANGTJXCLS', 'YW_LS_CHELIANGTJXCLS2');



PL/SQL procedure successfully completed




SQL> select * from  YW_LS_CHELIANGTJXCLS PARTITION (YW_LS_CHELIANGTJXCLS_202005);


SQL> select * from YW_LS_CHELIANGTJXCLS2




-- 删除中间表


DROP TABLE YW_LS_CHELIANGTJXCLS2




--创建完最后的分区是maxvalue,要拆分




  ALTER TABLE YW_LS_CHELIANGTJXCLS SPLIT PARTITION YW_LS_CHELIANGTJXCLS_202006  at (1593532800) INTO (PARTITION YW_LS_CHELIANGTJXCLS_202006 , PARTITION YW_LS_CHELIANGTJXCLS_202007);




--拆分完要查看数据是否都在07的分区里 




select  count(*) from yw_ls_cheliangtjxcls  partition (YW_LS_CHELIANGTJXCLS_202006);


select  count(*) from yw_ls_cheliangtjxcls  partition (YW_LS_CHELIANGTJXCLS_202007);




--如果分07里没有数据则删掉


--然后把分出来的 YW_LS_CHELIANGTJXCLS_202007分区删掉重新创建,因为分出来的07分区是默认存储最大值maxvalue,所以删除重建,然后添加到生成分区的存储过程脚本中,每月自动生产当前月分区。


alter table yw_ls_cheliangtjxcls drop partition YW_LS_CHELIANGTJXCLS_202007 




alter table YW_LS_CHELIANGTJXCLS   add partition YW_LS_CHELIANGTJXCLS_202007 values  less than (1596211200) tablespace tbsp_his_data_202004 pctfree 10 initrans 1 maxtrans 255


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/30166976/viewspace-2684870/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: yum源配置
请登录后发表评论 登录
全部评论

注册时间:2015-03-17

  • 博文量
    56
  • 访问量
    147922