要重新定义大量分区表。



首先看 SQL Reference 大致了解了 Oracle 的分区修改操作。Alter table 语句的alter_table_partitioning 子句可以分为以下几类:



全局:modify_table_default_attrs

分区:Modify, Move, Add, Coalesce, Drop, Rename, Truncate, Split, Merge, Exchange

子分区:Set Template, Modify, Move, Drop, Rename, Truncate, Split, Merge, Exchange



    Move: 将分区、子分区移动到新的表空间。

    Coalesce: 只适用于 hash 分区的表。作用是减少一个 hash 分区;方法是将最后一个分区的数据分布到前面的分区中,再删除此分区。

    Merge: 将两个分区、子分区合并为一个新分区,并删除两个旧分区。Merge 可以合并 List 和相邻的 Range 分区,只能合并属于同一分区的 List 子分区。

    Exchange: 交换表分区。



我要做的是添加 List 分区、List 子分区、修改子分区模板。



1. 添加 List 分区



如果表使用 List 分区,且创建了 Default 分区,则此表上无法执行 Add 分区操作,必须 Split 此表的 Default 分区。Alter table 语句提供了 split_table_partition 子句。此子句的功能是创建两个新分区(新建 Segment,可以指定新的物理属性),移动 partition 指定的分区的数据,满足 values 条件的放入 into 的第一个分区,其余的放入第二个分区,之后原分区。Oracle 将自动 Split Local Index,因此需要重建索引。



下面的语句为表 A_CHECKBILL_MONTH 添加了一个分区 P_6230000,将原有 P_OTHERS 分区中 COMPANY_ID = 6230000 的数据存储到新分区 P_6230000 ,剩余数据存储到 P_OTHERS。

alter table A_CHECKBILL_MONTH
split partition P_OTHERS values (6230000) into (
partition P_6230000,
partition P_OTHERS
)
update indexes;

2. 添加 List 子分区:



Oracle 没有提供子分区 Add 操作,因此添加子分区必须使用 Split 操作。Alter table 语句提供了 split_table_subpartition 子句,此子句的功能是将一个 List 子分区 Split 为两个。原理跟 List 分区类似。



下面的语句为表 A_BATCH_TURNDAYS 添加了一个子分区 P_6230000,将原有 P_OTHERS 分区中 COMPANY_ID = 6230000 的数据存储到新分区 P_6230000 ,剩余数据存储到 P_OTHERS。

alter table A_BATCH_TURNDAYS
split subpartition P_200401_SP_OTHERS values (6230000) into (
subpartition P_200401_SP_6230000,
subpartition P_200401_SP_OTHERS
)
update indexes;

3. 修改子分区模板:



Alter table 语句的 set_subpartition_template 子句,作用是重新定义(或新建、清除)复合分区表的 list 或 hash 子分区模板。执行 set_subpartition_template 操作后,表中已创建的子分区不受影响,本地、全局索引也不受影响。在此之后的分区操作(例如 add、merge 操作)将使用新的模板。



以下语句更新表 A_CHECKBILL_DAY 的子分区模板

alter table A_CHECKBILL_DAY
set subpartition template (
subpartition SP_2000000 values (2000000),
subpartition SP_6280000 values (6280000),
subpartition SP_6010000 values (6010000),
subpartition SP_6020500 values (6020500),
subpartition SP_6050000 values (6050000),
subpartition SP_6070000 values (6070000),
subpartition SP_6080400 values (6080400),
subpartition SP_6090000 values (6090000),
subpartition SP_6110000 values (6110000),
subpartition SP_6170000 values (6170000),
subpartition SP_6200000 values (6200000),
subpartition SP_6300000 values (6300000),
subpartition SP_6250000 values (6250000),
subpartition SP_6130000 values (6130000),
subpartition SP_6140000 values (6140000),
subpartition SP_6160000 values (6160000),
subpartition SP_6180000 values (6180000),
subpartition SP_6230000 values (6230000),
subpartition SP_OTHERS values (default)
);

Oracle子分区(sub partition)操作的更多相关文章

  1. Oracle 表分区partition(http://love-flying-snow.iteye.com/blog/573303)

    http://www.jb51.net/article/44959.htm Oracle表分区分为四种:范围分区,散列分区,列表分区和复合分区. 一:范围分区 就是根据数据库表中某一字段的值的范围来划 ...

  2. 转:Oracle表分区

    Oracle表分区分为四种:范围分区,散列分区,列表分区和复合分区. 一:范围分区 就是根据数据库表中某一字段的值的范围来划分分区,例如: 1. create table graderecord 2. ...

  3. Oracle表分区[转]

    废话少说,直接讲分区语法. Oracle表分区分为四种:范围分区,散列分区,列表分区和复合分区. 一:范围分区 就是根据数据库表中某一字段的值的范围来划分分区,例如: create table gra ...

  4. Oracle表分区分为四种:范围分区,散列分区,列表分区和复合分区(转载)

    一:范围分区 就是根据数据库表中某一字段的值的范围来划分分区,例如: 1 create table graderecord 2 ( 3 sno varchar2(10), 4 sname varcha ...

  5. Oracle 12C 新特性之表分区或子分区的在线迁移

    Oracle 12c 中迁移表分区或子分区到不同的表空间不再需要复杂的过程.与之前版本中未分区表进行在线迁移类似,表分区或子分区可以在线或是离线迁移至一个不同的表空间.当指定了 ONLINE 语句,所 ...

  6. Oracle 表分区(Partition)

    表分区功能能够改善应用程序性能,提高数据库可管理性和可用性,是数据库管理非常关键的技术.数据库通过使用分区提高查询性能,简化日常管理维护工作. 1 分区优点 1) 减少维护工作量,独立管理每个表分区比 ...

  7. oracle表分区的,分区操作,分区查询,子分区查询

    一.摘要 有关表分区的一些维护性操作: 注:分区根据具体情况选择. 表分区有以下优点: 1.数据查询:数据被存储到多个文件上,减少了I/O负载,查询速度提高. 2.数据修剪:保存历史数据非常的理想. ...

  8. [Oracle][Partition][Controlfile]Partition 操作是否和 Controlfile有关?

    Partition 操作是否和 Controlfile有关? 通过实验来判断: 对比 Partition 前后的操作,看看controlfile 的dump 信息中是否有记录,结果发现没有记录在 co ...

  9. oracle 分区表(子分区)收缩笔记

    思路1.首先移动子分区到别的表空间.2.收缩数据文件.3.再把子分区移回原表空间. ---------------------------------------------生成发送报告移动子分区语句 ...

随机推荐

  1. 转:Linux awk 命令 说明

    一.  AWK 说明 awk是一种编程语言,用于在linux/unix下对文本和数据进行处理.数据可以来自标准输入.一个或多个文件,或其它命令的输出.它支持用户自定义函数和动态正则表达式等先进功能,是 ...

  2. [.net 多线程]AutoResetEvent, ManualResetEvent

    ManualResetEvent: 通知一个或多个正在等待的线程已发生事件,允许线程通过发信号互相通信,来控制线程是否可心访问资源. Set() : 用于向 ManualResetEvent 发送信号 ...

  3. TCP连接状态-如何判断一个TCP连接是否可用

    在使用一个长连接的TCP时,如果TCP服务器端接收到TCP的客户端连接过来后,接着服务器端的TCP节点需要对这个客户端进行数据收发,收发时需要判断这个SOCKET是否可用用,判断方法有多种: 1.li ...

  4. C#静态类 静态方法与非静态方法比较

    静态类 在类(class)上加入static修饰,表示该类无法被实例化,并将该类中,无法实例化变量或函数 静态类的主要特性 仅包含静态成员 无法实例化 静态类的本质,时一个抽象的密封类,所以不能被继承 ...

  5. angular 辅助路由

  6. C++内存管理之shared_ptr

     ----------------------------------------shared_ptr--------------------------------------- 引子 c++中动态 ...

  7. django使用auth模块进行身份认证

    https://docs.djangoproject.com/zh-hans/2.0/topics/auth/default/#authentication-in-web-requests djang ...

  8. EF进阶篇(一)——概述

    前言 以前在ITOO里面和图书馆项目开发的时候,采用的这个技术,但是总是对上下文那里不是特别清楚.上下文这个概念很是模糊,所以这次再次拿起这个技术点儿,然后复习了一遍,发现我以前想的好简单. 内容 E ...

  9. linux下vim python代码自动补全

    一.vim python自动补全插件:pydiction 可以实现下面python代码的自动补全: 1.简单python关键词补全 2.python 函数补全带括号 3.python 模块补全 4.p ...

  10. spark-2.2.1在centos7安装

    前言 在安装Spark之前,我们需要安装Scala语言的支持.在此我选择的是scala-2.11.12版本.jdk8也要保证已经安装好并且配置好环境变量 scala-2.11.12下载 为了方便,我先 ...