oracle范围分区表和INTERVAL分区表的相互转化

INTERVAL分区其实是一种比较特殊的范围分区,因此可以很方便的将RANGE分区表转化为INTERVAL分区表,同样可以将INTERVAL分区表转化为RANGE分区表。

对于一个普通的范围分区表:

SQL> CREATE TABLE T_PART

2  (ID NUMBER,

3  NAME VARCHAR2(30),

4  CREATE_DATE DATE)

5  PARTITION BY RANGE (ID)

6  (PARTITION P1 VALUES LESS THAN (100),

7  PARTITION P2 VALUES LESS THAN (200),

8  PARTITION P3 VALUES LESS THAN (300));

表已创建。

SQL> SELECT TABLE_NAME, PARTITIONING_TYPE, INTERVAL

2  FROM USER_PART_TABLES

3  WHERE TABLE_NAME = 'T_PART';

TABLE_NAME                     PARTITION INTERVAL

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

T_PART                         RANGE

SQL> INSERT INTO T_PART

2  VALUES (100, 'A', SYSDATE);

已创建1行。

SQL> INSERT INTO T_PART

2  VALUES (240, 'A', SYSDATE);

已创建1行。

SQL> INSERT INTO T_PART

2  VALUES (360, 'TEST', SYSDATE);

INSERT INTO T_PART

  *

第1行出现错误:

ORA-14400:插入的分区关键字未映射到任何分区

插入超过分区上限的记录会报错,下面通过一个简单ALTER TABLE语句,将RANGE分区表转化为INTERVAL分区表:

SQL> ALTER TABLE T_PART SET INTERVAL (100);

表已更改。

SQL> SELECT TABLE_NAME, PARTITIONING_TYPE, INTERVAL

2  FROM USER_PART_TABLES

3  WHERE TABLE_NAME = 'T_PART';

TABLE_NAME                     PARTITION INTERVAL

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

T_PART                         RANGE     100

SQL> INSERT INTO T_PART

2  VALUES (360, 'TEST', SYSDATE);

已创建1行。

SQL> COMMIT;

提交完成。

SQL> SELECT TABLE_NAME, PARTITION_NAME, HIGH_VALUE

2  FROM USER_TAB_PARTITIONS

3  WHERE TABLE_NAME = 'T_PART';

TABLE_NAME                     PARTITION_NAME                 HIGH_VALUE

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

T_PART                         P1                             100

T_PART                         P2                             200

T_PART                         P3                             300

T_PART                         SYS_P97                        400

对于INTERVAL分区表,新增的超过分区上限的数据会自动导致对应的INTERVAL分区被建立。

同样INTERVAL分区表可以方便的转化为RANGE分区表,只需要不输入INTERVAL的值即可:

SQL> ALTER TABLE T_PART SET INTERVAL ();

时间: 2016-09-24

oracle范围分区表和INTERVAL分区表的相互转化的相关文章

oracle范围分区表和INTERVAL分区表对于SPLIT分区的区别

范围分区表和INTERVAL分区表是可以相互转化的,不过二者还是有所区别的.比如在SPLIT分区的时候,范围分区表没有限制,而INTERVAL分区表则可能报错. 首先看范围分区的例子: SQL> CREATE TABLE T_PART_RANGE 2  (ID NUMBER, 3  NAME VARCHAR2(30), 4  CREATE_DATE DATE) 5  PARTITION BY RANGE (CREATE_DATE) 6  (PARTITION P1 VALUES LESS THA

oracle INTERVAL分区表锁分区操作概述

在文档中,对INTERVAL分区执行一些操作之前都会先执行分区的锁定操作. 和其他类型的分区表不同,INTERVAL分区表的分区并不一定是已经存在的,分区是否存在与用户插入的数据的范围有关. 可以看到,文档在对INTERVAL分区执行SPLIT等分区操作之前都会执行一个锁分区的操作,事实上这个锁操作并非是避免用户DML对DDL操作的影响,而是为了确保要操作的分区存在: SQL> CREATE TABLE T_PART_INTER 2  (ID NUMBER, 3  NAME VARCHAR2(3

(原创)INTERVAL分区表与RANGE分区表相互转化

1.RANGE分区表转化为INTERVAL分区表 如果有MAXVALUE分区,则先删除,然后再用SET INTERVAL设置为自动分区间隔ALTER TABLE trdfat_profit DROP PARTITION P_MAX;ALTER TABLE trdfat_profit SET INTERVAL(1000000);ALTER TABLE trdfat_profit SET INTERVAL (NUMTODSINTERVAL(1,'DAY')) --NUMTODSINTERVAL常用的

分区信息-oracle如何获得一个范围分区表每个分区的信息

问题描述 oracle如何获得一个范围分区表每个分区的信息 已知:一个 范围分区表 ,表名为sale_range,分区字段sales_date. 怎样获得这个表每个分区的 分区名 / 分区字段上限 ? 解决方案 SELECT * FROM USER_PART_TABLES SELECT * FROM USER_TAB_PARTITIONS FYI:http://docs.oracle.com/cd/E18283_01/server.112/e16541/part_admin005.htm

电脑如何将MBR分区表转换为GPT分区表

  在技巧方法开始之前,为防止大家一头雾水,咱们先来了解一下MBR和GPT都是什么吧! 全新硬盘没有经过格式化,安装操作系统之前,需要进行4K对齐分区,而硬盘分区初始化的两种格式,就是今天要说的MBR和GPT. MBR的全称是Master Boot Record(主引导记录),MBR早在1983年IBM PC DOS 2.0中就已经提出.之所以叫"主引导记录",是因为它是存在于驱动器开始部分的一个特殊的启动扇区.这个扇区包含了已安装的操作系统的启动加载器和驱动器的逻辑分区信息.它最大支

MaxCompute分区表和非分区表使用对比

本文我们将通过对有同样数据量.表结构除分区列其他都一模一样的表,从查询计算.写入.删除数据几个简单操作进行对比,了解MaxCompute分区表和非分区表在使用上有什么差异. 在介绍之前,需要大家先了解MaxCompute分区的概念. 数据准备 分区表:取公共数据集中的表dwd_prouduct_house_basic_info_out(二手房产数据集): 非分区表:执行建表语句: create table dwd_prouduct_house_basic_info_out_npt as sele

Oracle中如何查看指定分区表的每个子分区行数

批量获取指定分区表的每个子分区行数! 不然手动查询太麻烦! ---查看指 定分区表的每个子分区行数 create or replace procedure show_tabparcnt (partiton_tablename in user_tab_partitions.table_name%type )  --输入参数 as TYPE cur IS REF CURSOR RETURN user_tab_partitions%RowType;  --声明游 标类型为ref a cur;    

关于oracle带lob对象的分区表,移动表空间的问题

客户有个带lob对象的表空间,希望做表空间的move,可是等move之后,发现在dba_lobs里面查到的lob对象的表空间还是在原来的地方. CREATE TABLE SCES1INPUTS (   CODREQUEST            VARCHAR2(9 BYTE)        NOT NULL,   LOBS1INPUT            CLOB                    NOT NULL,   CODLAYOUT             VARCHAR2(20

ORACLE普通表转换成分区表

oracle官方建议当表的大小大于2GB的时候就使用分区表进行管理,分区表相对于小的表管理和性能上都有很大的优势,本文档暂时不介绍具体的优势,主要介绍几种普通表转换成分区表的方法:[方法概述]oracle官方给了以下四种操作的方法:  A)  Export/import method(导入导出)  B)  Insert with a subquery method(插入子查询的方法)  C)  Partition exchange method(交换分区法)  D)  DBMS_REDEFINI