知识大全 Oracle数据库中分区表的操作方法
Posted 知
篇首语:会当凌绝顶,一览众山小。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Oracle数据库中分区表的操作方法相关的知识,希望对你有一定的参考价值。
Oracle数据库中分区表的操作方法 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
在大量业务数据处理的项目中 可以考虑使用分区表来提高应用系统的性能并方便数据管理 本文详细介绍了分区表的使用 在大型的企业应用或企业级的数据库应用中 要处理的数据量通常可以达到几十到几百GB 有的甚至可以到TB级 虽然存储介质和数据处理技术的发展也很快 但是仍然不能满足用户的需求 为了使用户的大量的数据在读写操作和查询中速度更快 Oracle提供了对表和索引进行分区的技术 以改善大型应用系统的性能 使用分区的优点 ·增强可用性 如果表的某个分区出现故障 表在其他分区的数据仍然可用 ·维护方便 如果表的某个分区出现故障 需要修复数据 只修复该分区即可 ·均衡I/O 可以把不同的分区映射到磁盘以平衡I/O 改善整个系统性能 ·改善查询性能 对分区对象的查询可以仅搜索自己关心的分区 提高检索速度 Oracle数据库提供对表或索引的分区方法有三种 ·范围分区 ·Hash分区(散列分区) ·复合分区 下面将以实例的方式分别对这三种分区方法来说明分区表的使用 为了测试方便 我们先建三个表空间 create tablespace dinya_space datafile /test/demo/oracle/demodata/dinya dnf size M create tablespace dinya_space datafile /test/demo/oracle/demodata/dinya dnf size M create tablespace dinya_space datafile /test/demo/oracle/demodata/dinya dnf size M 分区表的创建 范围分区 范围分区就是对数据表中的某个值的范围进行分区 根据某个值的范围 决定将该数据存储在哪个分区上 如根据序号分区 根据业务记录的创建日期进行分区等 需求描述 有一个物料交易表 表名 material_transactions 该表将来可能有千万级的数据记录数 要求在建该表的时候使用分区表 这时候我们可以使用序号分区三个区 每个区中预计存储三千万的数据 也可以使用日期分区 如每五年的数据存储在一个分区上 根据交易记录的序号分区建表 SQL> create table dinya_test ( transaction_id number primary key item_id number( ) not null item_description varchar ( ) transaction_date date not null ) partition by range (transaction_id) ( partition part_ values less than( ) tablespace dinya_space partition part_ values less than( ) tablespace dinya_space partition part_ values less than(maxvalue) tablespace dinya_space ); Table created 建表成功 根据交易的序号 交易ID在三千万以下的记录将存储在第一个表空间dinya_space 中 分区名为:par_ 在三千万到六千万之间的记录存储在第二个表空间 dinya_space 中 分区名为 par_ 而交易ID在六千万以上的记录存储在第三个表空间dinya_space 中 分区名为par_ 根据交易日期分区建表 SQL> create table dinya_test ( transaction_id number primary key item_id number( ) not null item_description varchar ( ) transaction_date date not null ) partition by range (transaction_date) ( partition part_ values less than(to_date( yyyy mm dd )) tablespace dinya_space partition part_ values less than(to_date( yyyy mm dd )) tablespace dinya_space partition part_ values less than(maxvalue) tablespace dinya_space ); Table created 这样我们就分别建了以交易序号和交易日期来分区的分区表 每次插入数据的时候 系统将根据指定的字段的值来自动将记录存储到制定的分区(表空间)中 当然 我们还可以根据需求 使用两个字段的范围分布来分区 如partition by range ( transaction_id transaction_date) 分区条件中的值也做相应的改变 请读者自行测试 Hash分区(散列分区) 散列分区为通过指定分区编号来均匀分布数据的一种分区类型 因为通过在I/O设备上进行散列分区 使得这些分区大小一致 如将物料交易表的数据根据交易ID散列地存放在指定的三个表空间中 SQL> create table dinya_test ( transaction_id number primary key item_id number( ) not null item_description varchar ( ) transaction_date date ) partition by hash(transaction_id) ( partition part_ tablespace dinya_space partition part_ tablespace dinya_space partition part_ tablespace dinya_space ); Table created 建表成功 此时插入数据 系统将按transaction_id将记录散列地插入三个分区中 这里也就是三个不同的表空间中 复合分区 有时候我们需要根据范围分区后 每个分区内的数据再散列地分布在几个表空间中 这样我们就要使用复合分区 复合分区是先使用范围分区 然后在每个分区内再使用散列分区的一种分区方法 如将物料交易的记录按时间分区 然后每个分区中的数据分三个子分区 将数据散列地存储在三个指定的表空间中 SQL> create table dinya_test ( transaction_id number primary key item_id number( ) not null item_description varchar ( ) transaction_date date ) partition by range(transaction_date)subpartition by hash(transaction_id) subpartitions store in (dinya_space dinya_space dinya_space ) ( partition part_ values less than(to_date( yyyy mm dd )) partition part_ values less than(to_date( yyyy mm dd )) partition part_ values less than(maxvalue) ); Table created 该例中 先是根据交易日期进行范围分区 然后根据交易的ID将记录散列地存储在三个表空间中 分区表操作 以上了解了三种分区表的建表方法 下面将使用实际的数据并针对按日期的范围分区来测试分区表的数据记录的操作 插入记录 SQL> insert into dinya_test values( BOOKS sysdate); row created SQL> insert into dinya_test values( BOOKS sysdate+ ); row created SQL> insert into dinya_test values( BOOKS to_date( yyyy mm dd )); row created SQL> insert into dinya_test values( BOOKS to_date( yyyy mm dd )); row created SQL> insert into dinya_test values( BOOKS to_date( yyyy mm dd )); row created SQL> insert into dinya_test values( BOOKS to_date( yyyy mm dd )); row created SQL> mit; Commit plete SQL> 按上面的建表结果 年前的数据将存储在第一个分区part_ 上 而 年到 年的交易数据将存储在第二个分区part_ 上 年以后的记录存储在第三个分区part_ 上 查询分区表记录 SQL> select * from dinya_test partition(part_ ); TRANSACTION_ID ITEM_ID ITEM_DESCRIPTION TRANSACTION_DATE BOOKS : : BOOKS : : SQL> SQL> select * from dinya_test partition(part_ ); TRANSACTION_ID ITEM_ID ITEM_DESCRIPTION TRANSACTION_DATE BOOKS BOOKS SQL> SQL> select * from dinya_test partition(part_ ); TRANSACTION_ID ITEM_ID ITEM_DESCRIPTION TRANSACTION_DATE BOOKS BOOKS SQL> 从查询的结果可以看出 插入的数据已经根据交易时间范围存储在不同的分区中 这里是指定了分区的查询 当然也可以不指定分区 直接执行select * from dinya_test查询全部记录 在也检索的数据量很大的时候 指定分区会大大提高检索速度 更新分区表的记录 SQL> update dinya_t cha138/Article/program/Oracle/201311/18389相关参考
Oracle数据库分区表 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Oracle数据库分区是
建立一个用户使用默认表空间tablespace 建立一个分区表数据存放在不同的表空间tablespacetablespacetablespace 如果把此用户的数据导出来为dmp格式 在另外
此文从以下几个方面来整理关于分区表的概念及操作: 表空间及分区表的概念 表分区的具体作用 表分区的优缺点 表分区的几种类型及操作方法 对表分区的维护性操作 ()表空间及分区表的概念
Oracle数据表分区的策略 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 本文描述通过统计分析
讲解Oracle移动数据文件到新分区的过程 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!此过程用s
深入浅出Oracle11g分区功能 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 数据库分区是每
Quote: 对一张表建立了分区后在访问表中数据时是如何操作的 answer: 普通表呢像一个小学生用的新华字典分区表呢像一套博士们辞海在同一个漂亮的盒子里面(表名)有若干本辞海分册(每一册
Oracle数据库中的(+)连接如何操作? 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 本文主
Oracle数据库中Rman操作简单分析 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Rman
知识大全 java语言操作Oracle数据库中的CLOB数据类型
java语言操作Oracle数据库中的CLOB数据类型 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧