ORACLE 11g 分区浅试
2009-12-17 21:22
281 查看
项目中遇到这样的问题,表的结构简单,但数据量很大,且对于表的每一列可能都需要有查询,于是速度很慢,尤其是每当过去一段时间后,数据插入和查找都开始变得困难。
于是想到分区。然而在10g以前,大体只能采取按照范围或散列分区,加入需要在时间列上进行分区,将导致灾难性后果,每天一个分区,手写会要命,需要一个作业新建分区。数据库升级到了11g,发现支持Interval分区,即一个范围分区的增强功能,可以实现equi-sized范围分区的自动化,创建的分区作为元数据,只有最开始的分区是永久分区。随着数据的增加会分配更多的部分,并自动创建新的分区和本地索引。
下面是一些尝试:
1. 通过EM创建表并新建分区。.在分区向导中,可以看到有关Interval分区的选项——有提示说,可以实现自动增加分区,但是同一页面上有一个必填的选项要求指定分区个数,我觉得puzzled,但是没有别的选择。新建之后查看DDL,没有看到关于Interval的描述。尝试插入几条新数据,果然无效。
2. 使用SQL直接新建Interval分区,如下:
然后尝试插入几条数据,成功地分布在了不同的分区。
代码 1 CREATE TABLE "AA"."T_RECORD"
2 ( "RECORD_ID" NUMBER,
3 "RECORD_TIME" DATE NOT NULL ,
4 "RECORD_CONTENT" VARCHAR2(40) NOT NULL ,
5 "RECORD_STYLE" VARCHAR2(10) DEFAULT 'B' NOT NULL ,
6 "RECORD_DOM_FK" NUMBER NOT NULL ,
7 CONSTRAINT
8 "FK_RECORD_DOM" FOREIGN KEY ("RECORD_DOM_FK")
9 REFERENCES "AA"."T_DOM" ("DOM_ID") VALIDATE ,
CONSTRAINT
"PK_RECORD" PRIMARY KEY ("RECORD_ID") VALIDATE
)
TABLESPACE "SPACE" PARTITION BY RANGE (RECORD_TIME)
INTERVAL (NUMTODSINTERVAL(1, 'DAY'))
STORE IN(SPACE)
( PARTITION "T_RACORD_P1" VALUES LESS THAN (TO_DATE('2009-06-01','YYYY-MM-DD'))
)
一些尚未验证的问题:
1. 经过这样的以每天为一个分区的形式是否能解决本文开始时所提出的问题,使得效率提高 。
2. 这样的分区在时间长了以后是否会给系统造成较大负担。
于是想到分区。然而在10g以前,大体只能采取按照范围或散列分区,加入需要在时间列上进行分区,将导致灾难性后果,每天一个分区,手写会要命,需要一个作业新建分区。数据库升级到了11g,发现支持Interval分区,即一个范围分区的增强功能,可以实现equi-sized范围分区的自动化,创建的分区作为元数据,只有最开始的分区是永久分区。随着数据的增加会分配更多的部分,并自动创建新的分区和本地索引。
下面是一些尝试:
1. 通过EM创建表并新建分区。.在分区向导中,可以看到有关Interval分区的选项——有提示说,可以实现自动增加分区,但是同一页面上有一个必填的选项要求指定分区个数,我觉得puzzled,但是没有别的选择。新建之后查看DDL,没有看到关于Interval的描述。尝试插入几条新数据,果然无效。
2. 使用SQL直接新建Interval分区,如下:
然后尝试插入几条数据,成功地分布在了不同的分区。
代码 1 CREATE TABLE "AA"."T_RECORD"
2 ( "RECORD_ID" NUMBER,
3 "RECORD_TIME" DATE NOT NULL ,
4 "RECORD_CONTENT" VARCHAR2(40) NOT NULL ,
5 "RECORD_STYLE" VARCHAR2(10) DEFAULT 'B' NOT NULL ,
6 "RECORD_DOM_FK" NUMBER NOT NULL ,
7 CONSTRAINT
8 "FK_RECORD_DOM" FOREIGN KEY ("RECORD_DOM_FK")
9 REFERENCES "AA"."T_DOM" ("DOM_ID") VALIDATE ,
CONSTRAINT
"PK_RECORD" PRIMARY KEY ("RECORD_ID") VALIDATE
)
TABLESPACE "SPACE" PARTITION BY RANGE (RECORD_TIME)
INTERVAL (NUMTODSINTERVAL(1, 'DAY'))
STORE IN(SPACE)
( PARTITION "T_RACORD_P1" VALUES LESS THAN (TO_DATE('2009-06-01','YYYY-MM-DD'))
)
一些尚未验证的问题:
1. 经过这样的以每天为一个分区的形式是否能解决本文开始时所提出的问题,使得效率提高 。
2. 这样的分区在时间长了以后是否会给系统造成较大负担。
相关文章推荐
- oracle 11g表智能按月分区
- Oracle 11g虚拟列上建分区
- Oracle 11g下用模板建复合分区
- Oracle 11g Interval分区
- oracle 11G 间隔分区
- Oracle 11g新特性-分区
- Oracle 11g 分区拆分与合并
- Oracle 自动拓展分区的实现(11g后使用interval分区)
- ORACLE 11G间隔分区特性
- Oracle 11g 间隔分区(INTERVAL)批量规范命名
- Oracle 11g 的bug?: aix 上,expdp 11.2.0.1 导出,impdp 11.2.0.3 导入,Interval 分区的 【Interval】 分区属性成了【N】
- Oracle 11G的间隔(INTERVAL)分区
- Oracle 11g 通过间隔分区实现按月创建表分区
- oracle 11g分区表新特性---interval分区 的坑
- oracle 11g分区功能新革命
- oracle 11g 分区
- Oracle 11G的间隔(INTERVAL)分区
- oracle 11g 索引与分区的总结
- [原]给Oracle 11g Interval分区进行重命名
- Oracle 11g 新特性:自动创建分区(Interval Partition)