Oracle中的分区表

1.范围分区
首先建立表空间
 
create   tablespace   ss1
datafile 'E:\app\suibian\oradata\orcl\ss1.dbf'
size   10   M;
create   tablespace   ss2
datafile 'E:\app\suibian\oradata\orcl\ss2.dbf'
size   10   M;
create   tablespace   ss3
datafile 'E:\app\suibian\oradata\orcl\ss3.dbf'
size   10   M;

/*表和表分区一定要一起建立,不能分开,否则出错*/
create table t1(id number)
partition by range(id)
(
   partition p1 values less than(10)  tablespace  ss1,
    partition p2 values less than(100)  tablespace  ss2,
    partition pm values less than(maxvalue)  tablespace  ss3
);


/*这个是实现插入数据的*/
insert into t1
select 5 from dual union
select 55 from dual union
select 555 from dual;

/*这个是查看各个表的分区信息的*/
select * from user_tab_partitions; 

/*查询的实现*/

select * from t partition(p1);  
/*这个查询的是p1这一级的数据,如果里面有俩个小于10的数字,那么会打印出俩个数字*/
select * from t partition(p2);
/*相当于分级,不同的阶层有不同的表示方法*/
select * from t partition(pm)


删除,修改等操作

alter   table   t1   drop   partition   pm;   /*在等级为pm下的数据全部丢失,慎用*/
                                   /*这样的操作是不会影响其余分区的数据,很稳定。*/
alter table t1 add partition
 p2 values less than(1000)  tablespace   ss2
/*这样再添加的话只能大于最后一个分区的  分区界限必须调整为高于最后一个分区界限 */

range:范围划分
partiton by:用于指定的划分区方式。
values less than :指定分区的上界(上限)


那么来段字符串怎么样?

create   table   c1(address   varchar2 (   50 ))
partition   by   list (address)
(
            partition   s1   values   ( '阿尔卑斯' ,   '西藏' , '桂林'   ),
            partition   s2   values   ( '马来西亚' ,   '张家界' , '好望角'   ),
            partition   s3   values   ( '三亚' ,   '上海' , '墨西哥'   )
);


insert into c1
select ' 西藏 ' from dual union
select ' 张家界 ' from dual union
select ' 上海 ' from dual;


/*与上面雷同*/
select * from c1 partition(s2);

hash分区:事先不知道数据的多少,范围大小很难确定,很难平衡,不希望数据聚集。

create table h1(name varchar2(20))
partition by hash(name)
(
            partition l1 tablespace ts1,
            partition l2 tablespace ts2,
            partition l3 tablespace ts3
);

insert into h1
select 'eafas' from dual union
select 'edddd' from dual union
select 'e3333333333s' from dual union
select 'aaaaaaaaas' from dual;
结果显示无逻辑。。。。


还有一种更加麻烦的分区方法,那就是合成分区,组合分区(composite partitioning)

使用range分区,在每个子分区再使用hash分区实现再分区。
比range更容易管理,支持历史数据和条块数据倆者。

create   table   cp(
id   number   ,
address   varchar2 (   50 )
)
partition   by   range (   id )
subpartition   by   list (address)
(
               partition   w1   values   less   than ( 100   )
             (
                         subpartition   n11   values   ( '邓肯' ),
                         subpartition   n12   values   ( '科比' )
             ),
                partition   w2   values   less   than ( 400   )
             (
                         subpartition   n21   values   ( '詹姆斯' ),
                         subpartition   n22   values   ( '安东尼' )
             ),   
               partition   w3   values   less   than ( 700   )
             (
                         subpartition   n31   values   ( '邓肯' ),
                         subpartition   n32   values   ( '科比' )
             ),
                partition   w4   values   less   than ( 800   )
             (
                         subpartition   n41   values   ( '詹姆斯' ),
                         subpartition   n42   values   ( '安东尼' )
             )                                            
);





删除操作:alter table cp drop subpartition n11;

查看一个表是不是分区表;
select table_name,partitioned from user_tables; 

     
查看
select * from DBA_TAB_PARTITIONS;
select * from DBA_TAB_SUBPARTITIONS;
select * from DBA_IND_SUBPARTITIONS;
select * from DBA_IND_SUBPARTITIONS;


 

alter table t add partition r3 values less than(maxvalue);

alter table t  split partition r3 at(100000) into (partition r4,partition r5);

alter table t merge partition r4,r5 into partition r3; 

alter table t drop partition r3;







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值