设为首页 收藏本站
查看: 1136|回复: 0

[经验分享] oracle 表分区的相关操作

[复制链接]

尚未签到

发表于 2016-7-27 11:12:33 | 显示全部楼层 |阅读模式
  分区的优点:
  1、 增强可用性:如果表的一个分区由于系统故障而不能使用,表的其余好的分区仍可以使用;
  2、 减少关闭时间:如果系统故障只影响表的一部份分区,那么只有这部份分区需要修复,矿能比整个大表修复花的时间更少;
  3、 维护轻松:如果需要得建表,独产管理每个公区比管理单个大表要轻松得多;
  4、 均衡I/O:可以把表的不同分区分配到不同的磁盘来平衡I/O改善性能;
  5、 改善性能:对大表的查询、增加、修改等操作可以分解到表的不同分区来并行执行,可使运行速度更快,在数据仓库的TP查询特别有用。
  6、 分区对用户透明,最终用户感觉不到分区的存在。
  
create tablespace dw1
  datafile 'D:\oracle\oradata\ora9\dw11.ora' size 50M
  
  create tablespace dw2
  datafile 'D:\oracle\oradata\ora9\dw21.ora' size 50M
  
  一、按范围分区:固名思义就是按一定range来分区,看下面的例子:
  SQL> set linesize 1000
  SQL> create table niegc_part
  2 (
  3 part_id integer primary key,
  4 part_date date,
  5 part_dec varchar2(100)
  6 )
  7 partition by range(part_date)
  8 (
  9 partition part_01 values less than(to_date('2010-01-01','yyyy-mm-dd')) tablespace dw1,
  10 partition part_02 values less than(to_date('2011-01-01','yyyy-mm-dd')) tablespace dw2,
  11 partition part_03 values less than(maxvalue) tablespace dw1
  12 );
  
  表已创建。
  
  SQL>
  SQL> insert into niegc_part values(1,to_date('2009-12-30','yyyy-mm-dd'),'less 20
  10-01-01');
  
  已创建 1 行。
  
  SQL> commit;
  
  提交完成。
  
  SQL> insert into niegc_part values(2,to_date('2010-01-01','yyyy-mm-dd'),'equal 2
  011-01-01');
  
  已创建 1 行。
  
  SQL> commit;
  
  提交完成。
  
  SQL> insert into niegc_part values(3,sysdate,'sysdate');
  
  已创建 1 行。
  
  SQL> commit;
  
  提交完成。
  
  SQL>
  SQL>
  SQL> select * from niegc_part partition(part_01);
  
     PART_ID PART_DATE PART_DEC
  ---------- ---------- ----------------------------------------------------------
  ------------------------------------------
           1 30-07月-12 less 2010-01-01
  
SQL>
  
  相信只要对oracle 有点熟,都能知道上面的range分区的意思了.
  
  两个字段以上的range分区大同小异,请看下面的例子:
  create table niegc_part
(
part_id integer primary key,
part_date date,
part_dec varchar2(100)
)
partition by range(part_id,part_date)
(
partition part_01 values less than(1,to_date('2010-01-01','yyyy-mm-dd')) tablespace dw,
partition part_02 values less than(10,to_date('2011-01-01','yyyy-mm-dd')) tablespace dw,
partition part_03 values less than(maxvalue,maxvalue) tablespace dw
);

  二、Hash分区(散列分区)。 散列分区通过指定分区编号来均匀分布数据的一种分区类型,因为通过在I/O设备上进行散列分区,使行这些分区大小一致。如将part_id的数据根据自身的情况散列地存放在指定的三个表空间中:
  create table niegc_part
  (
  part_id integer primary key,
  part_date date,
  part_dec varchar2(100)
  )
  partition by hash(part_id)
  (
  partition part_01 tablespace dw1,
  partition part_02 tablespace dw2
  );
  
  系统将按part_id将记录散列地插入三个分区中,这里也就是二个不同的表空间中。
  
  三、复合分区。根据范围分区后,每个分区内的数据再散列地分布在几个表空间中,这样我们就要使用复合分区。复合分区是先使用范围分区,然后在每个分区同再使用散列分区的一种分区方法,如将part_date的记录按时间分区,然后每个分区中的数据分三个子分区,将数据散列地存储在三个指定的表空间中:
  
  create table niegc_part
  (
  part_id integer primary key,
  part_date date,
  part_dec varchar2(100)
  )
  partition by range(part_date) subpartition by hash(part_id)
  subpartitions 2 store in(dw1,dw2)
  (
  partition part_01 values less than(to_date('2010-01-01','yyyy-mm-dd')) tablespace dw1,
  partition part_02 values less than(to_date('2011-01-01','yyyy-mm-dd')) tablespace dw2,
  partition part_03 values less than(maxvalue) tablespace dw1
  );
  
先根据part_date进行范围分区,然后根据交易的ID将记录散列地存储在二个表空间中。
  
  四、索引分区:
  注意: 对某个字段已做了分区了,是不允许再建立索引分区的。这一点要非常注意。
  
  全局索引建立时global子句允许指定索引的范围值,这个范围值为索引字段的范围值:
  create index idx_part_id on niegc_part(part_dec)
  global partition by range(part_dec)
  (
  partition idx_1 values less than('1000') tablespace dw,
  partition idx_2 values less than(maxvalue) tablespace dw
  )
  
  局部索引分区的建立:(注意:表必须存在分区,此分区的个数必须和分区表的分区个数一样,不然是建立不起来的)
  create index idx_part_id on niegc_part(part_dec)
  local
  (
  partition idx_1 tablespace dw1,
  partition idx_2 tablespace dw2
  )
  
五、分区维护:(只对范围分区)
  (1)、增加一个分区:分区范围只能往上增,不能增加一个少于原有的分区:
  alter table niegc_part add partition part_03 values less than(maxvalue)
  (2)、合并分区:(合并后的分区必须指下最后一个大value的分区)
  alter table niegc_part merge partitions part_02,part_03 into partition part_03
  (3)、删除一个分区:
  alter table niegc_part drop partition part_01

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-250218-1-1.html 上篇帖子: 服务器暂时无法响应您的请求 500 Internal Server Error 下篇帖子: Oracle BLOB 存储 两三事
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表