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

[经验分享] oracle 表分区

[复制链接]

尚未签到

发表于 2018-9-14 08:47:39 | 显示全部楼层 |阅读模式
  select * from emp;
  --分区
  --表分区的分类:1、范围、2、散列 3、列表、4、复合
  --范围分区的语法:
  PARTITION BY RANGE (column_name)
  (
  PARTITION part1 VALUES LESS THAN(range1),
  PARTITION part2 VALUES LESS THAN(range2),
  ...
  [PARTITION partN VALUES LESS THAN(MAXVALUE)]
  );
  --创建几个表空间
  create tablespace area1
  datafile 'D:/area1.dbf'
  size 32M
  autoextend on
  next 32M
  maxsize unlimited
  create tablespace area2
  datafile 'D:/area2.dbf'
  size 32M
  autoextend on
  next 32M
  maxsize unlimited
  create tablespace area3
  datafile 'D:/area3.dbf'
  size 32M
  autoextend on
  next 32M
  maxsize unlimited
  --范围分区:以表中的一个列或一组列的值的范围分区
  --小于1000的放在一个分区  p1,  area1(表空间)
  --从1000到2000的放在一个分区 p2, area2(表空间)
  --大于2000的放在一个分区  p3 , area3(表空间)
  create table test_emp
  (
  empno number primary key,
  ename varchar2(20),
  address varchar2(20),
  sal float
  )
  partition by range(sal)
  (
  partition p1 values less than(1000) tablespace area1,  --小于1000的放在一个分区
  partition p2 values less than(2000) tablespace area2,  --从1000到2000的放在一个分区 p2
  partition p3 values less than(maxvalue) tablespace area3 --大于2000的放在一个分区
  )
  --maxvalue 是一个不确定的值,大于上一个分区的最大值
  --往表中插入记录
  insert into test_emp values(1,'张三','湖南',800);
  insert into test_emp values(2,'张四','湖南',1200);
  insert into test_emp values(3,'张五','湖南',2200);
  select * from test_emp;
  drop table test_emp;
  --这个时候我们去删除表空间
  drop tablespace area1 including contents and datafiles;
  --这个时候会报错,要想删除此表空间,首先要删除这个表空间里面存在分区的表(跨多个表空间)
  --按分区查询(只查询p1分区的内容)
  select * from test_emp partition(p3);
  --将不同的分区放置在同一个表空间
  create table test_emp1
  (
  empno number primary key,
  ename varchar2(20),
  address varchar2(20),
  sal float
  )
  partition by range(sal)
  (
  partition p1 values less than(1000) ,  --小于1000的放在一个分区
  partition p2 values less than(2000),  --从1000到2000的放在一个分区 p2
  partition p3 values less than(maxvalue) --大于2000的放在一个分区
  )
  insert into test_emp1 values(1,'张三','湖南',800);
  insert into test_emp1 values(2,'张四','湖南',1200);
  insert into test_emp1 values(3,'张五','湖南',2200);
  select * from test_emp1 partition(p1);--按分区查找
  delete from test_emp1 partition(p1);--按分区删除数据
  --散列分区
  --hash “哈希” "杂凑" address = hash(Key)
  PARTITION BY HASH (column_name)
  PARTITIONS number_of_partitions;
  或
  PARTITION BY HASH (column_name)
  ( PARTITION part1 [TABLESPACE tbs1],
  PARTITION part2 [TABLESPACE tbs2],
  ...
  PARTITION partN [TABLESPACE tbsN]);
  --创建表,按散列分区
  create table test_emp1
  (
  empno number,
  ename varchar2(20),
  department varchar2(20)
  )
  partition by hash(department)
  (
  partition p1,
  partition p2,
  partition p3
  )
  --drop table test_emp1
  insert into test_emp1 values(1,'张三','开发部');
  insert into test_emp1 values(2,'李四','测试部');
  insert into test_emp1 values(3,'王五','技术部');
  select * from test_emp1 partition(p3);
  create table ttt
  (
  ename varchar2(20),
  address varchar2(20)
  )
  partition by hash(address)
  partitions 3;
  --分区名称由系统分配
  select * from user_tab_partitions where table_name='TTT';--查询当前用户下表的分区
  insert into ttt values('张三','湖南长沙');
  insert into ttt values('李四','湖南娄底');
  insert into ttt values('王五','湖南常德');
  select * from ttt partition(SYS_P82);
  --列表分区(当某个字段的值比较确定的情况下面,我们是用列表分区)
  PARTITION BY LIST (column_name)
  (
  PARTITION part1 VALUES (values_list1),
  PARTITION part2 VALUES (values_list2),
  ...
  PARTITION partN VALUES (DEFAULT)
  );
  drop table people;
  --湖南(长沙,娄底,邵阳,常德)
  create table people
  (
  pno number,
  pname varchar2(20),
  paddress varchar2(20)
  )
  partition by list(paddress)
  (
  partition p1 values ('长沙','常德'),
  partition p2 values ('娄底'),
  partition p3 values ('邵阳')
  )
  insert into people values (1,'张三','长沙');
  insert into people values (2,'张2','娄底');
  insert into people values (3,'张3','邵阳');
  insert into people values (4,'张4','常德');
  insert into people values (5,'张5','长沙');
  select * from people partition (p1);
  --复合分区
  --语法:
  PARTITION BY RANGE (column_name1)
  SUBPARTITION BY HASH (column_name2)
  SUBPARTITIONS number_of_partitions
  (
  PARTITION part1 VALUE LESS THAN(range1),
  PARTITION part2 VALUE LESS THAN(range2),
  ...
  PARTITION partN VALUE LESS THAN(MAXVALUE)
  );
  --例:
  CREATE TABLE SALES
  (
  PRODUCT_ID VARCHAR2 (5),
  SALES_DATE DATE NOT NULL,
  SALES_COST NUMBER (10)
  )
  PARTITION BY RANGE (SALES_DATE) --在SALES_DATE上进行范围分区
  SUBPARTITION BY HASH (PRODUCT_ID) --是在每个分区中按PRODUCT_ID 进行散列分区
  SUBPARTITIONS 5           --划分5个子分区
  (
  PARTITION S1 VALUES LESS THAN (TO_DATE('01/4月/2001', 'DD/MON/YYYY')),
  PARTITION S2 VALUES LESS THAN (TO_DATE('01/7月/2001','DD/MON/YYYY')),
  PARTITION S3 VALUES LESS THAN (TO_DATE('01/9月/2001','DD/MON/YYYY'))
  -- PARTITION S4 VALUES LESS THAN (MAXVALUE)
  );
  select * from sales;
  drop table sales;
  insert into sales values('1001',to_date('02/2月/2001','DD/MON/YYYY'),1000);
  insert into sales values('1002',to_date('02/6月/2001','DD/MON/YYYY'),2000);
  insert into sales values('1003',to_date('02/8月/2001','DD/MON/YYYY'),3000);
  select * from sales partition(s2);
  insert into sales values('1004',to_date('02/12月/2001','DD/MON/YYYY'),3000);
  --添加分区
  ALTER TABLE sales ADD PARTITION P4 VALUES LESS THAN(TO_DATE('01/11月/2001','DD/MON/YYYY'));
  alter table sales add partition p5 values less than(maxvalue);
  --删除分区
  alter table sales drop partition p5;
  select * from user_tab_partitions where table_name='SALES';
  alter table sales drop partition p4;
  --截取分区(删除某个分区里面的全部内容,但是分区存在)
  alter table sales truncate partition s3;
  --合并分区 - 将范围分区或复合分区的两个相邻分区连接起来
  alter table SALES
  merge PARTITIONS S1, S2 INTO PARTITION S2;
  --拆分分区 - 将一个大分区中的记录拆分到两个分区中
  alter table sales split partition s2 at (TO_DATE('01/4月/2001', 'DD/MON/YYYY'))
  into (partition s21,partition s22)
  select * from sales partition(s22);
  select * from user_tab_partitions where table_name='SALES';


运维网声明 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.iyunv.com/thread-581799-1-1.html 上篇帖子: oracle 50个函数总结 下篇帖子: oracle 锁机制
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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