Oracle 11g新特性之INTERVAL分区
|
Oracle在分配新分区的时候只会给存在数据的分区进行分配,对于不存在数据的分区并不会马上分配,而是在需要的时候才去分配。 分区分配策略的示例: SQL> CREATE TABLE T_INTERVAL_PART 2 PARTITION BY RANGE (CREATED) 3 INTERVAL (NUMTOYMINTERVAL(1, "MONTH")) 4 (PARTITION P1 VALUES LESS THAN (TO_DATE("2007-9-1", "YYYY-MM-DD"))) 5 AS SELECT * FROM DBA_OBJECTS;
SQL> SELECT TABLE_NAME, PARTITION_NAME, HIGH_VALUE FROM USER_TAB_PARTITIONS 2 WHERE TABLE_NAME = "T_INTERVAL_PART" 3 ORDER BY 2; TABLE_NAME PARTITION_NAME HIGH_VALUE --------------- -------------- ---------------------------------T_INTERVAL_PART P1 TO_DATE(" 2007-09-01 00:00:00", "SYYYY-MM-DD HH24:MI:SS", "NLS_CALENDAR=GR T_INTERVAL_PART SYS_P113 TO_DATE(" 2007-11-01 00:00:00", "SYYYY-MM-DD HH24:MI:SS", "NLS_CALEND T_INTERVAL_PART SYS_P114 TO_DATE(" 2007-10-01 00:00:00", "SYYYY-MM-DD HH24:MI:SS", "NLS_CALEND
看到这个现象,第一个反应就是认为,Oracle根据INTERVAL的值的上限,从高到低依次创建分区,但是随后的测试发现并非如此: SQL> SELECT TABLE_NAME, PARTITION_NAME, HIGH_VALUE FROM USER_TAB_PARTITIONS 2 WHERE TABLE_NAME = "T_INTERVAL_PART" 3 ORDER BY 2; TABLE_NAME PARTITION_NAME HIGH_VALUE --------------- -------------- ---------------------------T_INTERVAL_PART P1 TO_DATE(" 2007-09-01 00:00:00", "SYYYY-MM-DD HH24:MI:SS", "NLS_CALENDAR=GR T_INTERVAL_PART SYS_P113 TO_DATE(" 2007-11-01 00:00:00", "SYYYY-MM-DD HH24:MI:SS", "NLS_CALEND T_INTERVAL_PART SYS_P114 TO_DATE(" 2007-10-01 00:00:00", "SYYYY-MM-DD HH24:MI:SS", "NLS_CALEND T_INTERVAL_PART SYS_P115 TO_DATE(" 2008-12-01 00:00:00", "SYYYY-MM-DD HH24:MI:SS", "NLS_CALEND
同时,也解释了为什么07年11月分区的分区序号小于10月份的,这是由于在建立分区表并插入数据的过程中,首先出现了11月份的记录,而后才出现了10月份的。 下面验证一下这个结论: SQL> SELECT * FROM (SELECT ROWNUM RN, OWNER, OBJECT_NAME, CREATED FROM DBA_OBJECTS) 2 WHERE CREATED >= TO_DATE("2007-10-1", "YYYY-MM-DD") 3 AND ROWNUM = 1; RN OWNER OBJECT_NAME CREATED ---------- ------------------------------ 68234 YANGTK T_INTERVAL_PART 2007-10-21 02:16:06 SQL> SELECT * FROM(SELECT ROWNUM RN, OWNER, OBJECT_NAME, CREATED FROM DBA_OBJECTS) 2 WHERE CREATED >= TO_DATE("2007-9-1", "YYYY-MM-DD") 3 AND CREATED < TO_DATE("2007-10-1", "YYYY-MM-DD") 4 AND ROWNUM = 1; RN OWNER OBJECT_NAME CREATED ---------- ------------------------------ 68240 SYS T_PART 2007-09-15 16:25:15
SQL> ROLLBACK;
SQL> SELECT TABLE_NAME, PARTITION_NAME, HIGH_VALUE FROM USER_TAB_PARTITIONS 2 WHERE TABLE_NAME = "T_INTERVAL_PART" 3 ORDER BY 2; TABLE_NAME PARTITION_NAME HIGH_VALUE --------------- -------------- T_INTERVAL_PART P1 TO_DATE(" 2007-09-01 00:00:00", "SYYYY-MM-DD HH24:MI:SS", "NLS_CALENDAR=GR T_INTERVAL_PART SYS_P113 TO_DATE(" 2007-11-01 00:00:00", "SYYYY-MM-DD HH24:MI:SS", "NLS_CALEND T_INTERVAL_PART SYS_P114 TO_DATE(" 2007-10-01 00:00:00", "SYYYY-MM-DD HH24:MI:SS", "NLS_CALEND T_INTERVAL_PART SYS_P115 TO_DATE(" 2008-12-01 00:00:00", "SYYYY-MM-DD HH24:MI:SS", "NLS_CALEND
|
