`
honeybinshun
  • 浏览: 61087 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

论oracle分区表的创建与维护

 
阅读更多

创建分区表:
oracle分区方法:range、hash、list和composite partition;
range分区表示例:
CREATE TABLE sales_range (salesman_id NUMBER(5), salesman_name VARCHAR2(30),
 sales_amount NUMBER(10), sales_date DATE) COMPRESS PARTITION BY RANGE(sales_date)
  (
      PARTITION sales_jan2000 VALUES LESS THAN(TO_DATE('02/01/2000','DD/MM/YYYY')),
      PARTITION sales_feb2000 VALUES LESS THAN(TO_DATE('03/01/2000','DD/MM/YYYY')),
      PARTITION sales_mar2000 VALUES LESS THAN(TO_DATE('04/01/2000','DD/MM/YYYY')),
       PARTITION sales_apr2000 VALUES LESS THAN(TO_DATE('05/01/2000','DD/MM/YYYY')));
分区字段values less than必须是确定值,最后一个可以是maxvalue,每个分区可以单独指定物理属性
range分区特点:
最早、最经典的分区方法
Range分区通过对分区字段值的范围进行分区
Range分区特别适合于按时间周期进行数据的存储:日、周、月、年等
数据管理能力强
数据迁移
数据备份
数据交换
范围分区的数据可能不均匀
范围分区与记录值有关,实施难度和可维护性相对较差
hash分区表示例:
create table emp_t(empno integer,ename varchar2(20))
partition by hash(empno)
partitions 4;--指定分区所在表空间(partition part_01 tablespace test,partition part_02 tablespace sys);
list分区表示例:
CREATE TABLE sales_list (salesman_id NUMBER(5), salesman_name VARCHAR2(30),
 sales_state VARCHAR2(20), sales_amount NUMBER(10), sales_date DATE)
PARTITION BY LIST(sales_state)
 (
    PARTITION sales_west VALUES('California', 'Hawaii'),
    PARTITION sales_east VALUES ('New York', 'Virginia', 'Florida'),
    PARTITION sales_central VALUES('Texas', 'Illinois'),
     PARTITION sales_other VALUES(DEFAULT));
list分区特点:
List分区通过对分区字段的离散值进行分区
List分区是不排序的,而且分区之间也没有关联
List分区适合于对数据离散值进行控制
List分区只支持单个字段
List分区具有与range分区相似的优缺点:
数据管理能力强
各分区的数据可能不均匀
composite分区表示例:
CREATE TABLE quarterly_regional_sales (deptno NUMBER, item_no VARCHAR2(20),
 txn_date DATE, txn_amount NUMBER, state VARCHAR2(2))
PARTITION BY RANGE (txn_date) SUBPARTITION BY LIST (state)
( PARTITION q1_1999 VALUES LESS THAN(TO_DATE('1-APR-1999','DD-MON-YYYY'))
      (SUBPARTITION q1_1999_northwest VALUES ('OR', 'WA'),
      SUBPARTITION q1_1999_southwest VALUES ('AZ', 'UT', 'NM'),
     SUBPARTITION q1_1999_northeast VALUES ('NY', 'VM', 'NJ'),
     SUBPARTITION q1_1999_southeast VALUES ('FL', 'GA'),
     SUBPARTITION q1_1999_northcentral VALUES ('SD', 'WI'),
    SUBPARTITION q1_1999_southcentral VALUES ('NM', 'TX')),
PARTITION q2_1999 VALUES LESS THAN(TO_DATE('1-JUL-1999','DD-MON-YYYY'))
  (SUBPARTITION q2_1999_northwest VALUES ('OR', 'WA'),
  SUBPARTITION q2_1999_southwest VALUES ('AZ', 'UT', 'NM'),
   SUBPARTITION q2_1999_northeast VALUES ('NY', 'VM', 'NJ'),
  SUBPARTITION q2_1999_southeast VALUES ('FL', 'GA'),
   SUBPARTITION q2_1999_northcentral VALUES ('SD', 'WI'),
  SUBPARTITION q2_1999_southcentral VALUES ('NM', 'TX')),
PARTITION q3_1999 VALUES LESS THAN (TO_DATE('1-OCT-1999','DD-MON-YYYY'))
   (SUBPARTITION q3_1999_northwest VALUES ('OR', 'WA'),
        … ….
      SUBPARTITION q4_1999_northcentral VALUES ('SD', 'WI'),
      SUBPARTITION q4_1999_southcentral VALUES ('NM', 'TX')));
composite分区特点:
Oracle支持的Composite分区:
  range-hash
  Range-list
既适合于历史数据,又适合于数据均匀分布
与范围分区一样提高可用性和可管理性
更好的PDML和partition-wise joins特性
实现粒度更细的操作
支持符合local indexes
不支持符合 global indexes

分区表设计原则:
表的大小:当表的大小超过2GB,或对于OLTP系统,表记录超过1000万时,都应该考虑对表进行分区
数据访问特性:基于表的大部分查询应用,只访问表中少量的数据。对于这样的表进行分区,可充分利用分区排除无关数据查询的特性
数据维护:按时间段删除成批的数据,对于这样的表需要考虑进行分区,以满足维护需要
数据备份和恢复:按时间周期进行表空间备份时,将分区与表空间建立对应关系
只读数据:如果一个表中大部分数据都是只读,通过对表进行分区,可将只读数据存储在只读表空间,对于数据的备份有利
OLAP并行数据操作
分区表及索引分区数据字典信息:
--1、查询当前用户下有哪些是分区表:
SELECT * FROM USER_PART_TABLES;
--2、查询当前用户下有哪些分区索引:
SELECT * FROM USER_PART_INDEXES;
--3、查询当前用户下分区索引的分区信息:
SELECT *
  FROM USER_IND_PARTITIONS T
 WHERE T.INDEX_NAME = ?
--4、查询当前用户下分区表的分区信息:
  SELECT * FROM USER_TAB_PARTITIONS T WHERE T.TABLE_NAME = ?;

--5、查询某分区下的数据量:
SELECT COUNT(*) FROM TABLE_PARTITION PARTITION(TAB_PARTOTION_01);
--6、查询索引、表上在那些列上创建了分区:
SELECT * FROM USER_PART_KEY_COLUMNS;
--7、查询某用户下二级分区的信息(只有创建了二级分区才有数据):
SELECT * FROM USER_TAB_SUBPARTITIONS;
--查看某一分区上的数据
select * from user_table partition(partitionname);
分区表维护:
--删除分区
    ALTER TABLE table_name DROP PARTITION partition_name;
--说明:此语句不可用于hash分区表,如果是全局索引,因为全局索引的分区结构和表可以不一致,若不一致的情况下,会导致整个全局索引失效,在删除分区的时候,语句修改为:
    ALTER TABLE table_name DROP PARTITION partition_name UPDATE GLOBAL INDEXES;
--合并分区(coalesce partition):合并分区是用来操作HASH分区表和hash全局索引的,它会重新分配删除的分区的数据到现有的分区中
    ALTER TABLE table_name COALESCE PARTITION;
--合并分区和删除中间的RANGE有点像,但是合并分区是不会删除数据的,对于LIST、HASH分区也是和RANGE分区不一样的,其语法为:
    ALTER TABLE table_name MERGE PARTITIONS    partition_name1,partition_name2 INTO PARTITION MERGED_PARTITION;
--创建新的分区(分区数据若不能提供范围,则插入时会报错,需要增加分区来扩大范围)
    ALTER TABLE table_name ADD PARTITION partition_name VALUES LESS THAN(2500000);--list分区or RANGE分区
    ALTER TABLE table_name ADD PARTITION partition_name;--HASH分区
--创建子分区:在分区下创建新的子分区大致如下(RANGE分区,若为LIST或HASH分区,将创建方式修改为对应的方式即可)
    ALTER TABLE <table_name> MODIFY PARTITION <partition_name> ADD SUBPARTITION <user_define_subpartition_name> VALUES LESS THAN(....);
--修改分区名称(修改相关的属性信息):
    ALTER TABLE TABLE_PARTITION RENAME PARTITION MERGED_PARTITION TO MERGED_PARTITION02;
--交换分区(快速交换数据,其实是交换段名称指针),首先创建一个交换表,和原表结构相同,如果有数据,必须符合所交换对应分区的条件
    CREATE TABLE TABLE_PARTITION_2
    AS SELECT * FROM TABLE_PARTITION WHERE 1=2;
--然后将第一个分区的数据交换出去
    ALTER TABLE TABLE_PARTITION EXCHANGE PARTITION TAB_PARTOTION_01
    WITH TABLE TABLE_PARTITION_2 INCLUDING INDEXES;
--此时会发现第一个分区的数据和表TABLE_PARTITION_2做了瞬间交换,比TRUNCATE还要快,因为这个过程没有进行数据转存,只是段名称的修改过程,和实际的数据量没有关系。
--如果是子分区也可以与外部的表进行交换,只需要将关键字修改为:SUBPARTITION 即可。
--清空分区数据
   ALTER TABLE <table_name> TRUNCATE PARTITION <partition_name>;
   ALTER TABLE <table_name> TRUNCATE subpartition <subpartition_name>;

 

 

 

 

分享到:
评论

相关推荐

    ORACLE分区与索引

    对orcle大数据的查询的优化,ORACLE分区表、分区索引ORACLE对于分区表方式其实就是将表分段存储,一般普通表格是一个段存储,而分区表会分成多个段,所以查找数据过程都是先定位根据查询条件定位分区范围,即数据在...

    ORACLE大表分区

    -- B方案比较适合将非分区表中的数据放到分区表中的一个分区中,不符合要求,所以本分区存储过程默认采用A方案; -- 当然,也支持通过新增参数PARTEXCHANGE来控制是否使用B方案;PARTEXCHANGE为TRUE,使用B方案,为FALSE,...

    Oracle甲骨文原厂分区表培训教程-详细讲解

    该教程详细讲解了Oracle数据库中分区表的创建、维护、优化等方面,并提供了大量实例以帮助读者更好地理解和应用这些知识。此外,该教程还包含了丰富的图文资料和视频教程,让读者可以更加直观地了解分区表的相关概念...

    Oracle分区表(Partition Table)使用详解

    本课程详细介绍了Oracle数据库的分区表机制、分区表应用场景、分区表与分区索引类型/创建/维护操作、分区裁剪等,结合大量的案例程序,对Oracle分区表的使用进行了详细的分析讲解。

    Oracle课件.pdf

    6.1表空间及分区表的概念 6.2表分区的具体作用 6.3.表分区的优缺点 6.4表分区的几种类型及操作方法 6.5有关表分区的一些维护性操作 第5章 PL/SQL程序设计 1. PL/SQL简介 2. PL/SQL基础 2.1声明 2.2条件...

    Oracle从入门到精通指南

    本文档详细讲解ORACLE数据库的内部体系结构,包含数据库实例,物理存储结构,逻辑存储结构,配置与维护,非常详细地介绍了数据库模式对象的应用于管理,包括表,约束,索引,分区表,分区索引,视图,簇,外部表,...

    Oracle数据库学习指南

    17.创建和使用分区的表 18.基于成本的优化器一般错误概念和问题 19.Delphi 3_0中连接数据库的三种方式 20.远程数据库的访问 21.监控数据库性能的SQL 22.简单实现数据库表空间的备份或迁移 23.简析REDO ...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    说明:Oracle中需要创建用户一定是要具有dba(数据库管理员)权限的用户才能创建,而且创建的新用户不具备任何权限,连登录都不可以。 用法:create user 新用户名 identified by 密码 例子: 2. 修改密码 说明:...

    Oracle自学(学习)材料 (共18章 偏理论一点)

    11 管理表 目标 11-2 储存用户数据 11-3 Oracle 数据类型 11-5 ROWID 格式 11-8 行的结构 11-10 创建一张表 11-11 创建临时表 11-13 创建表:指南 11-14 修改储存参数 11-15 手工分配片 11-16 重构非分区表 11-17 ...

    从一个“普通”的Oracle DBA(Oracle数据库管理员)转变为Oracle Applications DBA(Oracle应用程序数据库管理员)

    如果你研究过Oracle Forms,使用过Application Server和Developer Suite来开发、配置部署form和report,并且曾经作为一名Oracle DBA,经历过许多管理和维护的工作如patching和cloning的话,那么你就已经能够掌握了...

    Oracle 9i 数据库管理员指南(PDF)

    第3部分:模式对象,内容包括管理模式对象空间、管理表、管理索引、管理分区表和分区索引、管理簇、管理散列、管理视图、序列和同义词、模式对象的常规管理、检测和修复数据块损坏。第4部分:数据库的安全,介绍...

    ORACLE重建索引总结

    五、重建分区表上的分区索引 重建分区索引方法: Alter index indexname rebuild partition paritionname tablespace tablespacename; Alter index indexname rebuild subpartition partitioname tablespace ...

    非常全的oracle文档

    24.2. 创建分区表 161 24.3. 范围分区(Range) 161 24.4. 列表分区(List) 164 24.5. 散列分区(Hash) 165 24.6. 组合范围散列分区 167 24.7. 复合范围散列分区 168 24.8. 维护表分区 169 二十四、 PL/SQL基础 173 ...

    Oracle8i_9i数据库基础

    §5.2.4 维护表分区和索引分区 167 §5.3 簇与分区有关的数据字典 169 §5.3.1 分区、簇数据字典列表 169 §5.3.2 基本的分区、簇信息查询 169 第六章 使用SQL 进行数据操作 170 §6.1 INSERT操作 170 §6.1.1 用...

    Oracle数据库管理员技术指南

    1.6.1 利用 Oracle 安装程序创建数据库 1.6.2 使用安装程序创建数据库的注意 事项 1.6.3 怎样建立自己的定制数据库创建 脚本 1.6.4 如何从已有数据库克隆数据库 1.6.5 怎样利用 Database Configuration ...

    Oracle数据库性能优化的艺术 (文平) 高清PDF扫描版

    4.5 数据导入与索引维护 / 144 第5章 实例优化:配置高效运行环境 / 145 5.1 实例配置与缓存优化 / 146 5.2 sql与缓存的使用 / 165 5.3 pga内存分配原则 / 175 5.4 oracle虚拟化关注点 / 176 第6章 ...

    Object Browser7.0中文版(ORACLE数据库的开发工具)

    也追加了表分区存储的功能.当然,在原来的Oracle8,&nbsp;7&nbsp;上也可以正常运行. ■追求批处理的简洁化 &nbsp;&nbsp;&nbsp;&nbsp;比如说[想把最近一周内有所变化的数据库对象全部输出到SQL脚本]...

Global site tag (gtag.js) - Google Analytics