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 THAN (TO_DATE('2009-1', 'YYYY-MM')),

7  PARTITION P2 VALUES LESS THAN (TO_DATE('2009-5', 'YYYY-MM')),

8  PARTITION P3 VALUES LESS THAN (TO_DATE('2009-9', 'YYYY-MM')));

表已创建。

SQL> ALTER TABLE T_PART_RANGE

2  SPLIT PARTITION P3

3  AT (TO_DATE('2009-7-30', 'YYYY-MM-DD'))

4  INTO (PARTITION P3, PARTITION P4);

表已更改。

SQL> SELECT PARTITION_NAME, HIGH_VALUE

2  FROM USER_TAB_PARTITIONS

3  WHERE TABLE_NAME = 'T_PART_RANGE'

4  ORDER BY 1;

PARTITION_NAME HIGH_VALUE

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

P1             TO_DATE(' 2009-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')

P2             TO_DATE(' 2009-05-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')

P3             TO_DATE(' 2009-07-30 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')

P4             TO_DATE(' 2009-09-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')

同样的操作,在INTERVAL分区表上执行就会报错:

SQL> CREATE TABLE T_PART_INTER

2  (ID NUMBER,

3  NAME VARCHAR2(30),

4  CREATE_DATE DATE)

5  PARTITION BY RANGE (CREATE_DATE)

6  INTERVAL (INTERVAL '4' MONTH)

7  (PARTITION P1 VALUES LESS THAN (TO_DATE('2009-1', 'YYYY-MM')),

8  PARTITION P2 VALUES LESS THAN (TO_DATE('2009-5', 'YYYY-MM')));

表已创建。

SQL> INSERT INTO T_PART_INTER

2  VALUES (1, 'TEST', TO_DATE('2009-8', 'YYYY-MM'));

已创建1行。

SQL> COMMIT;

提交完成。

查看本栏目更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/database/Oracle/

SQL> SELECT PARTITION_NAME, HIGH_VALUE

2  FROM USER_TAB_PARTITIONS

3  WHERE TABLE_NAME = 'T_PART_INTER'

4  ORDER BY 1;

PARTITION_NAME HIGH_VALUE

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

P1             TO_DATE(' 2009-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')

P2             TO_DATE(' 2009-05-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')

SYS_P96        TO_DATE(' 2009-09-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')

SQL> ALTER TABLE T_PART_RANGE

2  SPLIT PARTITION FOR(TO_DATE('2009-8', 'YYYY-MM'))

3  AT (TO_DATE('2009-7-30', 'YYYY-MM-DD'))

4  INTO (PARTITION P3, PARTITION P4);

ALTER TABLE T_PART_RANGE

*

第1行出现错误:

ORA-14080:无法按指定的上限来分割分区

显然导致问题的原因是由于SPLIT分区操作后,INTERVAL分区会根据SPLIT的日期作为基准时间,在此基础上进行INTERVAL递增,因此大于28日的日志使用INTERVAL则会导致在2月的时候出错,所以Oracle禁止大于28日的日期作为INTERVAL MONTH的基础分区。

作者:51cto博客 Oracle小混子

时间: 2024-08-30 12:10:19

oracle范围分区表和INTERVAL分区表对于SPLIT分区的区别的相关文章

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),

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

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

分区信息-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

(原创)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常用的

电脑如何将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数据泵导出导入与传统导出导入的区别

 估计有不少的朋友不清楚Oracle数据泵导出导入与传统导出导入的区别吧,下面小编为各位介绍一下,有兴趣的朋友不防进入一起参考.   先来看一下Oracle数据泵导出导入例子 1.首先建立目录: create directory 目录名称 as '数据库服务器上的一个目录',如:  create directory 别名 as 'd:\服务器目录名';  将导入或导出的文件放在这个目录下 2.导出及导入 以SID=orcl,导出dmp的账号为test,导入dmp的账号为test为例. 若将数据从

php explode split str_split函数区别与实例

三个函数都是把一个字符串分割成一个数组,但各有各的用法,下面我们就一一来看关于php explode split str_split函数区别与实例吧. */ $str ="id_99_cn.html"; $array = explode('_',$str); print_r($array); /* array (     [0] => id     [1] => 99     [2] => cn.html ) */ //函数原型:array split (string

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;