表的数据量比较大,我想给现有的表创建分区,怎么做?

参与15

9同行回答

yhd_myyhd_my数据库管理员北京信利恒丰科技发展有限公司
简单说明一下:比如你建立一张分区表,通过使用像物化视图日志这样的技术进行将生产表同步数据到新的分区表上,数据量大的话,会同步的时间长一些。数据基本同步已经差不多的时间 ,可以将业务暂停一下,将两个表的数据同步成一样,此时因为只有少量的新数据进行同步,花时较少。进行两...显示全部
简单说明一下:比如你建立一张分区表,通过使用像物化视图日志这样的技术进行将生产表同步数据到新的分区表上,数据量大的话,会同步的时间长一些。数据基本同步已经差不多的时间 ,可以将业务暂停一下,将两个表的数据同步成一样,此时因为只有少量的新数据进行同步,花时较少。进行两个表的身份互换。这样就达到你想要的结果 了。此时那个分区表就成为你的业务表了,当然做这个前需要你对业务表进行评估,再有就是充分的实验。(备份与回退方案,也是要有的。)
下面赋一个小小的例子,你可以到官网再学习一下。
基于主键的在线重定义
(1)验证是否满足基于主键在线重定义要求                                                                                            
        exec dbms_redefinition.can_redef_table('SEC','R',dbms_redefinition.cons_user_pk);                                             

(2)创建在线重定义中间表R_REDEF,表空间设置为目标TBS_ASSM                                                                        

      drop table r_redef purge;                                                                                                     

      create table r_redef tablespace tbs_assm as select * from t where 0=1;                                                        

      alter table r_redef add constraint pk_r_redef primary key (x);                                                               

      alter index pk_r_redef rebuild tablespace tbs_assm;                                                                           

(3)查看R表和R_REDEF表以及他们主键索引所在的表空间                                                                                

  select segment_name,segment_type,tablespace_name from dba_segments where segment_name in  ('R','PK_R','R_REDEF','PK_R_REDEF');

(4)启动在线重定义                                                                                                               

exec dbms_redefinition.start_redef_table('SEC','R','R_REDEF');                                                               

(5)发现此时中间表的索引所在表空间发生了变化,指向默认USERS表空间                                                                 

select segment_name,segment_type,tablespace_name from dba_segments where segment_name in ('R','PK_R','R_REDEF','PK_R_REDEF');

(6)在完成在线重定义之前可以手工同步数据                                                                                          

exec dbms_redefinition.sync_interim_table('SEC','R','R_REDEF');                                                               

(7)完成在线重定义                                                                                                               

exec dbms_redefinition.finish_redef_table('SEC','R','R_REDEF');                                                               

(8)查看R表与主键索引的对应关系                                                                                                   

R表与中间表R_REDEF互换后,对应的主键索引并没有互换,因此T表些时对应的主键索引名称是PK_R_REDEF。                              

select table_name,index_name from user_indexes where table_name='R';                                                         

(9)再次查看R表和R_REDEF表以及他们主键索引所在的表空间                                                                           

  select segment_name,segment_type,tablespace_name from dba_segments where segment_name in         ('R','PK_R','R_REDEF','PK_R_REDEF');

可见此时,T表的表空间已经从原来的手动段空间管理表空间TBS_MSSM调整到了自动段空间管理TBS_ASSM。                                 

(10)将R表的主键索引使用online选项调整到TBS_ASSM表空间上                                                                          

alter index PK_R_REDEF rebuild tablespace TBS_ASSM online;                                                                    

(11)最终结果                                                                                                                     


select segment_name,segment_type,tablespace_name from dba_segments where segment_name in ('R','PK_R','R_REDEF','PK_R_REDEF');收起
保险 · 2015-08-17
浏览1668
yhd_myyhd_my数据库管理员北京信利恒丰科技发展有限公司
如果该表的业务不能停的话,可以采用在线重定义技术,使你的业务表转到分区表的结构上去。最终再将表名进行变更。当然如果此表可以找到停止业务的时间截点,可以考虑将数据EXPDP,做好个分区表,再IMPDP进去。...显示全部
如果该表的业务不能停的话,可以采用在线重定义技术,使你的业务表转到分区表的结构上去。最终再将表名进行变更。当然如果此表可以找到停止业务的时间截点,可以考虑将数据EXPDP,做好个分区表,再IMPDP进去。收起
保险 · 2015-08-17
浏览1490
wbkingwbking软件开发工程师恒生电子
了解了显示全部
了解了收起
金融其它 · 2015-08-27
浏览1500
岁月无痕岁月无痕软件开发工程师中科软
回复 8# 静以致远    好的,多谢!显示全部
回复 8# 静以致远


   好的,多谢!收起
软件开发 · 2015-08-17
浏览1471
静以致远静以致远数据库运维工程师汇通天下
回复 5# 岁月无痕    http://blog.itpub.net/17203031/viewspace-704826/ 链接已附上显示全部
回复 5# 岁月无痕


   http://blog.itpub.net/17203031/viewspace-704826/
链接已附上收起
互联网服务 · 2015-08-17
浏览1539
岁月无痕岁月无痕软件开发工程师中科软
回复 6# yhd_my    我试试  多谢!显示全部
回复 6# yhd_my


   我试试  多谢!收起
软件开发 · 2015-08-17
浏览1480
岁月无痕岁月无痕软件开发工程师中科软
回复 3# 静以致远    能在详细点嘛,不太懂显示全部
回复 3# 静以致远


   能在详细点嘛,不太懂收起
软件开发 · 2015-08-17
浏览1492
岁月无痕岁月无痕软件开发工程师中科软
在线重定义不太懂?这个什么时候用呢显示全部
在线重定义不太懂?这个什么时候用呢收起
软件开发 · 2015-08-17
浏览1475
静以致远静以致远数据库运维工程师汇通天下
可以考虑用exchange partition显示全部
可以考虑用exchange partition收起
互联网服务 · 2015-08-17
浏览1519

提问者

岁月无痕
软件开发工程师中科软

相关问题

相关资料

相关文章

问题状态

  • 发布时间:2015-08-17
  • 关注会员:1 人
  • 问题浏览:5678
  • 最近回答:2015-08-27
  • X社区推广