交换分区提供了分区与表之间直接交换数据方式
由于交换分区号称只是修改字典,几乎没有IO所以效率非常高
交换分区可以在分区表和非分区表之间直接交换数据(分区表之间交换数据没有查到可以直接交换数据的方法,可以通过中间表进行)
另外,分区表与非分区表之间交换数据前提是两个表的字段要一致;两个表的数据要全部满足对方约束,否则失败
当然也可以不验证数据添加without validation,但添加without validation会使查询数据不准确
1、非分区表数据不满足分区表交换分区的限制
创建分区表
create table test001 (id number,name varchar2(50))
partition by range(id)(
partition test_p1 values less than (10) ,
partition test_p2 values less than (20) ,
partition test_p3 values less than (30) ,
partition test_pmax values less than (maxvalue)
);
插入数据
insert into test001 values (11,'a');
insert into test001 values (12,'b');
insert into test001 values (13,'c');
查看数据插入情况
select * from test001 partition(test_p2);
创建非分区表
CREATE TABLE test002 AS SELECT * FROM test001 WHERE 1=3;
插入非分区表数据
insert into test002 values (23,'c');
交换数据
alter table test001 exchange partition test_p2 with table test002;
报ORA-14099错误
原因是test002数据不符合test001 分区test_p2的条件
2、不验证数据导入,导致查询不准确
alter table test001 exchange partition test_p2 with table test002 WITHOUT Validation;
查询test001有id为23记录
SELECT * FROM test001
但添加条件后查不到
SELECT * FROM test001 where id>20;
因为id>20是要到test_p3去找的数据,但test_p3显然没有数据
所以不建议使用without validation
3、字段不一致添加without validation也失败
ALTER TABLE test002 ADD cc INT;
TRUNCATE TABLE test002;
alter table test001 exchange partition test_p2 with table test002 WITHOUT Validation;
ORA-14096字段数不一致
4、显然两个分区表之间是可以通过非分区表为中间表进行
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/14888950/viewspace-1408767/
,如需转载,请注明出处,否则将追究法律责任。