非分区表转换为分区表的三种方式

创建测试环境

--创建非分区表
CREATE TABLE T_NOPARTITIONTAB( ID INT, NAME VARCHAR(20));
--插入测试数据
begin
  for i in 1..1000 loop
    insert into t_nopartitiontab(id, name) 
    values(i, DBMS_RANDOM.RANDOM_STRING('U',5)||':'|| lpad(i,4, '0'));
  end loop;
end;
commit;
--查看数据量
SELECT COUNT(*) FROM SYSDBA.T_NOPARTITIONTAB;

查看是否插入成功

--创建分区表
create table t_partitiontab (
  id      int,
  name   varchar(20)
) partition by range(id) ( 
  partition p1 values less than (200),
  partition p2 values less than (400),
  partition p3 values less than (600),
  partition p4 values less than (800),
  partition pN values less than (maxvalue));

方法一、直接插入数据

INSERT INTO T_PARTITIONTAB SELECT * FROM T_NOPARTITIONTAB;
COMMIT;

查看插入结果,插入成功,且分区成功
在这里插入图片描述

方法二、导入导出的方式

逻辑导出非分区表

[dmdba@hzq bin]$ ./dexp sysdba/SYSDBA:5555  FILE=/home/dmdba/imp_exp.dmp TABLES="SYSDBA"."T_NOPARTITIONTAB" 

在这里插入图片描述

另一个实例下创建同名的表T_NOPARTITIONTAB

create table T_NOPARTITIONTAB (
  id      int,
  name   varchar(20)
) partition by range(id) ( 
  partition p1 values less than (200),
  partition p2 values less than (400),
  partition p3 values less than (600),
  partition p4 values less than (800),
  partition pN values less than (maxvalue));

逻辑导入

[dmdba@hzq bin]$ ./dimp sysdba/SYSDBA@192.168.227.20:5555  FILE=/home/dmdba/imp_exp.dmp TABLES="SYSDBA"."T_NOPARTITIONTAB" ignore=y

在这里插入图片描述
导入成功,且成功分区
在这里插入图片描述

方法三、交换分区的方式

--创建分区表
create table t_partitiontab (
  id      int,
  name   varchar(20)
) partition by range(id) ( 
  partition p1 values less than (200),
  partition p2 values less than (400),
  partition p3 values less than (600),
  partition p4 values less than (800),
  partition pN values less than (maxvalue));

使用exchange交换分区

ALTER TABLE T_PARTITIONTAB EXCHANGE PARTITION PN WITH TABLE T_NOPARTITIONTAB;

查看数据情况
在这里插入图片描述
使用split将分区拆分

alter table t_partitiontab split partition pN at (1000) into (partition p5, partition pmax);

再用merge合并分区

alter table t_partitiontab merge partitions p5, pmax into partition pN;

查看数据情况
在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值