使用exchange 和split partition 来将一个Oracle非分区表转换为分区表

来源:互联网 发布:笔记记录软件 编辑:程序博客网 时间:2024/06/05 03:48

 在线重定义表可以将一个非分区表转换成一个分区表。使用exchange 和split partition 也可以将一个非分区表转换为分区表。后者相比较前者,因为不受要转换的数据量影响,因此也更方便、快捷一些。
     exchange partition 操作能将一个分区表的一个分区和另一张表的数据互换,这里的互换是segment 头部信息的修改,数据block 并不做改动,因此,和数据量无关,速度会非常快;完成后,再可以按照需要将分区具体split 成其他多个分区。
总的有三个步骤:
1.建立一个空的,只有一个分区的同构分区表
2.exchange partition with table 来互换数据
3.split 分区表的分区为合适的个数
 举例如下:
-- 建立空的分区表
create  table  test_part 
    partition by range ( created )
    ( partition all_data values less than (MAXVALUE))
    as select owner,object_name,object_type,created  from test2 where  1=2;   

-- 执行exchange partition 操作
SQL> alter  table test_part exchange  partition all_data with table test2 ;
Table altered
SQL> select *  from  test_part where rownum<4;                --分区表中有数据了,原表没有了数据
OWNER                          OBJECT_NAME                                                                      OBJECT_TYPE        CREATED
------------------------------ -------------------------------------------------------------------------------- ------------------ -----------
SYS                            I_CDEF1                                                                          INDEX              2000-5-12 1
SYS                            IND$                                                                             TABLE              2000-5-12 1
SYS                            FILE$                                                                            TABLE              2000-5-12 1
SQL> select *  from  test2 where rownum<4;
OWNER                          OBJECT_NAME                                                                      OBJECT_TYPE        CREATED
------------------------------ -------------------------------------------------------------------------------- ------------------ -----------
SQL>
-- split range 分区
SQL> alter table  test_part  split  partition all_data AT (to_date('20070101','YYYYMMDD'))  into ( partition before_2007 , partition after_2007  ) ;
Table altered
SQL>
SQL> select table_name,partition_name,high_value,composite,subpartition_count  from  user_tab_partitions;
TABLE_NAME                     PARTITION_NAME                 HIGH_VALUE                                                                       COMPOSITE SUBPARTITION_COUNT
------------------------------ ------------------------------ -------------------------------------------------------------------------------- --------- ------------------
TEST_PART                      AFTER_2007                     MAXVALUE                                                                         NO                         0
TEST_PART                      BEFORE_2007                    TO_DATE(' 2007-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA NO                         0

SQL>
--对 exchange partition with table 操作做了10046 trace,分析trace 可以看出,这个ddl 操作实际上递归出了若干个dml,正是这些dml ,直接修改了某些头部信息,完成了所谓的数据互换工作

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 怀孕期间胖了怎么办啊 孕期长得太胖怎么办 狗吃马肉脸肿了怎么办 狗过敏了脸肿了怎么办 孕初期外阴很痒怎么办 怀孕了吃了田鸡怎么办 孕妇睡眠质量差怎么办吃什么 39周2天了还不生怎么办 孕中期体重猛长怎么办 4个半月胎位不正怎么办 41周不产生宫缩怎么办 生完孩子胎盘没有脱落怎么办 39周还是臀位怎么办 怀孕7个月胎位不正怎么办 怀孕六个多月胎位不正怎么办 怀孕七个月了胎位不正怎么办 怀孕七个月胎位不正怎么办 怀孕肚子上有妊娠纹怎么办 怀孕九个月肚子长痱子怎么办 怀孕前体重偏胖怎么办 怀孕打胰岛素血糖控制不好怎么办 孕后期憋的难受怎么办 怀孕6个月不想生怎么办 孕六个月不想要怎么办 怀孕9个月喝酒了怎么办 怀孕8个月喝醉了怎么办 怀孕6个月胃酸烧心怎么办 怀孕7个月胃酸怎么办 怀孕5个月胃酸怎么办 怀孕2个月胃酸怎么办 怀孕六个月胃酸烧心怎么办 孕六个月反胃酸怎么办 怀孕三个月胃酸吐酸水怎么办 孕六个月胃难受怎么办 孕6个月胃酸厉害怎么办 孕妇6个月胃酸怎么办 孕早期胎盘早剥怎么办 孕妇晕车怎么办最有效方法 怀孕了受凉胃疼怎么办 怀孕4个月胎位低怎么办 6个月胎位低怎么办