Oracle分区交换
从Oracle8开始,提供了从分区交换的功能,如一个分区或子分区与一个非分区表交换、一个hash分区与另一个表的hash子分区交换等等,详细的交换方式可以参考官方文档。
基本语法:ALTER TABLE...EXCHANGE PARTITION
实验环境:11.2.0.4
zx@ORCL>select * from v$version;BANNER
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
PL/SQL Release 11.2.0.4.0 - Production
CORE 11.2.0.4.0 Production
TNS for Linux: Version 11.2.0.4.0 - Production
NLSRTL Version 11.2.0.4.0 - Production
一、测试分区交换
创建测试表
--分区表
zx@ORCL>create table t12 ( id number(2),3 name varchar2(15))4 tablespace tt5 partition by range (id)6 (partition p1 values less than (10),7 partition p2 values less than (20),8 partition p3 values less than (30));Table created.
--非分区表
zx@ORCL>create table t2 (id number(2), name varchar2(15)) tablespace users;Table created.--插入测试数据
zx@ORCL>insert into t1 values (1, '1');1 row created.zx@ORCL>insert into t1 values (11, '11');1 row created.zx@ORCL>insert into t1 values (21, '21');1 row created.zx@ORCL>insert into t2 values (2, '2');1 row created.zx@ORCL>commit;Commit complete.zx@ORCL>select * from t1;ID NAME
---------- ---------------------------------------------1 111 1121 21zx@ORCL>select * from t2;ID NAME
---------- ---------------------------------------------2 2
--查看表存储表空间
--t2在USERS表空间,t1各个分区都在TT表空间
zx@ORCL>col segment_name for a20
zx@ORCL>col partition_name for a15
zx@ORCL>col tablespace_name for a15
zx@ORCL>select segment_name,partition_name,tablespace_name from dba_segments where segment_name in ('T1','T2');SEGMENT_NAME PARTITION_NAME TABLESPACE_NAME
-------------------- --------------- ---------------
T2 USERS
T1 P3 TT
T1 P2 TT
T1 P1 TT
--查看各表的extent信息
zx@ORCL>select SEGMENT_NAME,BLOCK_ID,BLOCKS,TABLESPACE_NAME from dba_extents where segment_name='T2';SEGMENT_NAME BLOCK_ID BLOCKS TABLESPACE_NAME
-------------------- ---------- ---------- ---------------
T2 192 8 USERSzx@ORCL>select SEGMENT_NAME,PARTITION_NAME,BLOCK_ID,BLOCKS,TABLESPACE_NAME from dba_extents where segment_name='T1';SEGMENT_NAME PARTITION_NAME BLOCK_ID BLOCKS TABLESPACE_NAME
-------------------- --------------- ---------- ---------- ---------------
T1 P2 21376 1024 TT
T1 P3 22400 1024 TT
T1 P1 20352 1024 TT
t1分区p1与t2表交换分区
--分区
zx@ORCL>alter table t1 exchange partition p1 with table t2;Table altered.zx@ORCL>select * from t2;ID NAME
---------- ---------------------------------------------1 1zx@ORCL>select * from t1;ID NAME
---------- ---------------------------------------------2 211 1121 21
可以看到p1分区里的数据交换到了t2表里,而t2表里里的数据也存储到了t1表中。再次查看各表所在的表空间和extent
--查看表空间
zx@ORCL>select segment_name,partition_name,tablespace_name from dba_segments where segment_name in ('T1','T2');SEGMENT_NAME PARTITION_NAME TABLESPACE_NAME
-------------------- --------------- ---------------
T2 TT
T1 P3 TT
T1 P2 TT
T1 P1 USERS
--查看extent
zx@ORCL>select SEGMENT_NAME,BLOCK_ID,BLOCKS,TABLESPACE_NAME from dba_extents where segment_name='T2';SEGMENT_NAME BLOCK_ID BLOCKS TABLESPACE_NAME
-------------------- ---------- ---------- ---------------
T2 20352 1024 TTzx@ORCL>select SEGMENT_NAME,PARTITION_NAME,BLOCK_ID,BLOCKS,TABLESPACE_NAME from dba_extents where segment_name='T1';SEGMENT_NAME PARTITION_NAME BLOCK_ID BLOCKS TABLESPACE_NAME
-------------------- --------------- ---------- ---------- ---------------
T1 P1 192 8 USERS
T1 P2 21376 1024 TT
T1 P3 22400 1024 TT
从结果看到T2已经到了TT表空间,而T1的P1分区移动到了USERS表空间,而且P1分区与T2表的extent也做了交换,可以推断实际表里的数据没有移动位置,只是把数据字典里的相关信息做了更换。
二、再看看交换分区对于分区表的索引的影响
在分区表中创建索引
--全局索引
zx@ORCL>create index idx_t1_id on t1(id) ;Index created.
--分区索引
zx@ORCL>create index idx_t1_name on t1(name) local;Index created.zx@ORCL>select index_name,status from user_indexes where index_name like 'IDX_T1%';INDEX_NAME STATUS
------------------------------------------------------------------------------------------ ------------------------
IDX_T1_ID VALID
IDX_T1_NAME N/Azx@ORCL>select index_name,partition_name,status from user_ind_partitions where index_name like 'IDX_T1%';INDEX_NAME PARTITION_NAME STATUS
------------------------------------------------------------------------------------------ --------------- ------------------------
IDX_T1_NAME P1 USABLE
IDX_T1_NAME P2 USABLE
IDX_T1_NAME P3 USABLE
交换分区查看是否对索引有影响
zx@ORCL>alter table t1 exchange partition p1 with table t2;Table altered.zx@ORCL>select index_name,status from user_indexes where index_name like 'IDX_T1%';INDEX_NAME STATUS
------------------------------------------------------------------------------------------ ------------------------
IDX_T1_NAME N/A
IDX_T1_ID UNUSABLEzx@ORCL>select index_name,partition_name,status from user_ind_partitions where index_name like 'IDX_T1%';INDEX_NAME PARTITION_NAME STATUS
------------------------------------------------------------------------------------------ --------------- ------------------------
IDX_T1_NAME P1 UNUSABLE
IDX_T1_NAME P2 USABLE
IDX_T1_NAME P3 USABLE
看到全局索引IDX_T1_ID失效了,分区P1对应的分区索引也失效了,但其他分区的分区没有受到影响
交换分区时加入 UPDATE INDEXES子句
zx@ORCL>alter index idx_t1_id rebuild;Index altered.zx@ORCL>alter index idx_t1_name rebuild partition p1;Index altered.zx@ORCL>select index_name,status from user_indexes where index_name like 'IDX_T1%';INDEX_NAME STATUS
------------------------------------------------------------------------------------------ ------------------------
IDX_T1_NAME N/A
IDX_T1_ID VALIDzx@ORCL>select index_name,partition_name,status from user_ind_partitions where index_name like 'IDX_T1%';INDEX_NAME PARTITION_NAME STATUS
------------------------------------------------------------------------------------------ --------------- ------------------------
IDX_T1_NAME P1 USABLE
IDX_T1_NAME P2 USABLE
IDX_T1_NAME P3 USABLEzx@ORCL>alter table t1 exchange partition p1 with table t2 update indexes ;Table altered.zx@ORCL>select index_name,status from user_indexes where index_name like 'IDX_T1%';INDEX_NAME STATUS
------------------------------------------------------------------------------------------ ------------------------
IDX_T1_NAME N/A
IDX_T1_ID VALIDzx@ORCL>select index_name,partition_name,status from user_ind_partitions where index_name like 'IDX_T1%';INDEX_NAME PARTITION_NAME STATUS
------------------------------------------------------------------------------------------ --------------- ------------------------
IDX_T1_NAME P1 UNUSABLE
IDX_T1_NAME P2 USABLE
IDX_T1_NAME P3 USABLE
可以看到全局索引没有受影响,但是分区索引仍然失效。
更多信息参考官方文档:http://docs.oracle.com/cd/E11882_01/server.112/e25523/part_admin002.htm#i1107555
转载于:https://blog.51cto.com/hbxztc/1892937
Oracle分区交换相关推荐
- oracle分区交换有啥好处,分区交换的速度为什么快?
Oracle的分区交换功能,用来实现对数据"滑动窗口"操作,就是可以把数据从分区表中指定分区移出到一个表,或把一个表的数据移入到指定的分区中.[@more@] 分区交换的速度是非常 ...
- oracle交换分区转移数据,oracle 分区交换-归档数据
交换分区的操作步骤如下: 1. 创建分区表t1,假设有2个分区,P1,P2. 2. 创建基表t11存放P1规则的数据. 3. 创建基表t12 存放P2规则的数据. 4. 用基表t11和分区表T1的P1 ...
- oracle分区交换速度,oracle交换分区对数据的加载提速案例
author:skate time:2012/07/16 oracle交换分区对数据的加载提速案例 环境: os:linux db:oracle10g 其中一个库的数据加载非常慢,如何能提高数据的加载 ...
- oracle分区exchange,oracle 分区表exchange原理
oracle分区的exchange操作非常快,那原理是什么呢?下面我们来做个实验: SQL> create table test (id number(3)); 表已创建. SQL> in ...
- Oracle分区技术特性详细解读
老张拉呱:thomas zhang,甲骨文云平台事业部资深技术顾问,2008年加入甲骨文公司数据库咨询部门,10+年甲骨文解决方案咨询支持经验,资深系统工程师.Oracle OCM认证专家,具有丰富的 ...
- Oracle分区(Partition)
项目中用到的partition,总结整理一下相关知识.(网上采集,如有侵权,请及时联系.) 一.Oracle分区简介 ORACLE的分区是一种处理超大型表.索引等的技术.分区是一种"分而 ...
- oracle分区注意点,ORACLE分区表梳理系列(二)- 分区表日常维护及注意事项
http://www.cnblogs.com/yumiko/p/6163523.html 前言: 本文着重总结分区表的日常维护操作以及相应的注意事项. 本文涉及的日常维护内容包括: 增加分区(add) ...
- linux 根目录分配多少好,Linux下硬盘怎么分区才合适:根分区(/)交换分区(/swap)和/boot分区需要多大...
Linux下硬盘怎么分区才合适:根分区(/)交换分区(/swap)和/boot分区需要多大 : 在对硬盘进行分区前,应该先弄清楚计算机担负的工作及硬盘的容量有多大,还要考虑到以下几个问题. 第一点也是 ...
- 2如何看表分区字段_技术分享|Oracle分区技术的实现总结
郝秉睿 青岛科技研发中心 相信对于分区技术,大家一定都有所了解.但是你知道Oracle一共有多少种分区技术么?它们的适用范围和规范是怎样?今天让我们一起来看一看Oracle分区技术的魅力. 在大型的数 ...
最新文章
- IO对象流(序列化和反序列化)
- 数据结构 2-3-3 循环链表
- 你不能访问此文件夹,因为你组织的安全策略阻止了未经身份验证的来宾访问
- iOS隐私权限的设置
- ubuntu16.04 kinect2 驱动和ROS驱动
- UVa 1586 Molar mass(模拟)
- 面积二次矩second moment of area 极惯性矩polar moment of area 转动惯量moment of inertia面积一次矩first moment of area
- 西部学刊杂志西部学刊杂志社西部学刊编辑部2022年第22期目录
- 原生js快速查找指定元素
- H5 前端模板 JS 用法
- 上职高学计算机可以考师范大学吗,职业高中也可以考大学,你知道吗?
- 刘长炯 beansoft(myeclipse_java) 一个不错的作者
- python中应对各种机制
- php 判断是否微信访问,PHP判断是否微信访问的方法示例
- 如何删除pagefile.sys
- 【阿里云高校计划】视觉AI-身份证识别系统搭建
- 人机交互系统(2.1)——深度学习分布式计算框架
- 2048小游戏项目开发代码
- 2005年九大受宠技术:HSDPA
- 信息学奥赛一本通:1162:字符串逆序
热门文章
- cesium 加载Googl式的切片
- python 传奇服务端_传奇游戏服务器源码学习
- 苹果怎么删除通讯录联系人_苹果手机通讯录怎么恢复?这才是正确的打开方式!...
- 计算机图形学算法详解,计算机图形学裁剪算法详解
- sql 查询关联字段 最好取别名 不然会被第一个覆盖
- matlab求数的因子,matlab中因子分析的函数factoran如何使用??
- html代码怎么出歌词,html中的歌词翻译
- sap模块介绍_一分钟掌握SAP小知识-系统基本操作
- linux如何获取raw中的文件路径,如何使用Linux获得Touchscreen Rawdata的坐标
- 设计模式-软件设计七大原则