oracle列分区,Oracle数据库分区--实例

分区表通过对分区列进行判断,把满足不同条件的分区列对应的记录保存在不同的分区中。

一、何为分区表

164fbbb272bb986d85a7bc887f59aea3.png

什么情况下会使用分区表?表中已有大量数据,或预计到表中将会保存大量的数据

可以按照预期(月份、区域、dml)对表中的数据执行查询和更新

什么是分区键?

创建分区表,需要分区键;分区表的每一列都明确的归属一个分区,划分的依据就是分区键。

有如下特点:由1~~16个列顺序组成

不能包含Level、RowId、MisLabel伪列

不能包含为空的列

Oracle支持哪些类型的分区方式?范围分区——将分区表中的记录映射到基于分区键列值范围的分区,例如:按照月份划分

散列分区——基于分区键的散列值进行映射到分区中,也就是字段的hash值进行均匀分布,尽可能的实现各分区所散列的数据相等。

列表分区——根据分区键的值明确定义其归属的分区,例如:华北、东北等区块

组合范围-散列分区——范围和散列的组合,例如:按月份对业绩进行分区,并用散列分区

组合范围-列表分区——范围和列表的组合,例如:按月份对业绩进行分区,并用地域分区

372befefd240fce189e71db98565374a.png

d14df66ae493c9be0e05d090b7aad525.png

b70519ceebe56d91d375d11d67633c71.png

d915042f62d489bf995605ccfef95f29.png

37dbcb6e40bf60e1ef4550ec3bbc2bfa.png

什么情况下使用分区表,在多大的数据量时?记录数在1000w以上

表中数据有百万,但每条记录的数量比较大

二、应用场景

需求:信用卡消费流程

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=--创建用户Credit

create user credit identified by pwd default tablespace users temporary tablespace temp;

--向Credit授权

grant create session to credit;

grant create table to credit;

grant create sequence to credit;

grant create user,alter user,drop user to credit;

--向用户credit授予表空间users的配额

alter user credit quota 100M on users;

fc4894d84c5d2ed9899c493ddb5033d0.png

确定分区方案

首先需要确定分区的依据和分区的数量,针对信用卡可以按照consume_date进行分区

3d1f0890b81c10b4e2d7836acc7643e9.pngcreate tablespace creditTab1

datafile 'E:\app\Administrator\admin\orcl\creditDataFile01.dbf' size 50M;

create tablespace creditTab2

datafile 'E:\app\Administrator\admin\orcl\creditDataFile02.dbf' size 50M;

create tablespace creditTab3

datafile 'E:\app\Administrator\admin\orcl\creditDataFile03.dbf' size 50M;

create tablespace creditTab4

datafile 'E:\app\Administrator\admin\orcl\creditDataFile04.dbf' size 50M;

create tablespace creditTab5

datafile 'E:\app\Administrator\admin\orcl\creditDataFile05.dbf' size 50M;

create tablespace creditTab6

datafile 'E:\app\Administrator\admin\orcl\creditDataFile06.dbf' size 50M;

create tablespace creditTab7

datafile 'E:\app\Administrator\admin\orcl\creditDataFile07.dbf' size 50M;

create tablespace creditTab8

datafile 'E:\app\Administrator\admin\orcl\creditDataFile08.dbf' size 50M;

create tablespace creditTab9

datafile 'E:\app\Administrator\admin\orcl\creditDataFile09.dbf' size 50M;

create tablespace creditTab10

datafile 'E:\app\Administrator\admin\orcl\creditDataFile10.dbf' size 50M;

create tablespace creditTab11

datafile 'E:\app\Administrator\admin\orcl\creditDataFile11.dbf' size 50M;

create tablespace creditTab12

datafile 'E:\app\Administrator\admin\orcl\creditDataFile12.dbf' size 50M;--向用户credit授予表空间配额

alter user credit quota 50M on creditTab1;

alter user credit quota 50M on creditTab2;

alter user credit quota 50M on creditTab3;

alter user credit quota 50M on creditTab4;

alter user credit quota 50M on creditTab5;

alter user credit quota 50M on creditTab6;

alter user credit quota 50M on creditTab7;

alter user credit quota 50M on creditTab8;

alter user credit quota 50M on creditTab9;

alter user credit quota 50M on creditTab10;

alter user credit quota 50M on creditTab11;

alter user credit quota 50M on creditTab12;

创建分区,按照consume_date划分,共12个分区drop table credit.credit2018;

create table credit.credit2018

(consume_id  number,

card_no      varchar2(50),

shop         varchar2(50),

goods        varchar2(50),

amount       number(10,2),

consume_date date

)

partition by range(consume_date)

(

partition partition1 values less than(to_date('2018-02-01','yyyy-mm-dd')) tablespace creditTab1,

partition partition2 values less than(to_date('2018-03-01','yyyy-mm-dd')) tablespace creditTab2,

partition partition3 values less than(to_date('2018-04-01','yyyy-mm-dd')) tablespace creditTab3,

partition partition4 values less than(to_date('2018-05-01','yyyy-mm-dd')) tablespace creditTab4,

partition partition5 values less than(to_date('2018-06-01','yyyy-mm-dd')) tablespace creditTab5,

partition partition6 values less than(to_date('2018-07-01','yyyy-mm-dd')) tablespace creditTab6,

partition partition7 values less than(to_date('2018-08-01','yyyy-mm-dd')) tablespace creditTab7,

partition partition8 values less than(to_date('2018-09-01','yyyy-mm-dd')) tablespace creditTab8,

partition partition9 values less than(to_date('2018-10-01','yyyy-mm-dd')) tablespace creditTab9,

partition partition10 values less than(to_date('2018-11-01','yyyy-mm-dd')) tablespace creditTab10,

partition partition11 values less than(to_date('2018-12-01','yyyy-mm-dd')) tablespace creditTab11,

partition partition12 values less than(maxvalue) tablespace creditTab12

);

例如:插入了2018-01-01的消费记录则会保存在partition1分区中,大于2018-12-01的记录会被记录到partition12分区中。--查看分区表信息

select * from dba_part_tables t where t.owner='CREDIT';

partitioning_type:分区方法——包括range,hash,system,list

subpartitioning_type:组合分区方法——包括none,hash,system,list

partition_count:表中分区的数量

def_subpartition_count:在组合分区中,子分区数量

partitioning_key_count:在组合分区中,子分区中键中包含的列数量--查看分区表中分区信息

select * from dba_tab_partitions t where t.table_owner='CREDIT';

composite:是否为组合分区表

subpartition_count:如果为组合分区时,包含的子分区数

high_value:分区上限

high_value_length:分区上限值的长度

partition_position:分区在表中的位置--创建全局范围分区索引

create index credit.idx_sonsume2018

on credit.credit2018(consume_date)

global partition by range(consume_date)

(

partition partition1 values less than(to_date('2018-02-01','yyyy-mm-dd')) tablespace creditTab1,

partition partition2 values less than(to_date('2018-03-01','yyyy-mm-dd')) tablespace creditTab2,

partition partition3 values less than(to_date('2018-04-01','yyyy-mm-dd')) tablespace creditTab3,

partition partition4 values less than(to_date('2018-05-01','yyyy-mm-dd')) tablespace creditTab4,

partition partition5 values less than(to_date('2018-06-01','yyyy-mm-dd')) tablespace creditTab5,

partition partition6 values less than(to_date('2018-07-01','yyyy-mm-dd')) tablespace creditTab6,

partition partition7 values less than(to_date('2018-08-01','yyyy-mm-dd')) tablespace creditTab7,

partition partition8 values less than(to_date('2018-09-01','yyyy-mm-dd')) tablespace creditTab8,

partition partition9 values less than(to_date('2018-10-01','yyyy-mm-dd')) tablespace creditTab9,

partition partition10 values less than(to_date('2018-11-01','yyyy-mm-dd')) tablespace creditTab10,

partition partition11 values less than(to_date('2018-12-01','yyyy-mm-dd')) tablespace creditTab11,

partition partition12 values less than(maxvalue) tablespace creditTab12

);

--查看分区索引

select * from dba_part_indexes t where t.owner='CREDIT';

--查看分区索引中分区的信息

select * from dba_ind_partitions t where t.index_owner='CREDIT';

locality:区别本地、全局索引--创建本地分区索引

create index idx_consume_date on credit.credit2018(consume_date) local;

查看详细信息同上。

创建散列分区表:有些情况下,用户只希望对拥有大型数据表进行分区,但并不要求把记录放置在指定的分区中,此时可以采用散列分区的方式,由系统分区键上的值分配到不同的分区中。

日志表:

c4dfbe8b6dd4a754cc4874583dc0974e.png--创建3个分区

create tablespace tabLog1

datafile 'E:\app\Administrator\admin\orcl\logDataFile01.dbf' size 50M;

create tablespace tabLog2

datafile 'E:\app\Administrator\admin\orcl\logDataFile02.dbf' size 50M;

create tablespace tabLog3

datafile 'E:\app\Administrator\admin\orcl\logDataFile03.dbf' size 50M;

--创建散列分区表

create table hashPartitionLog

(

log_id       number,

log_text     varchar2(4000),

log_date     date

)

partition by hash(log_id)

(

partition partition1 tablespace tabLog1,

partition partition2 tablespace tabLog2,

partition partition3 tablespace tabLog3

);

查看分区信息同上。--创建全局散列分区索引

create index idx_log_id

on hashPartitionLog(Log_Id)

global partition by hash(log_id)

(

partition partition1 tablespace tabLog1,

partition partition2 tablespace tabLog2,

partition partition3 tablespace tabLog3

);

创建列表分区表:将销售市场按区域划分,黑龙江、吉林和辽宁为东北大区part_db,北京、天津、河北为华北大区part_hb等。

80f7f2d4a0212652c4c182a8cc8f1adc.png--创建4个分区

create tablespace tabMarket1

datafile 'E:\app\Administrator\admin\orcl\marketDataFile01.dbf' size 50M;

create tablespace tabMarket2

datafile 'E:\app\Administrator\admin\orcl\marketDataFile02.dbf' size 50M;

create tablespace tabMarket3

datafile 'E:\app\Administrator\admin\orcl\marketDataFile03.dbf' size 50M;

create tablespace tabMarket4

datafile 'E:\app\Administrator\admin\orcl\marketDataFile04.dbf' size 50M;

--创建列表分区表

create table saleMarket

(

area_id      number,

area_name    varchar2(100),

description  varchar2(4000)

)partition by list(area_name)

(

partition part_db values('黑龙江','吉林','辽宁') tablespace tabMarket1,

partition part_hb values('北京','天津','河北') tablespace tabMarket2,

partition part_hn values('广东','广西','海南') tablespace tabMarket3,

partition part_qt values(default) tablespace tabMarket4

);

查看分区信息同上。

创建组合范围-散列分区表

组合分区就是在分区中再创建子分区。--1.首先为每个散列子分区创建各自的表空间

create tablespace hashTab1

datafile 'E:\app\Administrator\admin\orcl\hashDataFile01.dbf' size 50M;

create tablespace hashTab2

datafile 'E:\app\Administrator\admin\orcl\hashDataFile02.dbf' size 50M;

create tablespace hashTab3

datafile 'E:\app\Administrator\admin\orcl\hashDataFile03.dbf' size 50M;

--2.然后向用户credit授予表空间配额

alter user credit quota 50M on hashTab1;

alter user credit quota 50M on hashTab2;

alter user credit quota 50M on hashTab3;

--3.创建表consume2018

drop table credit.credit2018;

create table credit.credit2018

(

consume_id        number,

card_no           varchar2(50),

shop              varchar2(50),

goods             varchar2(50),

amount            number(10,2),

consume_date      date

)

partition by range(consume_date)

subpartition by hash(consume_id)

subpartitions 3 store in (hashTab1,hashTab2,hashTab3)

(

partition partition1 values less than(to_date('2018-02-01','yyyy-mm-dd')) tablespace creditTab1,

partition partition2 values less than(to_date('2018-03-01','yyyy-mm-dd')) tablespace creditTab2,

partition partition3 values less than(to_date('2018-04-01','yyyy-mm-dd')) tablespace creditTab3,

partition partition4 values less than(to_date('2018-05-01','yyyy-mm-dd')) tablespace creditTab4,

partition partition5 values less than(to_date('2018-06-01','yyyy-mm-dd')) tablespace creditTab5,

partition partition6 values less than(to_date('2018-07-01','yyyy-mm-dd')) tablespace creditTab6,

partition partition7 values less than(to_date('2018-08-01','yyyy-mm-dd')) tablespace creditTab7,

partition partition8 values less than(to_date('2018-09-01','yyyy-mm-dd')) tablespace creditTab8,

partition partition9 values less than(to_date('2018-10-01','yyyy-mm-dd')) tablespace creditTab9,

partition partition10 values less than(to_date('2018-11-01','yyyy-mm-dd')) tablespace creditTab10,

partition partition11 values less than(to_date('2018-12-01','yyyy-mm-dd')) tablespace creditTab11,

partition partition12 values less than(maxvalue) tablespace creditTab12

);

查看分区信息同上。查看分区信息时可以看出,分区数量为12,子分区数量为3

7a60e3f7f71d0e2c7d793e16fa601340.png

还有一种是为所有分区创建相同的子分区。--为所有分区创建相同的子分区

drop table credit.credit2018;

create table credit.credit2018

(

consume_id        number,

card_no           varchar2(50),

shop              varchar2(50),

goods             varchar2(50),

amount            number(10,2),

consume_date      date

)

partition by range(consume_date)

subpartition by hash(consume_id)

(

partition partition1 values less than(to_date('2018-02-01','yyyy-mm-dd')) tablespace creditTab1,

partition partition2 values less than(to_date('2018-03-01','yyyy-mm-dd')) tablespace creditTab2

(

subpartition sub_part_1 tablespace hashTab1,

subpartition sub_part_2 tablespace hashTab2,

subpartition sub_part_3 tablespace hashTab3

),

partition partition3 values less than(to_date('2018-04-01','yyyy-mm-dd')) tablespace creditTab3,

partition partition4 values less than(to_date('2018-05-01','yyyy-mm-dd')) tablespace creditTab4,

partition partition5 values less than(to_date('2018-06-01','yyyy-mm-dd')) tablespace creditTab5,

partition partition6 values less than(to_date('2018-07-01','yyyy-mm-dd')) tablespace creditTab6,

partition partition7 values less than(to_date('2018-08-01','yyyy-mm-dd')) tablespace creditTab7,

partition partition8 values less than(to_date('2018-09-01','yyyy-mm-dd')) tablespace creditTab8,

partition partition9 values less than(to_date('2018-10-01','yyyy-mm-dd')) tablespace creditTab9,

partition partition10 values less than(to_date('2018-11-01','yyyy-mm-dd')) tablespace creditTab10,

partition partition11 values less than(to_date('2018-12-01','yyyy-mm-dd')) tablespace creditTab11,

partition partition12 values less than(maxvalue) tablespace creditTab12

);

查看分区信息得知,只有分区partition2中包含了3个子分区,其他分区中都是没有子分区的。

69407d691dd3dcea05ed756c87ae0814.png

组合范围-列表分区--为每个散列子分区创建各自的表空间

create tablespace listTab1

datafile 'E:\app\Administrator\admin\orcl\listDataFile01.dbf' size 50M;

create tablespace listTab2

datafile 'E:\app\Administrator\admin\orcl\listDataFile02.dbf' size 50M;

create tablespace listTab3

datafile 'E:\app\Administrator\admin\orcl\listDataFile03.dbf' size 50M;

create tablespace listTab4

datafile 'E:\app\Administrator\admin\orcl\listDataFile04.dbf' size 50M;

--向用户credit授予表空间配额

alter user credit quota 50M on listTab1;

alter user credit quota 50M on listTab2;

alter user credit quota 50M on listTab3;

alter user credit quota 50M on listTab4;

--创建表

create table credit.rangeListPartTable

(

id        number,

name      varchar2(4000)

)

partition by range(id)

subpartition by list(name)

subpartition template

(

subpartition part_a values('a') tablespace listTab1,

subpartition part_b values('b') tablespace listTab2,

subpartition part_c values('c') tablespace listTab3,

subpartition part_d values(default) tablespace listTab4

)

(

partition partition1 values less than(100) tablespace listTab1,

partition partition2 values less than(200) tablespace listTab2,

partition partition3 values less than(300) tablespace listTab3,

partition partition4 values less than(maxvalue) tablespace listTab4

);

查看分区信息同上。

查询分区中的记录--日志表,查询使用

insert into hashpartitionLog values(1,'logText1',sysdate);

insert into hashpartitionLog values(2,'logText2',sysdate);

insert into hashpartitionLog values(3,'logText3',sysdate);

insert into hashpartitionLog values(4,'logText4',sysdate);

insert into hashpartitionLog values(5,'logText5',sysdate);

insert into hashpartitionLog values(6,'logText6',sysdate);

insert into hashpartitionLog values(7,'logText7',sysdate);

insert into hashpartitionLog values(8,'logText8',sysdate);

insert into hashpartitionLog values(9,'logText9',sysdate);

insert into hashpartitionLog values(10,'logText10',sysdate);

commit;

--查看分区表中的partition1的数据

select * from hashpartitionLog partition(partition1);

cfffdbfee5c1610a6e3c3276df1ef22e.png

省略:添加、收缩、合并、拆分、阶段、重命名、删除表分区;添加、重新编译、拆分、重命名、删除索引分区。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/372128.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ZK实际应用:MVVM –与ZK客户端API一起使用

在之前的文章中,我们使用ZK的MVVM实现了以下功能: 将数据加载到表中 使用表单绑定保存数据 删除条目并以编程方式更新视图 ZK MVVM和ZK MVC实现方式之间的主要区别是,我们不直接在controller(ViewModel)类中访问和操…

终极JPA查询和技巧列表–第1部分

我们可以在Internet上找到一些JPA“如何做”,在本博客的此处,教您如何使用JPA执行多项任务。 通常,我看到有人问有关使用JPA进行查询的问题。 通常,为了回答此类问题,提供了几个链接,以尝试找到该问题的解决…

Spring集成–第2节–更多世界

这是Spring Integration Session 1的后续活动 第一部分是使用Spring Integration的简单Hello World应用程序。 我想通过考虑其他一些方案来进一步介绍它。 因此,对Hello World应用程序的第一个更改是添加网关组件。 要快速重新访问较早的测试程序,请执行…

oracle 会话实例,返璞归真:Oracle实例级别和会话级别的参数设置辨析

杨廷琨(yangtingkun)云和恩墨 CTO高级咨询顾问,Oracle ACE 总监,ITPUB Oracle 数据库管理版版主参数文件是Oracle数据库文件中级别最低,也是最基本的文件,但是也是数据库实例启动第一个涉及的文件。如果参数文件缺失或者某些参数设…

在多节点集群中运行Cassandra

这篇文章收集了我在多节点中设置Apache Cassandra集群的步骤。 在设置集群时,我已经参考了Cassandra Wiki和Datastax文档。 详细介绍了以下过程,分享了我建立群集的经验。 设置第一个节点 添加其他节点 监视集群– nodetool , jConsole &am…

Oracle 添加 scott 示例用户

学习SQL有一段时间了,但是也忘记的差不多了,今天有赶紧复习复习,然后发现一个问题,为啥之前看的视频教程,马士兵用的Oracle有scott用户和那些表格,而我的没有?难道是Oracle取消了?然…

win8oracle10g安装报错,Win8电脑安装Oracle 10g提示程序异常终止的解决方法

有win8系统用户反映说在安装Oracle 10g的时候,选择高级安装之后,就弹出一个窗口,提示程序异常终止,发生内部错误,导致Oracle 10g安装失败,该怎么解决这样的问题呢?下面随小编一起来看看Win8电脑…

<avatar: frontiers of pandora>技术overview

https://www.eurogamer.net/digitalfoundry-2023-avatar-frontiers-of-pandora-and-snowdrop-the-big-developer-tech-interview https://www.youtube.com/watch?vLRI_qgVSwMY&t394s 主要来自euro gamer上digital foundry对于avatar的开发团队Massive工作室的采访&#xf…

iOS 启动连续闪退保护方案

版权声明:本文由刘笑江原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/79 来源:腾云阁 https://www.qcloud.com/community 一.引言 “如果某个实体表现出以下任何一种特性,它就具备…

实战Java内存泄漏问题分析 -- hazelcast2.0.3使用时内存泄漏 -- 2

hazelcast 提供了3中方法调用startCleanup:第一种是在ConcuurentMapManager的构造函数中,通过调用node的executorManager中的ScheduledExecutorService来创建每秒运行一次cleanup操作的线程(代码例如以下)。因为这是ConcuurentMapManager构造…

@SuppressLint(NewApi)和@TargetApi()的区别

转自:http://blog.csdn.NET/wbshuang09/article/details/44920549在Android代码中,我们有时会使用比我们在AndroidManifest中设置的android:minSdkVersion版本更高的方法,此时编译器会提示警告,解决方法是在方法上加上SuppressLin…

零基础自学编程前需要知道的知识

你是否适合编程?学习编程后能做什么?如何选择编程语言?有哪些免费的线上学习网站推荐?今天这篇好文将那些自学编程前需要了解和思考的问题都记录下来,希望能给那些刚刚开始或正准备自学编程的朋友们带去一些启发。 你是否适合自学编程 自学编程会是一个漫长而艰…

Eclipse设置黑色主题

1点击help--->install new software 2输入 http://eclipse-color-theme.github.com/update 3下载安装eclipse color theme插件如下图 4完成后点击windows--->preferences------>Appearance下多了一个Color Theme 5,点击选择喜欢的主题即可,也可以自己下载主…

wcf rest系列文章

http://www.cnblogs.com/artech/archive/2012/02/15/wcf-rest.html 需要注意的是,发布的服务,可以在web behavior中指定显示help页面。 http://localhost/ApplicationName/ServiceName.svc/help 需要注意的是,访问.svc的页面一定不要多加/;否…

登录:应用程序错误通知

几个月前,当我进行大型应用程序重构时,发现用于记录日志的基于log4j的代码确实令人讨厌,重复了数百次: if (LOG.isDebugEnabled()) {LOG.debug("Logging some stuff " stuff); }我想摆脱isXXXEnabled,这就…

如何分析线程转储–线程堆栈跟踪

本文是“ 线程转储”分析系列的第5部分。 到目前为止,您已经了解了线程的基本原理以及它们与Java EE容器和JVM的交互。 您还学习了HotSpot和IBM Java VM的不同线程转储格式。 现在是您深入分析过程的时候了。 为了使您能够从线程转储中快速识别问题模式,…

设计模式学习笔记(十三:原型模式)

1.1概述 用原型实例指定创建对象的种类,并且通过复制这些原型创建新的对象。这就是原型模式的定义。 在某些情况下,可能不希望反复使用类的构造方法创建许多对象,而是希望使用该类创建一个对象后,以该对象为原型得到该对象的若干个…

翻译的一篇关于学习编程语言的小文章

Top programming languages to get a job in Toronto in 2017 在程序开发人员和软件工程师中最容易被提及的问题之一就是:“我要学的下一门编程语言该是谁?” 我想去选一个编程语言,我希望你能给我一些关于经常使用到的编程语言的建议&#x…

从linux内核启动,学习Linux内核启动过程:从start_kernel到init

一、实验步骤:1:运行menuos:a)cd LinuxKernel/b)qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img启动后启动了MenuOS。2:使用gdb调试跟踪menuos内核启动和运行过程;a)qemu -kernel linux-3.18.6/arch/x86/bo…

linux强制回收内存,Linu系统cache强制回收

LINUX的内存管理机制,一般情况下不需要特意去释放已经使用的cache。Cache机制的存在,使得Linux对磁盘的读写速度是有较大的好处的。 在 Linux 操作系统中,当应用程序需要读取文件中的数据时,操作系统先分配一些内存,将…