做旅游的网站有哪些/怎么做网络宣传推广
文章目录
- 前言
- 一、准备工作
- 二、展现job_history表的数据
- 三、对hr_job_history表进行范围分区
- 1.根据某个字段值创建分区
- (1)创建分区表
- (2)插入数据
- (3)查询各分区表记录
- 2.根据时间段创建分区
- (1)创建分区表
- (2)插入数据
- (3)查询各分区表记录
- 四、对hr_job_history表进行列表分区
- 1.分区
- 2.插入数据与查询
- 五、对hr_job_history表进行散列分区
- 1.分区
- 2.插入数据与查询
- 六、对hr_job_history表进行组合范围散列分区
- 1.分区
- 2.插入数据
- 3.查询各分区表及子分区表
- (1)查询hr_job_part01分区表及其子分区
- 七、对hr_job_history表进行复合范围散列分区
- 1.分区
- 2.插入数据
- 3.查询各分区表及子分区表
- 总结
前言
由于创建一个新的数据表难以做到同时对一个数据表实现不同的分区策略,所以在这里我使用的是oracle的hr用户(系统自带的用户,可能需要进行解锁)下的job_history表中的数据,将其直接插入到一个新的数据表hr_job_history中(目的:为了不改变job_history表),之后实现不同分区策略的源数据表均为hr_job_history。
一、准备工作
oracle自带两个默认的用户:
SCOTT用户密码:tiger
hr用户密码:hr
解锁oracle数据库下的SCOTT和hr用户的方法(这里只阐述解锁hr):
(1)登陆oracle数据库:
Connect /as sysdba
(2)解锁hr用户:(对于SCOTT只需修改用户名即可,下同)
Alter user hr identified by hr account unlock;
(3)连接hr用户下的数据库:
connect hr/hr;
(4)查看hr用户中所有的表:
select table_name from user_tables;
二、展现job_history表的数据
select *
from job_history;
三、对hr_job_history表进行范围分区
范围分区将数据基于指定的范围映射到不同分区,创建表时可以创建同时可以创建分区,当范围变大或想让范围变得更小时,可以添加分区。
这个范围是你在创建分区时指定的分区键决定的。这种分区方式是最为常用的,并且分区键经常采用日期。
1.根据某个字段值创建分区
(1)创建分区表
(按照employee_id范围划分)
create table hr_job_history(employee_id number(6) not null,start_date date,end_date date,job_id varchar2(10),department_id number(4)
)
partition by range(employee_id)(partition hr_job_part01 values less than (140), partition hr_job_part02 values less than (180), partition hr_job_part03 values less than (maxvalue)
);
(2)插入数据
(将job_history表中的数据全部插入到hr_job_history表中)
insert into
hr_job_history
select * from job_history;
(3)查询各分区表记录
select *
from hr_job_history partition (hr_job_part01);
select *
from hr_job_history partition (hr_job_part02);
select *
from hr_job_history partition (hr_job_part03);
2.根据时间段创建分区
(1)创建分区表
(按照时间start_date范围划分)
create table hr_job_history(employee_id number(6) not null,start_date date,end_date date,job_id varchar2(10),department_id number(4)
)
partition by range(start_date)(partition hr_job_part01 values less than (to_date('2000-01-01','YYYY-MM-DD')), partition hr_job_part02 values less than (to_date('2005-01-01','YYYY-MM-DD')), partition hr_job_part03 values less than (to_date('2010-01-01','YYYY-MM-DD'))
);
(2)插入数据
(将job_history表中的数据全部插入到hr_job_history表中)
insert into
hr_job_history
select * from job_history;
(3)查询各分区表记录
select *
from hr_job_history partition (hr_job_part01);
select *
from hr_job_history partition (hr_job_part02);
select *
from hr_job_history partition (hr_job_part03);
四、对hr_job_history表进行列表分区
该分区的特点是某列的值只有几个,基于这样的特点我们可以采用列表分区。
1.分区
(按照department_id这一列的值进行列表分区)
create table hr_job_history(employee_id number(6) not null,start_date date,end_date date,job_id varchar2(10),department_id number(4)
)
partition by list(department_id)(partition hr_job_part01 values(20,50),partition hr_job_part02 values(60,80),partition hr_job_part03 values(90,110)
);
2.插入数据与查询
(插入数据和查询各分区表数据的sql命令与范围分区的相同)
五、对hr_job_history表进行散列分区
这类分区是在列值上使用散列算法,以确定将行放入哪个分区中。当列的值没有合适的条件时,建议使用散列分区。
散列分区为通过指定分区编号来均匀分布数据的一种分区类型,因为通过在I/O设备上进行散列分区,使得这些分区大小一致。
Oracle中如果你要使用hash分区,只需指定分区的数量即可。建议分区的数量采用2的n次方,这样可以使得各个分区间数据分布更加均匀。
1.分区
(对employee_id这一列值使用hash算法,分区数量为3)
create table hr_job_history(employee_id number(6) not null,start_date date,end_date date,job_id varchar2(10),department_id number(4)
)
partition by hash(employee_id)(partition hr_job_part01,partition hr_job_part02,partition hr_job_part03
);
2.插入数据与查询
(插入数据和查询各分区表数据的sql命令与范围分区的相同)
六、对hr_job_history表进行组合范围散列分区
(即:范围-列表分区)
这种分区是基于范围分区和列表分区,表首先按某列进行范围分区,然后再按某列进行列表分区,分区之中的分区被称为子分区。
1.分区
(先对start_date进行范围分区,再对department_id进行列表分区)
create table hr_job_history(employee_id number(6) not null,start_date date,end_date date,job_id varchar2(10),department_id number(4)
)
partition by range(start_date) subpartition by list(department_id)(partition hr_job_part01 values less than (to_date('2000-01-01','YYYY-MM-DD'))(
subpartition hr_job_part011 values(20,50),
subpartition hr_job_part021 values(60,80),
subpartition hr_job_part031 values(90,110)
),partition hr_job_part02 values less than (to_date('2005-01-01','YYYY-MM-DD'))(
subpartition hr_job_part012 values(20,50),
subpartition hr_job_part022 values(60,80),
subpartition hr_job_part032 values(90,110)
),partition hr_job_part03 values less than (to_date('2010-01-01','YYYY-MM-DD'))(
subpartition hr_job_part013 values(20,50),
subpartition hr_job_part023 values(60,80),
subpartition hr_job_part033 values(90,110)
));
2.插入数据
insert into
hr_job_history
select * from job_history;
3.查询各分区表及子分区表
(分区表的记录条数等于其各子分区记录的总条数)
(1)查询hr_job_part01分区表及其子分区
注:其余两个分区表及其子分区表按查询分区表1的方式进行查询!
七、对hr_job_history表进行复合范围散列分区
(即:范围—散列分区)
这种分区是基于范围分区和散列分区,表首先按某列进行范围分区,然后再按某列进行散列分区。分区之中的分区被称为子分区。
1.分区
(先对start_date进行范围分区,再对employee_id进行列表分区)
create table hr_job_history(employee_id number(6) not null,start_date date,end_date date,job_id varchar2(10),department_id number(4)
)
partition by range(start_date) subpartition by hash(employee_id)(partition hr_job_part01 values less than (to_date('2000-01-01','YYYY-MM-DD'))(
subpartition hr_job_part011,
subpartition hr_job_part021,
subpartition hr_job_part031
),partition hr_job_part02 values less than (to_date('2005-01-01','YYYY-MM-DD'))(
subpartition hr_job_part012,
subpartition hr_job_part022,
subpartition hr_job_part032
),partition hr_job_part03 values less than (to_date('2010-01-01','YYYY-MM-DD'))(
subpartition hr_job_part013,
subpartition hr_job_part023,
subpartition hr_job_part033
));
2.插入数据
insert into
hr_job_history
select * from job_history;
3.查询各分区表及子分区表
(分区表的记录条数等于其各子分区记录的总条数)
查询hr_job_part01分区表及其子分区:
注:其余两个分区表及其子分区表按查询分区表1的方式进行查询!
到此集中式数据库的三种常见分区方式及两种复合分区方式已全部演示完!
总结
本文讲述了如何在Oacle数据库中创建简单的数据表,对分区键应用不同的分区规则,实现不同的分区策略。
是对上篇博文https://blog.csdn.net/qq_47527477/article/details/120293858?spm=1001.2014.3001.5502
“在Win10环境下安装Oracle19c数据库,并使用Navicat与PL/SQL连接上数据库”的延续!
后续会继续更新有关Oracle数据库及分布式数据库的内容!
(注:第六次发文,如有错误和疑问,欢迎在评论区指出,再次感谢!)
——2021.09.23