首页  >  文章  >  数据库  >  Oracle 分区交换-归档数据

Oracle 分区交换-归档数据

WBOY
WBOY原创
2016-06-07 17:29:061069浏览

Oracle交换分区的操作步骤如下: 1. 创建分区表t1,假设有2个分区,P1,P2.2. 创建基表t11存放P1规则的数据。3. 创建基表t12 存

Oracle交换分区的操作步骤如下: 

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); 

linux

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn