逻辑导入导出方式
创建测试表:
create table t4 (id int);
begin
for i in 1..100000 loop
insert into t4 values (i);
commit;
end loop;
end;
导出数据:
./dexp SYSDBA/SYSDBA@LOCALHOST:5236 file=/data/t4.dmp tables=t4
删除非分区表:
SQL> drop table t4;
创建分区表:
create table t4 (id int)
partition by range (id)
interval(20000)
(partition p1 values less than (20000),
partition p2 values less than (40000)
);
5.导入数据:
./dimp SYSDBA/SYSDBA@LOCALHOST:5236 file=/data/t4.dmp tables=t4 ignore=y(忽略创建错误)
支持间隔分区
分区交换方式
构造数据
create table t4 (id int);
begin
for i in 1..100000 loop
insert into t4 values (i);
commit;
end loop;
end;
创建普通分区表
create table t5 (id int)
partition by range (id)
(
partition p1 values less than (20000),
partition p2 values less than (40000),
partition pN values less than (maxvalue)
);
将非分区表test的数据交换到test_fenqu表的p4分区,执行之前需要取消主键,删除索引,交换完成后进行重建。
alter table t5 exchange partition pN with table t4;
使用如下语句查询test_fenqu分区表的数据分布:
select 'p1' partition_name, count(*) num from t5 partition(p1)
union all
select 'p2', count(*) from t5 partition(p2)
union all
select 'p3', count(*) from t5 partition(pN);
普通非分区表的数据交换到分区表的某个分区后,数据并不进行校验,也就是说不管是否满足该分区的范围,数据都会进入该分区。
使用split将分区拆分:
上述数据交换后,所有数据都在一个分区,完全不符合我们将数据放入分区表的初衷,此时可以使用分区拆分,分区拆分会对分区中的数据进行重组,拆分后数据会重新按照分区范围分布。执行以下命令进行分区拆分(仅范围分区支持分区拆分):
alter table t5 split partition pN at (100000) into (partition p3, partition pmax);
分区拆分后,使用如下语句查询t_partitiontab分区表的数据分布:
select 'p1' partition_name, count(*) num from t5 partition(p1)
union all
select 'p2', count(*) from t5 partition(p2)
union all
select 'p3', count(*) from t5 partition(p3)
union all
select 'p4', count(*) from t5 partition(pmax);
使用分区交换exchange需注意:
分区交换仅支持范围和列表分区,不支持HASH分区。
分区交换可以将非分区表的数据交换到分区表,也可以将分区表的数据交换到非分区表,本质上是源表和目标表数据的互换。
分区交换要求分区表与交换表具有相同的结构(相同的表类型、相同的BRANCH选项、相同的列结构、相同的索引、相同的分布方式),否则会报“[-7000]:交换对象不匹配”的错误。
不支持含全局索引的分区表与普通表进行交换分区操作。
分区交换时不会进行数据校验,如果交换表的数据不符合分区范围,数据仍然会进入该分区。此时如果是范围分区可以使用split拆分分区,系统会自动对数据进行重组。
在生产环境中,为保证数据安全,建议对源表的数据备份后再做分区交换。
使用dts迁移工具进行迁移
打开迁移dts迁移工具
选择DM-DM
指定源端和目的端:
点击完成,开始迁移
本文总结:
目前测试dts工具将普通表迁移至分区表耗时最长,逻辑导入导出第二,分区交换因为没有io操作,所以最快
dts分区转换:支持所有类型的分区
逻辑导入导出分区转换:支持所有类型的分区操作
分区交换:间隔分区使用split拆分时,会提示无法按指定的上限来分割分区,目前来看范围分区可以正常使用分区交换方式