您的位置:首页 > 其它

普通表到分区表转换

2016-06-25 20:28 295 查看
A) 通过 Export/import 方法

B) 通过 Insert with a subquery 方法

C) 通过 Partition Exchange 方法

D) 通过 DBMS_REDEFINITION 方法


比如把test用户下的普通表t1转换成分区表


方法A.

步骤一: $exp test/a file=/backup/test_t1.dmp tables=t1

步骤二:SQL>drop table t1


步骤三:SQL>create table t1(a1 number,a2 varchar2(20)) partition by range (a1)(

partition part1 values less than (500000),

partition part2 values less than (maxvalue)

)


步骤四:$imp test/a file=/backup/test_t1.dmp ignore=y

方法B.

步骤一:


[b]select NUM_ROWS,blocks,table_name,tablespace_name from user_tables where table_name='T1';

10000000         --一百万行

SELECT * FROM user_indexes where table_name='T1'; --查看表上的索引

select * from user_constraints where table_name='T1'; --约束

select * from user_triggers where table_name='T1'; --触发器//这个可以忽略
[/b]



步骤二:[b]SQL>create table t1_temp(a1 number,a2 varchar2(20)) partition by range (a1)(

partition part1 values less than (500000),

partition part2 values less than (maxvalue)

)

[/b]

步骤三:

alter table [b][b]t1_temp[/b] nologging;    --设置这主要是为了加快插入数据
[/b]

[b]rename t1 to old_t1;            --修改老表的名称
[/b]

alter session enable parallel dml;  --把session改为并行,[b][b]加快插入[/b][/b]

步骤四:


explain plan for insert /*+ append parallel(p,5) */ into  [b][b]t1_temp[/b] p select /*+ parallel(n,10) */ * from[b]old_t1[/b] n;[/b]

insert /*+ append parallel(p,5) */ into [b][b][b]t1_temp[/b][/b]p select /*+ parallel(n,10) */ * from
[b][b]old_t1
[/b][/b]n; --开始插入数据[/b]

步骤五:创建约束和索引

alter index PK_T rename to PK_T_bak;

alter table T_old rename constraint PK_T to PK_T_bak;

create unique index idx_t on part_t(a1) local tablespace DBS nologging parallel 10;


步骤六:

alter table part_t logging noparallel;

alter index idx_t logging noparallel;


alter table t1+temp rename to t1; [b]--修改成老表的名称[/b]



方法c.

SQL> create table t1_part(a1 number,a2 varchar2(20)) partition by range (a1)(

partition part1 values less than (500000),

partition part2 values less than (maxvalue)

)

Table created.

SQL> CREATE TABLE exchtab1 as SELECT * FROM t1 WHERE a1<500000;

Table created.

SQL> CREATE TABLE exchtab2 as SELECT * FROM t1 WHERE a1 >500000;

Table created.

SQL> alter table t1_part exchange partition part1 with table exchtab1;

Table altered.

SQL> alter table t1_part exchange partition part2 with table exchtab2;

Table altered.

给新表创建约束和索引(同上)


方法D. 在线修改


USING DBMS_REDEFINITION

MOS     文档 472449.1
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: