Oracle 分区交换-归档数据

2014-11-24 17:57:36 · 作者: · 浏览: 0

1. 创建分区表t1,假设有2个分区,P1,P2.
2. 创建基表t11存放P1规则的数据。
3. 创建基表t12 存放P2规则的数据。
4. 用基表t11和分区表T1的P1分区交换。 把表t11的数据放到到P1分区
5. 用基表t12 和分区表T1p2 分区交换。 把表t12的数据存放到P2分区。


----1.未分区表和分区表中一个分区交换


create table t1
(
sid int not null primary key,
sname varchar2(50)
)
PARTITION BY range(sid)
( PARTITION p1 VALUES LESS THAN (5000) tablespace test,
PARTITION p2 VALUES LESS THAN (10000) tablespace test,
PARTITION p3 VALUES LESS THAN (maxvalue) tablespace test
) tablespace test;



SQL> select count(*) from t1;


COUNT(*)
----------
0




create table t11
(
sid int not null primary key,
sname varchar2(50)
) tablespace test;



create table t12
(
sid int not null primary key,
sname varchar2(50)
) tablespace test;



create table t13
(
sid int not null primary key,
sname varchar2(50)
) tablespace test;


--循环导入数据
declare
maxrecords constant int:=4999;
i int :=1;
begin
for i in 1..maxrecords loop
insert into t11 values(i,'ocpyang');
end loop;
dbms_output.put_line(' 成功录入数据! ');
commit;
end;
/



declare
maxrecords constant int:=9999;
i int :=5000;
begin
for i in 5000..maxrecords loop
insert into t12 values(i,'ocpyang');
end loop;
dbms_output.put_line(' 成功录入数据! ');
commit;
end;
/




declare
maxrecords constant int:=70000;
i int :=10000;
begin
for i in 10000..maxrecords loop
insert into t13 values(i,'ocpyang');
end loop;
dbms_output.put_line(' 成功录入数据! ');
commit;
end;
/


commit;




SQL> select count(*) from t11;


COUNT(*)
----------
4999


SQL> select count(*) from t12;


COUNT(*)
----------
5000


SQL> select count(*) from t13;


COUNT(*)
----------
60001




--交换分区



alter table t1 exchange partition p1 with table t11;



SQL> select count(*) from t11; --基表t11数据为0


COUNT(*)
----------
0


SQL> select count(*) from t1 partition (p1); --分区表的P1分区数据位基表t11的数据


COUNT(*)
----------
4999




alter table t1 exchange partition p2 with table t12;


select count(*) from t12;


select count(*) from t1 partition (p2);




alter table t1 exchange partition p3 with table t13;


select count(*) from t13;


select count(*) from t1 partition (p3);