Home  >  Article  >  Database  >  Oracle 分区交换-归档数据

Oracle 分区交换-归档数据

WBOY
WBOYOriginal
2016-06-07 17:29:061071browse

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

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Previous article:Solaris安装Oracle的BugNext article:CactiEZ备份和恢复