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

1. 创建分区表t1,假设有2个分区,P1,P2.

2. 创建基表t11存放P1规则的数据。

3. 创建基表t12 存放P2规则的数据。

4. 用基表t11和分区表T1的P1分区交换。 把表t11的数据放到到P1分区

5. 用基表t12 和分区表T1p2 分区交换。 把表t12的数据存放到P2分区。

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

createtablet1

(

sid intnotnullprimarykey,

sname  varchar2(50)

)

PARTITION BYrange(sid)

( PARTITION p1 VALUESLESS THAN (5000) tablespace test,

PARTITION p2 VALUESLESS THAN (10000) tablespace test,

PARTITION p3  VALUESLESS THAN (maxvalue) tablespace test

) tablespace test;

SQL> selectcount(*)fromt1;

COUNT(*)

----------

0

createtablet11

(

sid intnotnullprimarykey,

sname  varchar2(50)

) tablespace test;

createtablet12

(

sid intnotnullprimarykey,

sname  varchar2(50)

) tablespace test;

createtablet13

(

sid intnotnullprimarykey,

sname  varchar2(50)

) tablespace test;

--循环导入数据

declare

maxrecords constant int:=4999;

i int:=1;

begin

foriin1..maxrecords loop

insertintot11values(i,'ocpyang');

endloop;

dbms_output.put_line(' 成功录入数据! ');

commit;

end;

/

declare

maxrecords constant int:=9999;

i int:=5000;

begin

foriin5000..maxrecords loop

insertintot12values(i,'ocpyang');

endloop;

dbms_output.put_line(' 成功录入数据! ');

commit;

end;

/

declare

maxrecords constant int:=70000;

i int:=10000;

begin

foriin10000..maxrecords loop

insertintot13values(i,'ocpyang');

endloop;

dbms_output.put_line(' 成功录入数据! ');

commit;

end;

/

commit;

SQL> selectcount(*)fromt11;

COUNT(*)

----------

4999

SQL> selectcount(*)fromt12;

COUNT(*)

----------

5000

SQL> selectcount(*)fromt13;

COUNT(*)

----------

60001

--交换分区

altertablet1 exchange partition p1withtablet11;

SQL> selectcount(*)fromt11;--基表t11数据为0

COUNT(*)

----------

0

SQL> selectcount(*)fromt1 partition (p1);--分区表的P1分区数据位基表t11的数据

COUNT(*)

----------

4999

altertablet1 exchange partition p2withtablet12;

selectcount(*)fromt12;

selectcount(*)fromt1 partition (p2);

altertablet1 exchange partition p3withtablet13;

selectcount(*)fromt13;

selectcount(*)fromt1 partition (p3);

-----2.分区表和分区表交换

/*

EXCHANGE PARTITION WITHTABLE的方式不支持分区表与分区表的交换,只能通过中间表中转.

*/

--2.1源表

createtablespace jinrilog

datafile 'E:\APP\ADMINISTRATOR\ORADATA\ORCL\jinrilog01.DBF'

size200M  autoextendonnext20M maxsize unlimited

extent management localautoallocate

segment spacemanagement auto

;

createtablespace jinrilogindex

datafile 'E:\APP\ADMINISTRATOR\ORADATA\ORCL\jinrilogindex01.DBF'

size200M  autoextendonnext20M maxsize unlimited

extent management localautoallocate

segment spacemanagement auto

;

createtablet1

(

sid intnotnull,

sname  varchar2(50) notnull,

createtime datedefaultsysdatenotnull

)

PARTITION BYrange(createtime)

(

PARTITION p1 VALUESLESS THAN ('2013-06-01 00:00:00') tablespace jinrilog,

PARTITION p2 VALUESLESS THAN ('2013-07-01 00:00:00') tablespace jinrilog,

PARTITION p3 VALUESLESS THAN ('2013-08-01 00:00:00') tablespace jinrilog,

PARTITION p4  VALUESLESS THAN (maxvalue) tablespace jinrilog

) tablespace jinrilog;

createuniqueindexun_t1_01ont1(sid,createtime)

tablespace jinrilogindex

local;

altertablet1addconstraintpk_t1primarykey(sid,createtime);

createindexindex_t1_01

ont1 (snameasc)

tablespace jinrilogindex

local

(

partition index_sname_01 tablespace jinrilogindex,

partition index_sname_02 tablespace jinrilogindex,

partition index_sname_03 tablespace jinrilogindex,

partition index_sname_04 tablespace jinrilogindex

);

--循环导入数据

declare

maxrecords constant int:=1000;

i int:=1;

begin

foriin1..maxrecords loop

insertintot1values(i,'ocpyang','2013-06-11 00:00:00');

endloop;

dbms_output.put_line(' 成功录入数据! ');

commit;

end;

/

declare

maxrecords constant int:=2000;

i int:=1;

begin

foriin1..maxrecords loop

insertintot1values(i,'ocpyang','2013-07-11 00:00:00');

endloop;

dbms_output.put_line(' 成功录入数据! ');

commit;

end;

/

declare

maxrecords constant int:=3000;

i int:=1;

begin

foriin1..maxrecords loop

insertintot1values(i,'ocpyang','2013-08-11 00:00:00');

endloop;

dbms_output.put_line(' 成功录入数据! ');

commit;

end;

/

SQL> selectcount(*)fromt1;

COUNT(*)

----------

6000

SQL> selectcount(*)fromt1 partition(p1) ;

COUNT(*)

----------

0

SQL>

SQL> selectcount(*)fromt1 partition(p2) ;

COUNT(*)

----------

1000

SQL> selectcount(*)fromt1 partition(p3) ;

COUNT(*)

----------

2000

SQL> selectcount(*)fromt1 partition(p4) ;

COUNT(*)

----------

3000

---查看表数据分区情况

selectutp.table_name,utp.partition_name,utp.tablespace_namefromuser_tab_partitions utp

whereutp.table_name='T1';

--查看分区索引分布情况

col index_name fora20

col partition_name fora20

col tablespace_name fora20

col status fora10

selectindex_name,nullpartition_name,tablespace_name,status

fromuser_indexes

wheretable_name='T1'

andpartitioned='NO'

union

selectindex_name,partition_name,tablespace_name,statusfromuser_ind_partitions

whereindex_namein

(

selectindex_namefromuser_indexes

wheretable_name='T1'

)

orderby1,2,3

;

--2.2 和中间表交换数据

createtablet11

(

sid intnotnull,

sname  varchar2(50)  notnull,

createtime datedefaultsysdatenotnull

)tablespace jason;

selectcount(*)fromt11;

altertablet1 exchange partition p2withtablet11;

--查看无效的索引并重建

col index_name fora20

col partition_name fora20

col tablespace_name fora20

col status fora10

selectindex_name,nullpartition_name,status

fromuser_indexes

wheretable_name='T1'

andpartitioned='NO'

union

selectindex_name,partition_name,statusfromuser_ind_partitions

whereindex_namein

(

selectindex_namefromuser_indexes

wheretable_name='T1'

)

orderby1,2,3

;

INDEX_NAME                     PARTITION_NAME                 STATUS

------------------------------ ------------------------------ --------

INDEX_T1_01                    INDEX_SNAME_01                 USABLE

INDEX_T1_01                    INDEX_SNAME_02                 UNUSABLE

INDEX_T1_01                    INDEX_SNAME_03                 USABLE

INDEX_T1_01                    INDEX_SNAME_04                 USABLE

UN_T1_01                       P1                             USABLE

UN_T1_01                       P2                             UNUSABLE

UN_T1_01                       P3                             USABLE

UN_T1_01                       P4                             USABLE

alterindexINDEX_T1_01  rebuild partition INDEX_SNAME_02;

alterindexUN_T1_01  rebuild partition P2;

col index_name fora20

col partition_name fora20

col tablespace_name fora20

col status fora10

selectindex_name,nullpartition_name,status

fromuser_indexes

wheretable_name='T1'

andpartitioned='NO'

union

selectindex_name,partition_name,statusfromuser_ind_partitions

whereindex_namein

(

selectindex_namefromuser_indexes

wheretable_name='T1'

)

orderby1,2,3

;

INDEX_NAME                     PARTITION_NAME                 STATUS

------------------------------ ------------------------------ --------

INDEX_T1_01                    INDEX_SNAME_01                 USABLE

INDEX_T1_01                    INDEX_SNAME_02                 USABLE

INDEX_T1_01                    INDEX_SNAME_03                 USABLE

INDEX_T1_01                    INDEX_SNAME_04                 USABLE

UN_T1_01                       P1                             USABLE

UN_T1_01                       P2                             USABLE

UN_T1_01                       P3                             USABLE

UN_T1_01                       P4                             USABLE

selectcount(*)fromt1 partition (p2);

COUNT(*)

----------

0

selectcount(*)fromt11;

COUNT(*)

---------

1000

--确定数据是否已经切换到新的表空间

SELECTTABLESPACE_NAME

FROMUSER_TAB_PARTITIONS

WHERETABLE_NAME='T1'ANDPARTITION_NAME='P2';

TABLESPACE_NAME

------------------------------

JASON

---2.3中间表和归档表再次交换数据

createtablespace archive01

datafile 'E:\APP\ADMINISTRATOR\ORADATA\ORCL\archive01.DBF'

size200M  autoextendonnext20M maxsize unlimited

extent management localautoallocate

segment spacemanagement auto

;

createtablespace archive02

datafile 'E:\APP\ADMINISTRATOR\ORADATA\ORCL\archive02.DBF'

size200M  autoextendonnext20M maxsize unlimited

extent management localautoallocate

segment spacemanagement auto

;

createtablet2

(

sid intnotnull,

sname  varchar2(50)  notnull,

createtime datedefaultsysdatenotnull

)

PARTITION BYrange(createtime)

(

PARTITION p1 VALUESLESS THAN ('2013-06-01 00:00:00') tablespace archive01,

PARTITION p2 VALUESLESS THAN ('2013-07-01 00:00:00') tablespace archive01,

PARTITION p3 VALUESLESS THAN ('2013-08-01 00:00:00') tablespace archive01,

PARTITION p4  VALUESLESS THAN (maxvalue) tablespace archive01

) tablespace archive01;

createuniqueindexun_t2_01ont2(sid,createtime)

tablespace archive02

local;

altertablet2addconstraintpk_t2primarykey(sid,createtime);

selectup.table_name,up.partition_name,up.tablespace_namefromuser_tab_partitions up

whereup.table_name='T2';

--查看分区索引分布情况

col index_name fora20

col partition_name fora20

col tablespace_name fora20

col status fora10

selectindex_name,nullpartition_name,tablespace_name,status

fromuser_indexes

wheretable_name='T2'

andpartitioned='NO'

union

selectindex_name,partition_name,tablespace_name,statusfromuser_ind_partitions

whereindex_namein

(

selectindex_namefromuser_indexes

wheretable_name='T2'

)

orderby1,2,3

;

INDEX_NAME           PARTITION_NAME       TABLESPACE_NAME      STATUS

-------------------- -------------------- -------------------- ----------

UN_T2_01             P1                   ARCHIVE02            USABLE

UN_T2_01             P2                   ARCHIVE02            USABLE

UN_T2_01             P3                   ARCHIVE02            USABLE

UN_T2_01             P4                   ARCHIVE02            USABLE

selectcount(*)fromt2;

COUNT(*)

---------

0

--交换数据

altertablet2 exchange partition p2withtablet11 ;

selectcount(*)fromt2;

selectcount(*)fromt11;

oracle交换分区转移数据,oracle 分区交换-归档数据相关推荐

  1. linux+oracle磁盘空间,Linux下Oracle软件、数据文件等所在的磁盘分区空间不足的解决思路...

    虚拟机中的Oracle运行的久了,归档.数据文件不断增长,原来安装ORACLE的分区空间不足. 此时可以重新向虚拟机增加一块硬盘,将ORACLE的数据文件或归档的目录挂载到新增加的磁盘分区上. --我 ...

  2. 数据库-玩转数据-Oracle的表空间及表分区

    Oracle的常用知识中,表空间和分区表是一定要掌握的知识,这对Oracle DBA来说至关重要,对相应开发人员也需有所了解. 一.表空间及分区表的概念 表空间:是一个或多个数据文件的集合,所有的数据 ...

  3. Oracle数据库操作命令 导入导出数据 实用分区

    使用spool导出: 1).新建spool.sql文件 set colsep , set feedback off set heading off set trimout on spool D:\DB ...

  4. oracle表分区--亿级的数据在oracle表中存储,表分区的一个真实应用场景

    我从来没有操作处理过如此大量的真实数据. 我的一个任务,通过kafka流式处理消息框架 消费 整个城市 其中一种手机网络的信号接入信息. 千万级人口,只要有人使用手机网络,就会产生一条数据,可想而知, ...

  5. oracle分区注意点,ORACLE分区表梳理系列(二)- 分区表日常维护及注意事项

    http://www.cnblogs.com/yumiko/p/6163523.html 前言: 本文着重总结分区表的日常维护操作以及相应的注意事项. 本文涉及的日常维护内容包括: 增加分区(add) ...

  6. oracle三种分区的方式,Oracle 分区表 总结大全(3)

    (10) Horizontal sub setting of data cannot be performed during the redefinition. 在Oracle 10.2.0.4和11 ...

  7. 【Oracle】表级别分区操作对索引(本地分区索引,全局分区索引,非分区索引)的影响

    --参考自<Oracle索引技术> 先贴上结论吧: 下面对以上几种操作分别测试: 创建测试表及索引 --创建测试分区表 CREATE TABLE employees_parttest (e ...

  8. oracle表分区设计_Oracle数据库分区技术

    1.Oracle的分区技术基本原理: Oracle的分区技术的基本思路就是:分而治之. 2.分区概述 l 大数据对象(表.索引)被分成小的物理段 l 当分区表建立时,记录基于分区字段值被存储到相应分区 ...

  9. Oracle Partition维护之 - tabel / index分区命令

    今天在看CBO书的时候看到跨子分区表查询的执行计划时,对分区表的partition exchange loading,查询到此片博文,转来使用 分区表维护的常用命令: ALTER TABLE -- D ...

最新文章

  1. 交换机SPAN功能配置
  2. having 与where 的异同点
  3. jquery如何对多个对象绑定同一事件
  4. 人脸口罩识别——人脸添加口罩方法masked_faces
  5. js前台编码,asp.net后台解码 防止前台传值到后台为乱码
  6. 由我妈买菜,联想到了数据挖掘
  7. tls1.1 tls1.2_Java 8将默认使用传输级别安全性(TLS)1.2
  8. 【Pytorch神经网络实战案例】22 基于Cora数据集实现图注意力神经网络GAT的论文分类
  9. java 设备集成,java 集成 海康 SDK
  10. bootstrap学习5-栅格系统
  11. 办公室小野与爆米花视频身亡女孩家属和解:补偿金额保密
  12. 【以太坊源码】I.区块和交易,合约和虚拟机
  13. MSSQL手札四 MSSQL的函数
  14. 利用octave求逆矩阵
  15. java打开文件对话框
  16. 事实表和维度表的定义
  17. 3分钟搭建一个网站?腾讯云Serverless开发体验
  18. ARCGIS SERVER 授权
  19. 可怜的博主跟小豆人杠起来啦!Python制作的吃豆人小游戏,快来围观!!
  20. 励销云全流程智能销售解决方案,助力B2B企业高效增长

热门文章

  1. UOS 1050e ARM架构(linux)安装TP-LINK TL-WN823N免驱版无线网卡驱动
  2. 2019年国赛高教杯数学建模E题薄利多销分析解题全过程文档及程序
  3. 问到的知识(蓝色板儿砖的教学)
  4. python逐步回归筛选变量_统计学干货 I 逐步回归
  5. NAACL同传Workshop:千言 - 机器同传
  6. 2010年国家规划布局内重点软件企业认定名单
  7. 首发:唯品会RPC服务框架与容器化演进
  8. 多所院校已发布复试参考书目,可以开始准备复试了!
  9. 安徽科技学院 信网学院网络文化节 王鑫
  10. x3850X5如何添加CPU和QPI Wrap Card及两节点配置说明