频道直达:新闻 - 组网 - 安全 - 服务器 - 存储 - 系统 - 应用 - 开发 - 数据库 - 前沿 - 技术人 - 培训 - 求职 - 读书 - 教程 - 专题 - 产品 - 案例 - 技术圈 - 博客 - BBS
51CTO.COM_中国领先的IT技术网站
找资料:

Oracle 11g新特性之INTERVAL分区

作者: 佚名 出处:赛迪网 2007-12-06 13:04    砖    好    评论   进入论坛
阅读提示:Oracle 11g有一个新增的特性INTERVAL分区,本文通过实例讲解INTERVAL分区的分区分配采用的是自治事务,供大家参考!

Oracle 11g有一个新增的特性INTERVAL分区,此种范围分区不需要定义MAXVALUE,Oracle会根据分区定义的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

以上这个例子就是在介绍INTERVAL分区时使用的例子,不过这个例子中存在一个比较奇怪的显现,那就是对于2007年11月的分区对于的分区名称中的序号反而小于2007年10月的。

看到这个现象,第一个反应就是认为,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

Oracle并没有创建从07年12月到08年12月之间的所有的分区,而是仅仅创建了08年12月份的分区。这说明Oracle会根据插入数据的分区键值来分配所需的分区,中间没有包含数据的分区不会被创建。

同时,也解释了为什么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

由于查询DBA_OBJECTS视图的时候,先查询到创建时间为10月21日的记录,因此,INTERVAL分区表先建立了上限为11月1日的分区,随后建立了上限为10月1日的分区。

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

注释:即便触发Oracle分配新的分区的数据被回滚了,新增分区也不会被删除。从这一点我们就可以推断,INTERVAL分区的分区分配采用的就是自治事务。

【相关文章】

【责任编辑:火凤凰 TEL:(010)68476606】

专题
甲骨文Oracle 11g正式发布
Oracle数据库开发之PL/SQL基础应用
Oracle较真SAP-商业管理软件之战一触即发
Oracle数据库开发基础教程
Oracle 10g的基础应用
我也说两句

匿名发表

(如果看不清请点击图片进行更换)


中 国 领 先 的 IT 技 术 网 站 ·
技 术 成 就 梦 想
·SQL Server入门到精通 (查看120205次)
·SQL Server 2008/2005全解 (查看100798次)
·Oracle数据库开发指南 (查看48189次)
·MySQL数据库备份 (查看46621次)
·Oracle SQL 内置函数大全 (查看44460次)
订阅技术快讯
电子杂志下载
名称:SQL Server数据库管理精品黄皮书
简介:书中文章经过精挑细选,便于用户能根据自己的实际工作和学习,快速在本书寻找到相关资料。内容涵盖了SQL Server的安装与升级、语句查询、数据备份和恢复、自动化任务、数据同步、数据字典、安全和预防、性能和优化、集群等各方面应用信息,以及DBA管理人员在数据库管理工作中
名称:2007路由技术大全
简介:《2007路由技术大全》由51CTO.com网站特别策划制作,该书包括路由器技术、路由器产品、路由器配置、安全设置、路由器故障处理、路由器密码恢复,以及广大网友在实践使用中的心得经验和技巧文章,内容注重实用性,适用于初学者入门,也适合多年从业者提高,是一本实践和理论完
名称:网络安全精品应用黄皮书
简介:《2007精品网络安全黄皮书》包括了9个大类24个小类, 800余篇文章,内容包含了熊猫烧香病毒、DDOS攻击、ARP病等热点问题的介绍及解决方案。从病毒查杀、防范、系统、数据等各方面的安全设置到黑客技术的了解、防范,涉及到了安全应用的全部领域, 由浅至深内容全面。