谈谈怎么实现Oracle数据库分区表

作者&投稿:红闸 (若有异议请与网页底部的电邮联系)
~
Oracle数据库分区是作为Oracle数据库性能优化的一种重要的手段和方法,做手头的项目以前,只聆听过分区的大名,感觉特神秘,看见



Oracle数据库分区是作为Oracle数据库性能优化的一种重要的手段和方法,做手头的项目以前,只聆听过分区的大名,感觉特神秘,看见某某高手在讨论会上夸夸其谈时,真是骂自己学艺不精,最近作GPS方面的项目,处理的数据量达到了几十GB,为了满足系统的实时性要求,必须提高数据的查询效率,这样就必须通过分区,以解燃眉之急!
先说说分区的好处吧!
1) 增强可用性:如果表的某个分区出现故障,表在其他分区的数据仍然可用;
2) 维护方便:如果表的某个分区出现故障,需要修复数据,只修复该分区即可;
3) 均衡I/O:可以把不同的分区映射到磁盘以平衡I/O,改善整个系统性能;
4) 改善查询性能:对分区对象的查询可以仅搜索自己关心的分区,提高检索速度。
Oracle数据库提供对表或索引的分区方法有三种:
ü 范围分区
ü Hash分区(散列分区)
ü 复合分区
一、范围分区详细说明
范围分区就是对数据表中的某个值的范围进行分区,根据某个值的范围,决定将该数据存储在哪个分区上。如根据序号分区,根据时间等来进行分区。根据序号,比如小于2000000的放在part01, 2000000~4000000的放在part02。。
create table AAA
(
id number primary key,
indate date not null
)
partition by range(indate)
(
partition part_01 values less than(to_date('2006-01-01','yyyy-mm-dd')) tablespace space01,
partition part_02 values less than(to_date('2010-01-01','yyyy-mm-dd')) tablespace space02,
partition part_03 values less than(maxvalue) tablespace space03
);
space01\ space02\ space03为建立的三个表空间,相当于把建立的一个大的表分在了3个不同的表空间的分区上了。
二、Hash分区(散列分区)详细说明
散列分区为通过指定分区编号来均匀分布数据的一种分区类型,因为通过在I/O设备上进行散列分区,使得这些分区大小一致。也就是只命名分区名称,这样均匀进行数据分布。
三、复合分区详细说明
有时候我们需要根据范围分区后,每个分区内的数据再散列地分布在几个表空间中,这样我们就要使用复合分区。复合分区是先使用范围分区,然后在每个分区内再使用散列分区的一种分区方法。
partition by range(indate)subpartition by hash(id)
subpartitions 3 store in (space01, space02, space03)
(
partition part_01 values less than(to_date(’2006-01-01’,’yyyy-mm-dd’)),
partition part_02 values less than(to_date(’2010-01-01’,’yyyy-mm-dd’)),
partition part_03 values less than(maxvalue)
);
四、分区表操作
1、插入记录:insert into AAA values(1 ,sysdate);
2、查询分区表记录:select * from AAA partition(part_01);
3、更新分区表的记录:update AAA partition(part_01) t set indate=’’where id=1; 但是当更新的时候指定了分区,而根据查询的记录不在该分区中时,将不会更新数据
4、删除分区表记录:delete from AAA partition(part_02) t where id=4; 如果指定了分区,而条件中的数据又不在该分区中时,将不会删除任何数据。
5、增加一个分区:alter table AAA add partition part_04 values less than(to_date(’2012-01-01’,’yyyy-mm-dd’)) tablespace dinya_spa ce03; 增加一个分区的时候,,增加的分区的条件必须大于现有分区的最大值,否则系统将提示ORA-14074 partition bound must collate higher than that of the last partition 错误。
6、合并一个分区:alter table AAA merge partitions part_01,part_02 into partition part_02; ,如果在合并的时候把合并后的分区定为part_01的时候,系统将提示ORA-14275 cannot reuse lower-bound partition as resulting partition 错误。
7、删除分区:alter table AAA drop partition part_01; 删除分区表的一个分区后,查询该表的数据时显示,该分区中的数据已全部丢失,所以执行删除分区动作时要慎重,确保先备份数据后再执行,或将分区合并。
五、建立索引
分区表和一般表一样可以建立索引,分区表可以创建局部索引和全局索引。当分区中出现许多事务并且要保证所有分区中的数据记录的唯一性时采用全局索引。
1. 局部索引分区的建立:create index idx_t on AAA(id)
local
(
partition idx_1 tablespace space01,
partition idx_2 tablespace space02,
partition idx_3 tablespace space03
);
2. 全局索引建立时global 子句允许指定索引的范围值,这个范围值为索引字段的范围值:create index idx_t on AAA(id)
global partition by range(id)
(
partition idx_1 values less than (1000) tablespace space01,
partition idx_2 values less than (10000) tablespace space02,
partition idx_3 values less than (maxvalue) tablespace space03
);
当然也可以不指定索引分区名直接对整个表建立索引: create index idx_t on AAA(id);



天天把“抗氧化”挂在嘴边,那么你知道ORAC吗?
ORAC全称为氧化自由基吸收能力(Oxygen Radical Absorbance Capacity),它衡量的是食品、保健品和药物中抗氧化成分的效力。作为国际标准,ORAC值越高,意味着这些产品在抵御自由基侵害方面的表现越出色,能更有效地帮助人体清除自由基,保护细胞免受氧化损伤。抗氧化的日常需求 人体在日常生活中,不断产生...

哪本书有食物的ORAC值
这是我国古代饮食专书之一,写于南北朝时期。南朝宋时,余姚人虞宗是一位美信家,他官职是黄门郎,到南朝齐时升为太子庶子,后来担任祠部尚书。公元483至493年,武帝在位。有一次皇帝向他问起烹饪的秘诀,谈得投机,皇帝不觉醉了,非常难受,虞宗就献上“醒酒鲭”,算是帮了皇帝的大忙。虞宗的《食珍...

《营养圣经》读书笔记12 — 预防的力量!抗氧化指标应纳入体检报告中_百 ...
作者在文中的的抗氧化食物部分,讲到了一个 ORAC 的指标,这个指标代表的中文意思是 某种食物的氧自由基吸收能力,ORAC 值越高的食物,说明它越有助于对抗自由基对人体的损 害。ORAC值高的食物有西梅干、葡萄干、蓝莓、树莓、草莓、羽衣甘蓝、菠菜以及西兰花,紫花苜蓿芽的ORAC值也较高。如果是居住...

血管也是有“年龄”的,你的血管年龄有多大?
ORAC并不是衡量抗氧化强弱的唯一指标,平时还是要注意多种饮食搭配,可多注重吃些膳食纤维,比如苹果、香蕉、哈密瓜、高良姜、面粉、稻米、甘薯、大豆、空心菜等健康而又新鲜的瓜果蔬菜,来增加身体的元素和微量元素的补充,从而来加强身体的代谢能力和抗疾病能力。【不药博士】生命科学博士,执业药师,高级营...

关于中午不怎么吃,和其他营养上的问题
膳食的原则就是要食物多样化,单一食品都会导致营养均衡。具体你参考膳食宝塔

红桥区19238949306: oracle具体怎么分区 -
元青杏灵: 你说的是oracle分区表吧,一般数据量大的表格采用到此功能,一个表上千万数据以上.以下例子,分区创建需要有条件,如时间,语法可详见metalink CREATE TABLE T_NEW (ID NUMBER PRIMARY KEY, TIME DATE) PARTITION BY RANGE (TIME)(PARTITION P1 VALUES LESS THAN (TO_DATE('2005-7-1', 'YYYY-MM-DD')), PARTITION P2 VALUES LESS THAN (MAXVALUE));

红桥区19238949306: oracle 表分区 -
元青杏灵: 范围(range)分区:一::对于分区表,如果where条件种没有分区列,那么oracle会扫描所有的分区,然后做PARTITION RANGE ALL 操作,这样成本将比未分区的全表扫描稍微高点,因为需要合并各个分区.二:范围分区可以用values less than (maxvalue)增加一个默认分区,maxvalue 常量表示该分区用来存放所有其 他分区无法存放的记录,三:范围分区可以对各种谓词做分区消除,包括=,>,等比hash,和list分区要灵活

红桥区19238949306: oracle数据表分区如何解决 -
元青杏灵: 某一年的数据量特别大的,可以考虑分区设置到月;其他年份到年

红桥区19238949306: Oracle数据库中的分区功能是怎样的?
元青杏灵: Oracle 分区功能可以提高许多应用程序的可管理性、性能与可用性.通过分区功能,可以将表、索引和索引组织表进一步细分为段,从而能够更精确地管理和访问这些数据...

红桥区19238949306: oracle建分区问题 -
元青杏灵: 首先,里边有数据不太好办,不过可以这样 create table T_BUSINESS_MONITOR_TMP as select * from T_BUSINESS_MONITOR; 然后,把原表清空 truncate table T_BUSINESS_MONITOR; 然后加上分区 alter table T_BUSINESS_MONITOR ...

红桥区19238949306: oracle对现有大表进行分区 -
元青杏灵: 有很多种方法可以做分区表转换,常见的有:1、CTAS,在建分区表时就把源表数据插进去2、建分区表,从源表导出,再导入分区表,10g可以用数据泵3、在线重定义,不影响业务,但速度慢些2亿数据如果按平均行长70也就是十几g,不会很慢,只要存储不太差,估计个把小时怎么也完事了.在线重定义比较慢,但一晚上也没问题,30g的搞过6,7个小时.

红桥区19238949306: oracle 怎么确定分区表如何分区的 -
元青杏灵: 如果查询当前用户下得分区表: select * from user_tables where partitioned='YES' 如果要查询整个数据库中的分区表: select * from dba_tables where partitioned='YES' 如果要查询某个用户下得分区表: select * from dba_tables where part...

红桥区19238949306: 关于Oracle 分区实现和操作的几个问题 -
元青杏灵: --你要用time,id范围进行分区,只能用组合范围分区,只有大分区,没有子分区,下面的例子 create table T_TEST (ID NUMBER(20) NOT NULL,TIME DATE NOT NULL ) partition by range(TIME, ID) -- 按时间、ID范围分区 这个例子是按年的 (...

红桥区19238949306: oracle数据库分区表的实现原理是什么 -
元青杏灵: 查询的时候按table来查,一个表的所有分区都属于table. 但每个分区都是单独的segment,如果查询限制了分区键,那么查询只落在特定的segment,而segment在底层对应的数据块是不同的,这样可以减少数据的访问.

红桥区19238949306: 请问oracle数据库中该如何设计分区索引partition index? -
元青杏灵: Hash Global分区索引介绍 HASH-Partitioned Global索引是Oracle 10g开始提供的新特性.而在以前的版本中 ,Oracle只支持Range-Partitioned Global索引.HASH-Partitioned Global索引的好处如下:比Range-Partitioned Global索引易于实施....

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网