INTERVAL分区的特点

开始研究INTERVAL分区的时候只是了解了个大概,这次看分区的文档对INTERVAL分区又多了一些了解。

 

 

11G新增的INTERVAL分区使得手工给RANGE分区添加新分区的工作变得异常简单,这也使得INTERVAL分区成为RANGE分区的最佳选择。

更方便的是,INTERVAL分区并非必须在表创建的时候指定,即使RANGE分区表已经建立,也可以修改为使其变为INTERVAL分区:

SQL> CREATE TABLE T_PART
  2  (ID NUMBER,
  3  NAME VARCHAR2(30),
  4  CREATE_TIME DATE)
  5  PARTITION BY RANGE (CREATE_TIME)
  6  (PARTITION P1 VALUES LESS THAN (TO_DATE('2008-1', 'YYYY-MM')),
  7  PARTITION P2 VALUES LESS THAN (TO_DATE('2009-1', 'YYYY-MM')));

表已创建。

SQL> COL INTERVAL FORMAT A20
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> ALTER TABLE T_PART SET INTERVAL (INTERVAL '1' YEAR);

表已更改。

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     INTERVAL'1'YEAR

SQL> SET LONG 10000
SQL> SELECT DBMS_METADATA.GET_DDL('TABLE', 'T_PART')
  2  FROM DUAL;

DBMS_METADATA.GET_DDL('TABLE','T_PART')
--------------------------------------------------------------------------------

  CREATE TABLE "TEST"."T_PART"
   (    "ID" NUMBER,
        "NAME" VARCHAR2(30),
        "CREATE_TIME" DATE
   ) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
  STORAGE(
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "USERS"
  PARTITION BY RANGE ("CREATE_TIME") INTERVAL (INTERVAL'1'YEAR)
 (PARTITION "P1"  VALUES LESS THAN (TO_DATE(' 2008-01-01 00:00:00', 'SYYYY-MM-DD HH24:M
I:SS', 'NLS_CALENDAR=GREGORIAN'))
  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
  STORAGE(INITIAL 81920 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAUL
T CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "USERS" NOCOMPRESS ,
 PARTITION "P2"  VALUES LESS THAN (TO_DATE(' 2009-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS
_CALENDAR=GREGORIAN'))
  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
  STORAGE(INITIAL 81920 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLAS
H_CACHE DEFAULT)
  TABLESPACE "USERS" NOCOMPRESS )

 

SQL> INSERT INTO T_PART
  2  VALUES (1, 'TEST', SYSDATE);

已创建 1 行。

这使得现有的所有RANGE分区表都可以利用INTERVAL分区的优点,而且INTERVAL方式分区也支持复合分区,INTERVAL-HASHINTERVAL-LISTINTERVAL-RANGE三种分区方式都是支持的,唯一需要注意的是,由于INTERVAL的分区是根据需要自动创建,因此需要使用子分区模板来确定新增分区的子分区如何建立,如果没有建立子分区模板,则新增的分区只会包含一个子分区。

INTERVAL分区的另一个特点就是不允许分区键值为空值:

SQL> INSERT INTO T_PART
  2  VALUES (2, 'NULL', NULL);
INSERT INTO T_PART
            *
1 行出现错误:
ORA-14400:
插入的分区关键字未映射到任何分区

这个限制其实也很好理解,由于INTERVAL分区不存在MAXVALUE分区,因此NULL值“大于”所有的分区键值。

如果分区键值可能为空,那么INTERVAL分区就不适用,不过分区键值为空的情况本身就十分罕见。

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/4227/viewspace-627426/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/4227/viewspace-627426/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值