将非分区表转换为分区表

将非分区表转换为分区表方法有好多种,以其中一种举例:

.交换分区:

1.  创建分区表,假设有 2 个分区,P1,P2.
2.  创建表 A 存放 P1 规则的数据。
3.  创建表 B  存放 P2 规则的数据。
4.  用表 A  和 P1  分区交换。  把表 A 的数据放到到 P1 分区
5.  用表 B  和 p2  分区交换。  把表 B 的数据存放到 P2 分区。


步骤:

1)创建分区表

SQL> create table p_dba
  2  (id number(6),salary number(8,2))
  3  partition by range(salary)
  4  (
  5  partition p1 values less than(8000),
  6  partition p2 values less than(30000)
  7  );

分区中列的数据格式必须要与及表中列的格式保持一致,不然在基表与分区进行交换时会出现以下错误:

ORA-14097: column type or size mismatch in ALTER TABLE EXCHANGE PARTITION



创建两个分别对应分区的基表:
SQL> create table dba_p1 as select employee_id,salary from hr.employees  
  2  where salary < 8000;


SQL> create table dba_p2 as select employee_id,salary from hr.employees
  2  where salary > 8000 and salary < 30000;

将两个基表与两个分区进行交换:

SQL> alter table p_dba exchange partition p1 with table dba_p1;

SQL> alter table p_dba exchange partition p2 with table dba_p2;


SQL> select count(*) from p_dba partition(p1);


  COUNT(*)
----------
        71


SQL> select count(*) from dba_p2;


  COUNT(*)
----------
         0


可以看到数据从基表交换到了分区中



1.3.3 分区表的其他操作

1.增加新的分区

分两种情况:第一种是原分区的边界是maxvalue或者default。这种情况我们需要把边界分区drop掉,在添加新的分区。第二种是没有边界分区的,直接添加就行了。


对于局部的索引,oracle会自动增加一个局部分区索引。


SQL> select  table_name,partition_name  from  user_tab_partitions 
  2  WHERE table_name='P_DBA';


TABLE_NAME                     PARTITION_NAME
------------------------------ ------------------------------
P_DBA                          P1
P_DBA                          P2


SQL> alter table p_dba add partition p3 values less than (34000);


SQL> select  table_name,partition_name  from  user_tab_partitions 
  2  WHERE table_name='P_DBA';


TABLE_NAME                     PARTITION_NAME
------------------------------ ------------------------------
P_DBA                          P1
P_DBA                          P2
P_DBA                          P3


2.split 分区拆分

分区表会自动维护局部分区索引。全局索引会失效,需要进行 rebuild。

3.合并分区 merge

相邻的分区可以 merge 为一个分区,新分区的下边界为原来边界值较低的分区,上边界为原来边界值较高的分区, 原先的局部索引相应也会合并,全局索引
会失效,需要 rebuild。


4.移动分区

SQL> alter table p_dba move partition p2 tablespace users;

分区移动会自动维护局部分区索引,oracle 不会自动维护全局索引,所
以需要我们重新 rebuild 分区索引,具体需要 rebuild 哪些索引,可以通过
dba_part_indexes,dba_ind_partitions 去判断


5.TRUNCATE 分区


6.drop分区






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

huangliang0703

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值