如何将oralce普通表转换为分区表


本文档 ID 1985005.1 

如何将oralce普通表转换为分区表,此前面试被问到过,虽然知道在线重定义,个人觉得很简单,查查文档做个试验就差不多了,但自己没亲自操作过有点心虚;这次抽点时间好好研究一下!

可以任选如下四种方法的一种来对非分区表进行分区:
A) 通过 expdp/impdp 方法
B) 通过 Insert with a subquery 方法
C) 通过 Partition Exchange 方法
D) 通过 DBMS_REDEFINITION,(在线重定义)法


以上四种方法都会从一个已经存在的非分区表创建出一个分区表。管我们已经对这四种方法的维护时间预期做了倒序排列,但实际维护时间针对不同情况有所不同。


方法一:通过 expdp/impdp 方法

1) expdp非分区表:
[oracle@node3 node3]$ expdp scott/tiger  tables=numbers dumpfile=number.dmp

2) Drop 掉该非分区表:
SQL> drop table numbers;

3) 重新创建该表成为一个分区表:
create table numbers (
qty number(3),
name varchar2(15)
)
partition by range (qty)(
partition p1 values less than (200),
partition p2 values less than (400),
partition p3 values less than (600),
partition p4 values less than (maxvalue) ) ;

4) 通过 impdp 的 table_exists_action 方式来还原备份的数据:

[oracle@node3 node3]$ impdp scott/tiger file=number.dmp table_exists_action=append 

而使用impdp完成数据库导入时,若表已经存在,有四种的处理方式

1)  skip    :默认操作,如果表存在,则跳过
2)  replace :先drop表,然后创建表,最后插入数据
3)  append  :在原来数据的基础上增加数据
4)  truncate:先truncate,然后再插入数据


方法二: Insert with a subquery

1 ) 创建一个分区表:
create table numbers_part (
qty number(3),
name varchar2(15)
)
partition by range (qty)(
partition p1 values less than (200),
partition p2 values less than (400),
partition p3 values less than (600),
partition p4 values less than (maxvalue) ) ;


2) 将原来非分区表中的数据通过子查询 i nsert 到新创建的分区表中:
SQL> insert into numbers_part (qty, name) select * from numbers;

3) 如果您想让新建的分区表与原表名相同,那么drop 掉原来的非分区表然后重命名新表:
SQL> drop table numbers;
SQL> alter table numbers_part rename to numbers;


您可以通过 direct path insert 和利用并行来改善 in
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值