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.
步骤一:
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'; --触发器//这个可以忽略
步骤二: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)
)
步骤三:
alter table t1_temp nologging; --设置这主要是为了加快插入数据
rename t1 to old_t1; --修改老表的名称
alter session enable parallel dml; --把session改为并行,加快插入
步骤四:
explain plan for insert /*+ append parallel(p,5) */ into t1_temp p select /*+ parallel(n,10) */ * fromold_t1 n;
insert /*+ append parallel(p,5) */ into t1_tempp select /*+ parallel(n,10) */ * from old_t1n; --开始插入数据
步骤五:创建约束和索引
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; --修改成老表的名称
方法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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)