返回顶部
首页 > 资讯 > 数据库 >Oracle表空间详解
  • 255
分享到

Oracle表空间详解

Oracle表空间介绍Oracle表空间 2023-04-19 05:04:28 255人浏览 八月长安
摘要

目录1. 基本概念2. 范围分区3. Hash分区(散列分区)4. 复合分区1. 基本概念 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表空间内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

您可能感兴趣的文档:

--结束END--

本文标题: Oracle表空间详解

本文链接: https://lsjlt.com/news/201640.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Oracle表空间详解
    目录1. 基本概念2. 范围分区3. Hash分区(散列分区)4. 复合分区1. 基本概念 oracle表分区是将一个大型表分割成更小、更易于管理的部分的技术。分区后的表被称为分区表,其中每个分区都可以独立地进行维护、管...
    99+
    2023-04-19
    Oracle表空间介绍 Oracle表空间
  • oracle表空间扩容详情
    目录1、表空间容量指标查询2、表空间扩容方式1:手工改变已存在数据文件的大小 方式2:允许已存在的数据文件自动增长 方式3:增加数据文件 1、表空间容量指标查询 SELEC...
    99+
    2024-04-02
  • Oracle表空间
    一学三思三敲才能懂,才能长期有效的记忆    起初学习Oracle的时候,已经了解Oracle的优点,比如分布式管理,轻松协调;优越的性能;支持大数据的格式;还有一点...
    99+
    2024-04-02
  • 怎么理解Oracle表空间
    这篇文章主要讲解了“怎么理解Oracle表空间”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么理解Oracle表空间”吧!1. 查询当前所有表空...
    99+
    2024-04-02
  • Oracle 数据库表空间查询方法详解
    Oracle 数据库表空间查询方法详解 在使用 Oracle 数据库时,了解数据库表空间是非常重要的。表空间是 Oracle 数据库中用来存储表和索引数据的逻辑结构,它相当于数据库中数...
    99+
    2024-03-02
    查询 数据库 oracle sql语句
  • oracle之表空间
    1、创建表空间sqlplus / as sysdba //以dba的身份进库startup //开启数据库create tablespace db_work //创建名为db_work的表空间d...
    99+
    2024-04-02
  • oracle 创建表空间详细介绍
    Oracle是一种关系型数据库管理系统,它使用表空间来存储数据和索引。表空间是逻辑上的概念,它是由一个或多个数据文件组成的。一个数据...
    99+
    2023-08-17
    Oracle
  • oracle 表移动表空间
    在oracle中有时需要把表移动到其他表空间中,下面是移动的步骤。 首先,使用下面的命令移动: alter table table_name move tablespace tablespace_nam...
    99+
    2024-04-02
  • 怎么理解ORACLE MOVE 表空间
    怎么理解ORACLE MOVE 表空间,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。move一个表到另外一个表空间时,索引...
    99+
    2024-04-02
  • oracle创建表空间,临时表空间,用户
    create tablespace a_dat datafile 'D:\oracle\product\10.2.0\oradata\orcl\a_dat.dbf' size 1024m autoexten...
    99+
    2024-04-02
  • Oracle 表空间查询:查看表所在的表空间
    标题:Oracle 表空间查询:查看表所在的表空间,需要具体代码示例 Oracle数据库是企业级数据库管理系统中常用的一种,其中表空间是数据库中存储数据的逻辑结构,表空间在数据库中起着...
    99+
    2024-03-03
    查询 oracle 表空间 sql语句
  • Oracle创建表空间
    建立表空间并设置为默认表空间(最大32GB) 1. create temporary tablespace test tempfile ‘/home/oracle/oradata/abc/test.dbf‘ size 50m aut...
    99+
    2021-02-11
    Oracle创建表空间 数据库入门 数据库基础教程 数据库 mysql
  • oracle创建表空间
    drop tablespace qb including contents and datafiles; DROP TABLE...
    99+
    2024-04-02
  • Oracle传输表空间
    一、简介可传输表空间(还有个集)最大的优势是其速度比export/import或unload/load要快的多。因为可传输表空间主要是复制数据文件到目标路径,然后再使用export/import或Data ...
    99+
    2024-04-02
  • oracle删除表空间
    表空间离线SQL> alter tablespace  rcat offile;2.删除用户    SQL>drop user ractowne...
    99+
    2024-04-02
  • oracle 表空间管理
    oracle增减表空间的四种方法Meathod1:给表空间增加数据文件ALTER TABLESPACE app_data ADD DATAFILE'D:\ORACLE\PRODUCT\10.2.0\ORAD...
    99+
    2024-04-02
  • Oracle表空间管理
    创建表空间命令:CREATE TABLESPACE userdataDATAFILE '/u01/oradata/userdata01.dbf' SIZE 100MAUTOEXTEND ON NEXT 5M...
    99+
    2024-04-02
  • oracle表空间恢复
    如果误删除了一个表空间中test的数据文件test.dbf,然后下次重新启动数据库的时候发       数据库不能打开了(open),老是报错:S...
    99+
    2024-04-02
  • Oracle表空间维护
    表空间维护 (1)创建表空间 CREATE TABLESPACE SUNTX DATAFILE   '/app1/oracle/oradata/SUNTX/SUNTX01.dbf' SIZE 10...
    99+
    2024-04-02
  • oracle 表空间,临时表空间使用率查询
    临时表空间: SELECT a.tablespace_name, a.BYTES total, a.bytes - nvl(b.bytes, 0) free      ...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作