ITPub博客

首页 > 数据库 > Oracle > 普通表转分区表实验记录

普通表转分区表实验记录

原创 Oracle 作者:studywell 时间:2017-12-20 21:36:32 0 删除 编辑
总结:
       转换要求:普通表和分区表的列顺序、字段长度必须一致,否则转换报错ORA-14097;

普通表不能转换到组合分区中;

分区表无数据,普通表转换后普通表中无数据,数据全部转移到分区表中;

再次执行该命令,则将分区中数据转移回普通表中;

普通表和分区表都有数据,执行转换命令后,两表数据互换;


实验记录:

--测试普通分区转换为组合分区中一部分;


---创建范围-哈希组合分区
CREATE TABLE range_hash_example(
 range_column_key int,
 hash_column_key INT,
 DATA VARCHAR2(20)
)
PARTITION BY RANGE(range_column_key)
SUBPARTITION BY HASH(hash_column_key) SUBPARTITIONS 2
(
PARTITION part_1 VALUES LESS THAN (10)
(SUBPARTITION part_1_sub_1,
SUBPARTITION part_1_sub_2,
SUBPARTITION part_1_sub_3
),
PARTITION part_2 VALUES LESS THAN (20)
(SUBPARTITION part_2_sub_1,
SUBPARTITION part_2_sub_2
)
);
select * from range_hash_example;
--drop table  range_hash_example ;
--插入数据
insert into range_hash_example values (1,11,'111');
insert into range_hash_example values (2,12,'112');
insert into range_hash_example values (3,13,'113');
insert into range_hash_example values (4,14,'114');
insert into range_hash_example values (5,15,'111');
insert into range_hash_example values (6,16,'112');
insert into range_hash_example values (7,17,'113');
insert into range_hash_example values (8,18,'114');
insert into range_hash_example values (11,21,'2021');
insert into range_hash_example values (12,22,'2022');
insert into range_hash_example values (13,23,'2023');
insert into range_hash_example values (14,24,'2024');
commit;
--查看插入情况
select * from range_hash_example;
select * from range_hash_example partition (part_1);
select * from range_hash_example  subpartition(part_1_sub_1);
select * from range_hash_example  subpartition(part_1_sub_2);
select * from range_hash_example  subpartition(part_1_sub_3);




--创建普通表
CREATE TABLE rangep1(
 range_column_key int,
 hash_column_key INT,
 DATA VARCHAR2(20)
);


---插入数据
insert into rangep1 values (15,21,'2021');
insert into rangep1 values (16,22,'2022');
insert into rangep1 values (17,23,'2023');
insert into rangep1 values (18,24,'2024');


select * from rangep1;


---转换普通表为分区:
alter table range_hash_example exchange partition  part_2 with table rangep1;
报错;
ORA-14291 不能用非分区表exchange分区表;


--truncate table  rangep1;
--清除数据依然报错;


---创建范围分区
CREATE TABLE range_example(
 range_column_key int,
 hash_column_key INT,
 DATA VARCHAR2(20))
PARTITION BY RANGE(range_column_key)
(PARTITION part_1 VALUES LESS THAN (10),
PARTITION part_2 VALUES LESS THAN (20));


select * from range_example;
--drop table range_example;




---插入数据
insert into rangep1 values (1,21,'2021');
insert into rangep1 values (1,22,'2022');
insert into rangep1 values (17,23,'2023');
insert into rangep1 values (18,24,'2024');
commit;
select * from rangep1;
---转换普通表为分区:
alter table range_example exchange partition  part_2 with table rangep1;
---转换过去,没数据了;
select * from rangep1;
select * from range_example;




---插入数据
insert into rangep1 values (1,21,'2021');
insert into rangep1 values (1,22,'2022');
---再转换一次;
alter table range_example exchange partition  part_1 with table rangep1;
select * from rangep1;
select * from range_example;
---再转换一次,part_1分区数据又回来了;
alter table range_example exchange partition  part_1 with table rangep1;
select * from rangep1;
select * from range_example;






---插入数据,
insert into rangep1 values (2,21,'2021');
insert into rangep1 values (2,22,'2022');
---此时普通表和分区表都有数据;
select * from rangep1;
select * from range_example;
---再转换一次;
alter table range_example exchange partition  part_1 with table rangep1;
---此时普通表和分区表中的数据作了交换;;
select * from rangep1;
select * from range_example;


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29519108/viewspace-2148989/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: become user 权限
下一篇: 表空间容量
请登录后发表评论 登录
全部评论

注册时间:2014-03-04

  • 博文量
    307
  • 访问量
    535388