我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Oracle表空间详解

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Oracle表空间详解

1. 基本概念

oracle表分区是将一个大型表分割成更小、更易于管理的部分的技术。分区后的表被称为分区表,其中每个分区都可以独立地进行维护、管理和查询。表分区可基于表中的一列或多列,称为分区键,分区键的值确定了每行数据属于哪个分区。

使用分区具有以下优点:

  • (1)改善查询性能:由于表分区将数据分割成更小、更可管理的部分,对分区对象的查询可以仅搜索特定分区,提高检索速度。如在范围分区的情况下,可以更快地查询特定时间段的数据。
  • (2)维护方便:分而治之,每个分区都可以独立地进行维护和管理,更容易地维。如表的某个分区出现故障,需要修复数据,只修复该分区即可;又如在范围分区的情况下,可以更容易地删除或归档旧数据。
  • (3)可用性:实际各分区的数据是独立存放,如果表的某个分区出现故障,表在其他分区的数据仍然可用;
  • (4)均衡I/O:可把不同的分区映射到磁盘以平衡I/O,改善整个系统性能;并且可以更快地加载数据,因为可以并行加载多个分区。如在哈希分区的情况下,可以并行加载多个分区,从而大大提高了数据加载的速度。

Oracle数据库提供对表或索引的分区常用方法主要有三种:

  • 范围分区
  • Hash分区(散列分区)
  • 复合分区

先建三个表空间:

create tablespace ma_tra01 datafile 'D:\oracle\product\10.2.0\oradata\orcl\ma_tra01.dnf' size 50M; 
create tablespace ma_tra02 datafile 'D:\oracle\product\10.2.0\oradata\orcl\ma_tra02.dnf' size 50M; 
create tablespace ma_tra03 datafile 'D:\oracle\product\10.2.0\oradata\orcl\ma_tra03.dnf' size 50M;

2. 范围分区

范围分区就是对数据表中的某个值的范围进行分区,根据某个值的范围,决定将该数据存储在哪个分区上。如根据序号分区,根据业务记录的创建日期进行分区等。

e.g.

需求描述:有一个物料交易表,表名:material_transactions。该表将来可能有千万级的数据记录数。要求在建该表的时候使用分区表。 这时候我们可以使用序号分区三个区,每个区中预计存储三千万的数据,也可以使用日期分区,如每五年的数据存储在一个分区上。

  • 根据交易记录的序号分区建表
create table material_transactions ( 
transaction_id number primary key,
item_id number(8) not null,
item_description varchar2(300),
transaction_date date not null 
) 
partition by range (transaction_id) ( 
partition part_01 values less than(30000000) tablespace ma_tra01,
partition part_02 values less than(60000000) tablespace ma_tra02, 
partition part_03 values less than(maxvalue) tablespace ma_tra03); 
  • 根据交易日期分区建表
create table material_transactions (
transaction_id number primary key, 
item_id number(8) not null,
item_description varchar2(300), 
transaction_date date not null ) 
partition by range (transaction_date) (
partition part_01 values less than(to_date('2006-01-01','yyyy-mm-dd')) tablespace ma_tra01,
partition part_02 values less than(to_date('2010-01-01','yyyy-mm-dd')) tablespace ma_tra02,
partition part_03 values less than(maxvalue) tablespace ma_tra03); 

这样分别建了以交易序号和交易日期来分区的分区表。

  • 插入数据:每次插入数据的时候,系统将根据指定的字段的值来自动将记录存储到制定的分区(表空间)中。
insert into material_transactions values(1,12,'BOOKS1',sysdate); 
insert into material_transactions Values(2,12, 'BOOKS2',sysdate+30); 
insert into material_transactions values(3,12, 'BOOKS3',to_date('2006-05-30','yyyy-mm-dd')); 
insert into material_transactions values(4,12, 'BOOKS4',to_date('2007-06-23','yyyy-mm-dd')); 
insert into material_transactions values(5,12, 'BOOKS5',to_date('2011-02-26','yyyy-mm-dd')); 
insert into material_transactions values(6,12, 'BOOKS6',to_date('2011-04-30','yyyy-mm-dd')); 
Commit;
  • 查询分区表
select * from material_transactions partition(part_03) t

可以对分区表进行跟新或删除,默认情况下,oracle的分区表对于分区字段是不允许进行update操作的,如果有对分区字段行进update,就会报ORA-14402错误: 更新分区关键字列将导致分区的更改。但是可以通过打开表的row movement属性来允许对分区字段的update操作,但是这样会导致无效对象的产生,所以不推荐使用。可通过删除旧数据,插入新数据来解决。

还可以根据需求,使用两个字段的范围分布来分区,如partition by range ( transaction_id ,transaction_date), 分区条件中的值也做相应的改变。

  • 增加一个分区
Alter Table  material_transactions Add Partition part_04 Values Less Than (to_date('20150101','yyyymmdd')) Tablespace ma_tra04

增加分区的条件必须大于现有分区的最大条件值,否则会提示ORA-14074:分区界限必须调整为高于最后一个分区界限

  • 合并两个个分区
Alter Table material_transactions Merge Partitions part_01,part_02 Into Partition part_02;
  • 删除分区(数据也会被删除)

3. Hash分区(散列分区)

散列分区为通过指定分区编号来均匀分布数据的一种分区类型,因为通过在I/O设备上进行散列分区,使得这些分区大小一致。如将物料交易表的数据根据交易ID散列地存放在指定的三个表空间中:

create table material_transactions_hash (
transaction_id number primary key,
item_id number(8) not null,
item_description varchar2(300), 
transaction_date Date) 
partition by hash(transaction_id) (
partition part_01 tablespace ma_tra01, 
partition part_02 tablespace ma_tra02, 
partition part_03 tablespace ma_tra03); 

建表成功,此时插入数据,系统将按transaction_id将记录散列地插入三个分区中,这里也就是三个不同的表空间中。

4. 复合分区

有时需要根据范围分区后,每个分区内的数据再散列地分布在几个表空间中,这样我们就要使用复合分区。复合分区是先使用范围分区,然后在每个分区内 再使用散列分区的一种分区方法,如将物料交易的记录按时间分区,然后每个分区中的数据分三个子分区,将数据散列地存储在三个指定的表空间中:

create table material_transactions_test  (
transaction_id number primary key,
item_id number(8) not null,
item_description varchar2(300), 
transaction_date date ) 
partition by range(transaction_date) subpartition by hash(transaction_id) 
subpartitions 3 store in (ma_tra01,ma_tra02,ma_tra03) (
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) ); 

该例中,先是根据交易日期进行范围分区,然后根据交易的ID将记录散列地存储在三个表空间中。

分区表可以建立局部索引与全局索引,当分区表中出现许多事务并且要保证所有分区中的数据记录的唯一性时需要采用全局索引。

Create Index idx_matra_itemid On material_transactions(item_id) Local;
Create Index idx_matra_itemid On material_transactions(item_id);

到此这篇关于Oracle表空间详解的文章就介绍到这了,更多相关Oracle表空间内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Oracle表空间详解

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Oracle表空间详解

目录1. 基本概念2. 范围分区3. Hash分区(散列分区)4. 复合分区1. 基本概念oracle表分区是将一个大型表分割成更小、更易于管理的部分的技术。分区后的表被称为分区表,其中每个分区都可以独立地进行维护、管理和查询。表分区可基
2023-04-19
2024-04-02

Oracle 数据库表空间查询方法详解

Oracle 数据库表空间查询方法详解在使用 Oracle 数据库时,了解数据库表空间是非常重要的。表空间是 Oracle 数据库中用来存储表和索引数据的逻辑结构,它相当于数据库中数据存储的物理组织单元。在进行数据库管理和性能优化时,经常
Oracle 数据库表空间查询方法详解
2024-03-02

oracle 创建表空间详细介绍

Oracle是一种关系型数据库管理系统,它使用表空间来存储数据和索引。表空间是逻辑上的概念,它是由一个或多个数据文件组成的。一个数据文件是操作系统上的一个文件,它实际上存储了表空间中的数据。一个表空间可以包含多个数据文件,这些文件可以分布在
2023-08-17

Oracle创建表空间

建立表空间并设置为默认表空间(最大32GB)1. create temporary tablespace test tempfile ‘/home/oracle/oradata/abc/test.dbf‘ size 50m autoextend on n

	Oracle创建表空间
2021-02-11

Oracle 表空间查询:查看表所在的表空间

标题:Oracle 表空间查询:查看表所在的表空间,需要具体代码示例Oracle数据库是企业级数据库管理系统中常用的一种,其中表空间是数据库中存储数据的逻辑结构,表空间在数据库中起着重要的作用。在Oracle数据库中,要查看表所在的表空间
Oracle 表空间查询:查看表所在的表空间
2024-03-03

Oracle表空间分配策略解析

Oracle表空间分配策略解析概述:在Oracle数据库中,表空间是用来存储表、索引和其他数据库对象的逻辑存储单元。表空间的合理分配和管理对数据库的性能和稳定性具有重要影响。本文将从表空间的概念开始,详细解析Oracle中的表空间分配策略
Oracle表空间分配策略解析
2024-03-03

编程热搜

目录