在线重定义19G表,转化为组合分区表。应用无需停止。


Oracle 高可用特性, 想必大家都知道。   这里我想记录一次工作中的小小尝试。  在线重定义19G表转化为二级分区表


系统中表 ST_MNTR_BUS_ORDER_SUM3     现在按照list 分区,  改成组合分区,  原来的数据堆积起来有4  5 个月的数据 共19G。查询很多过期数据  


于是性能问题出现。   自动化清空大批过期数据,数据量始终可控。  我感觉精华部分在于分区的设计。 但是我这里不想重点说, 说说在线重定义。 


上干货:   表木有主键, 哥通过rowid 完成在线重定义,    关于前骤, 自己去百度下,这里不多说。  




  begin
     dbms_redefinition.can_redef_table('JS_ZWXN','ST_MNTR_BUS_ORDER_SUM3',Dbms_Redefinition.cons_use_rowid);
   end;  
   
  
   begin 
  dbms_redefinition.start_redef_table('JS_ZWXN','ST_MNTR_BUS_ORDER_SUM3','ST_MNTR_BUS_ORDER_SUM_ONLINE',null,dbms_redefinition.cons_use_rowid);
   end; 
 
 
  begin  
  DBMS_REDEFINITION.FINISH_REDEF_TABLE('JS_ZWXN', 'ST_MNTR_BUS_ORDER_SUM3', 'ST_MNTR_BUS_ORDER_SUM_ONLINE'); 
  end;   
  

 卡在第二步,哥看了等待事件,  多块读 每次读取11-16个数据块, 如果哥改成 每次读64,或者128 个块时间缩短到多少??   当时哥花了15分钟。  哥是在业务不忙时候判断的, 关于如何判断哥不是通过时间 估测, 有相当精准的判断方案,  IO压力,  内存压力, 每秒执行的SQL数量, 以及redo undo 综合判断得出的,

关于判断重定义时间经度, 哥不多说, 只提供两个方案 1  等待事件指向的 对象, 2 对应物化视图的总量,以及增加速度。  


15分钟搞定, 不影响业务正常使用。   简单纪念, 记录之.........








猜你喜欢

转载自blog.csdn.net/daiqiulong2/article/details/53536914