摘要:在大量业务数据处理的项目中,可以考虑使用分区表来提高应用系统的性能并方便数据管理,本文详细介绍了分区表的使用。
在大型的企业应用或企业级的数据库应用中,要处理的数据量通常可以达到几十到几百GB,有的甚至可以到TB级。虽然存储介质和数据处理技术的发展也很快,但是仍然不能满足用户的需求,为了使用户的大量的数据在读写操作和查询中速度更快,Oracle提供了对表和索引进行分区的技术,以改善大型应用系统的性能。
使用分区的优点:
·增强可用性:如果表的某个分区出现故障,表在其他分区的数据仍然可用;
·维护方便:如果表的某个分区出现故障,需要修复数据,只修复该分区即可;
·均衡I/O:可以把不同的分区映射到磁盘以平衡I/O,改善整个系统性能;
·改善查询性能:对分区对象的查询可以仅搜索自己关心的分区,提高检索速度。
Oracle数据库提供对表或索引的分区方法有三种:
·范围分区
·Hash分区(散列分区)
·复合分区
下面将以实例的方式分别对这三种分区方法来说明分区表的使用。为了测试方便,我们先建三个表空间。
create tablespace dinya_space01
datafile ’/test/demo/oracle/demodata/dinya01.dnf’ size 50M
create tablespace dinya_space01
datafile ’/test/demo/oracle/demodata/dinya02.dnf’ size 50M
create tablespace dinya_space01
datafile ’/test/demo/oracle/demodata/dinya03.dnf’ size 50M
1.1. 分区表的创建
1.1.1. 范围分区
范围分区就是对数据表中的某个值的范围进行分区,根据某个值的范围,决定将该数据存储在哪个分区上。如根据序号分区,根据业务记录的创建日期进行分区等。
需求描述:有一个物料交易表,表名:material_transactions。该表将来可能有千万级的数据记录数。要求在建该表的时候使用分区表。这时候我们可以使用序号分区三个区,每个区中预计存储三千万的数据,也可以使用日期分区,如每五年的数据存储在一个分区上。
根据交易记录的序号分区建表:
SQL> create table dinya_test
2 (
3 transaction_id number primary key,
4 item_id number(8) not null,
5 item_description varchar2(300),
6 transaction_date date not null
7 )
8 partition by range (transaction_id)
9 (
10 partition part_01 values less than(30000000) tablespace dinya_space01,
11 partition part_02 values less than(60000000) tablespace dinya_space02,
12 partition part_03 values less than(maxvalue) tablespace dinya_space03
13 );
Table created.
建表成功,根据交易的序号,交易ID在三千万以下的记录将存储在第一个表空间dinya_space01中,分区名为:par_01,在三千万到六千万之间的记录存储在第二个表空间:
dinya_space02中,分区名为:par_02,而交易ID在六千万以上的记录存储在第三个表空间dinya_space03中,分区名为par_03.
根据交易日期分区建表:
SQL> create table dinya_test
2 (
3 transaction_id number primary key,
4 item_id number(8) not null,
5 item_description varchar2(300),
6 transaction_date date not null
7 )
8 partition by range (transaction_date)
9 (
10 partition part_01 values less than(to_date(’2006-01-01’,’yyyy-mm-dd’))
tablespace dinya_space01,
11 partition part_02 values less than(to_date(’2010-01-01’,’yyyy-mm-dd’))
tablespace dinya_space02,
12 partition part_03 values less than(maxvalue) tablespace dinya_space03
13 );
Table created.
这样我们就分别建了以交易序号和交易日期来分区的分区表。每次插入数据的时候,系统将根据指定的字段的值来自动将记录存储到制定的分区(表空间)中。
当然,我们还可以根据需求,使用两个字段的范围分布来分区,如partition by range ( transaction_id ,transaction_date), 分区条件中的值也做相应的改变,请读者自行测试。
1.1.2. Hash分区(散列分区)
散列分区为通过指定分区编号来均匀分布数据的一种分区类型,因为通过在I/O设备上进行散列分区,使得这些分区大小一致。如将物料交易表的数据根据交易ID散列地存放在指定的三个表空间中:
SQL> create table dinya_test
2 (
3 transaction_id number primary key,
4 item_id number(8) not null,
5 item_description varchar2(300),
6 transaction_date date
7 )
8 partition by hash(transaction_id)
9 (
10 partition part_01 tablespace dinya_space01,
11 partition part_02 tablespace dinya_space02,
12 partition part_03 tablespace dinya_space03
13 );
Table created.
建表成功,此时插入数据,系统将按transaction_id将记录散列地插入三个分区中,这里也就是三个不同的表空间中。
1.1.3. 复合分区
有时候我们需要根据范围分区后,每个分区内的数据再散列地分布在几个表空间中,这样我们就要使用复合分区。复合分区是先使用范围分区,然后在每个分区内再使用散列分区的一种分区方法,如将物料交易的记录按时间分区,然后每个分区中的数据分三个子分区,将数据散列地存储在三个指定的表空间中:
SQL> create table dinya_test
2 (
3 transaction_id number primary key,
4 item_id number(8) not null,
5 item_description varchar2(300),
6 transaction_date date
7 )
8 partition by range(transaction_date)subpartition by hash(transaction_id)
9 subpartitions 3 store in (dinya_space01,dinya_space02,dinya_space03)
10 (
11 partition part_01 values less than(to_date(’2006-01-01’,’yyyy-mm-dd’)),
12 partition part_02 values less than(to_date(’2010-01-01’,’yyyy-mm-dd’)),
13 partition part_03 values less than(maxvalue)
14 );
Table created.
该例中,先是根据交易日期进行范围分区,然后根据交易的ID将记录散列地存储在三个表空间中。
分享到:
相关推荐
ORACLE创建数据库是数据库管理员(DBA)必须掌握的基本技能之一。数据库的创建涉及到多个步骤和决策,包括确定数据库的用途、配置、性能优化等方面。Oracle数据库作为业界广泛使用的数据库管理系统,其创建流程较为...
系统全局区(SGA)是Oracle数据库中的关键内存结构,它包含了数据缓冲区(存储数据和索引块)、数据字典缓冲区(存储表定义等元数据)、进程信息、封锁队列(用于锁定管理)、以及预读和写入相关的缓冲区。...
* Oracle分区:它为大型的底层数据库表和索引增加了重要的可管理性、可用性和性能,从而为OLTP、数据中心和数据仓库应用程序增加了数据管理环境。 * Oracle高级安全性(ASO):它为Oracle数据库提供了网络加密的一...
Oracle数据库是企业级关系型数据库管理系统,广泛应用于各种规模的企业环境中。本教程主要涵盖了Oracle数据库的基础知识,包括安装与卸载数据库服务器、数据库类型的区别、用户权限管理以及数据库文件结构等方面。 ...
2. Oracle Database 10g Standard Edition:增加了RAC(Real Application Clusters)支持,适用于1-4个CPU的服务器,可以实现双机热备或RAC配置,适用于对数据库性能和安全性有一定要求的大中型企业。 3. Oracle ...
3. **Oracle数据库10g企业版**:专为关键任务应用程序设计,如大业务量的在线事务处理(OLTP)环境、数据仓库和互联网应用程序,提供高效、可靠、安全的数据管理能力。此版本包含了Oracle数据库的所有组件,并可通过...
可以选择适用于单处理器或多处理器系统的版本。 2. **OCFS2 工具**: 提供对OCFS2文件系统的管理和操作能力。 3. **OCFS2 控制台**: 为用户提供一个控制台界面来管理OCFS2。 4. **Oracle OracleASM**: 为Oracle自动...
2. Oracle9i企业版:适用于大数据量的在线事务处理(OLTP)、查询密集型数据仓库和高要求的互联网应用,具备高可用性和可扩展性。 3. Oracle9i个人版:针对单用户开发和部署,确保与标准版和企业版的兼容性。 ...
在Oracle数据库环境下,VVR能够与Oracle DataGuard等逻辑数据复制技术相辅相成,适用于单节点或共享集群环境(如Oracle RAC)。VVR支持多种主流的关系型数据库,包括Oracle、DB2、Sybase和Informix,且数据文件可以...
单进程实例适用于单用户环境,所有Oracle代码在一个进程中运行。而在多进程实例中,Oracle代码和用户应用程序分别由多个进程执行,更适应多用户环境。在多进程实例中,进程分为用户进程和Oracle进程。用户进程与...
Oracle 9i数据库服务器的安装和配置是IT管理员在搭建企业级数据库系统时的重要环节。本文将详细解析这个过程,确保读者能够理解并掌握Oracle 9i的安装配置方法。 首先,安装Oracle 9i数据库服务器需要满足一定的...
在Oracle 10g中,静默安装不仅适用于单实例数据库,还可以用于创建RAC(Real Application Clusters)集群环境。RAC安装时,还需要额外配置集群相关的参数,如网络服务名、集群资源和投票磁盘等。 此外,了解Oracle ...
- 水平索引与垂直索引:水平索引适用于单表查询,而垂直索引则更适合多表关联查询。 - 索引覆盖:尽可能使用索引覆盖查询,减少表扫描操作。 - **SQL语句优化**: - 使用PL/SQL存储过程:通过将复杂的逻辑封装进...
Oracle数据库是世界上最流行的数据库管理系统之一,尤其在企业级应用中占据重要地位。在Oracle 10g中,数据库实例是一个核心概念,它是由内存结构和后台进程组成的中间层,负责管理和控制物理数据库。本章主要讲解了...
集中式数据库系统所有数据存储在同一台计算机上,适用于单用户或少量用户环境。而C/S(客户端/服务器)数据库系统则将用户界面转移到客户端,服务器主要处理事务处理请求,提高了性能和可扩展性,同时减少了网络传输...
在数据库架构设计中,数据库拆分是一种常见的解决高并发、大数据量问题的策略。本篇笔记主要探讨了MySQL数据库的拆分技术,包括CAP原则、可扩展性原则以及垂直拆分和水平拆分的实践。 首先,CAP原则是分布式系统...
- **逻辑结构**:包含如表、视图、索引等数据库对象,这些对象独立于物理存储方式,方便用户以逻辑方式理解和操作数据。 - **物理结构**:数据库的实际存储形式,由一系列文件组成,如数据文件、控制文件、重做日志...
个人版适用于单用户,而企业版则适用于大中型企业,特别是包含表分区功能的DPF(Database Partitioning Feature)。工作组版则适合小型企业和部门。DB2提供了一整套数据服务,包括管理、安全、检索、可扩展性、可用...
Oracle数据库的物理存储结构包括数据文件、控制文件、重做日志文件等,逻辑存储结构包括表空间、段、区和数据块,这些结构相互关联,共同构成了数据库的存储层次。后台进程DBWR在缓冲区中的数据变化达到一定阈值或...