zoukankan      html  css  js  c++  java
  • [bbk2902] 第58集 Chapter 14Using Oracle Dasta Storage Structures Efficiently(04)

    Hash Partitioning Overview

    • Easy to Implement
    • Enables better performance for PDML and partion-wise joins
      • PDML->P DML并发的修改数据
      • partition-wise join只能的Join,只需要有用的Partition 进行Join,没用的partition就不参加Join
    • Inserts rows into partitions automatically based on the hash of the partion key
    • Supports(hash) local indexes
      • partition table索引分为local indexes和global indexes
    • Does not support(hash) global indexes(oracle 10g以后,不再适用)

    Hash partitions 的目的,就是使数据能够均匀的分布在不同的分区或者不同的磁盘上.

    不像partition range一样机械的将数据存放在不同的分区磁盘上. 

    里面的hash函数是由Oracle 提供的,用户是无法修改的.

    hash partition table 在设计分区数量时,Oracle 建议分配2的幂次方倍个(2,4,8,16,32...)

    create hash partition table
    CREATE TABLE emp
    (
            empno   INT,
            ename   VARCHAR2(20)
    )
    PARTITION BY HASH(empno)
    (
            --分区的个数最好是2的幂次方倍2,4,8,16,32...............
            partition part1 tablespace ts1,
            partition part2 tablespace ts2
    );
    insert data into hash partition table to emp;
    SQL> show user
    USER is "U3"
    SQL> select object_name,object_type from user_objects;
    
    OBJECT_NAME                    OBJECT_TYPE
    ------------------------------ -------------------
    EMP                            TABLE
    EMP                            TABLE PARTITION
    EMP                            TABLE PARTITION
    RANGE1                         TABLE PARTITION
    RANGE1                         TABLE
    RANGE1                         TABLE PARTITION
    RANGE1                         TABLE PARTITION
    RANGE1                         TABLE PARTITION
    RANGE1                         TABLE PARTITION
    HC                             CLUSTER
    
    10 rows selected.
    
    SQL> insert into emp select empno,ename from SCOTT.emp;
    
    14 rows created.
    
    SQL> commit;
    
    Commit complete.
    
    SQL> select * from emp;
    
         EMPNO ENAME
    ---------- --------------------
          7369 SMITH
          7499 ALLEN
          7654 MARTIN
          7698 BLAKE
          7782 CLARK
          7839 KING
          7876 ADAMS
          7934 MILLER
          7521 WARD
          7566 JONES
          7788 SCOTT
    
         EMPNO ENAME
    ---------- --------------------
          7844 TURNER
          7900 JAMES
          7902 FORD
    
    14 rows selected.
    select data from hash partition table;
    SQL> select * from emp partition(part1);
    
         EMPNO ENAME
    ---------- --------------------
          7369 SMITH
          7499 ALLEN
          7654 MARTIN
          7698 BLAKE
          7782 CLARK
          7839 KING
          7876 ADAMS
          7934 MILLER
    
    8 rows selected.
    
    SQL> 
    SQL> select * from emp partition(part2);
    
         EMPNO ENAME
    ---------- --------------------
          7521 WARD
          7566 JONES
          7788 SCOTT
          7844 TURNER
          7900 JAMES
          7902 FORD
    
    6 rows selected.

     以上实验一切正常.创建hash partition table emp;设计两个tablespace(ts1,ts2)存放数据; 

    现在进行一场破坏性实验,模拟tb1损坏(以SYSDBA用户登陆,设置ts1 offline)

    SQL> alter tablespace ts1 offline;
    
    Tablespace altered.

     再查询位于ts1上的数据(也就是part1),会出现如下错误(因为位于ts1上的磁盘已经损坏)

    SQL> select * from emp;
    select * from emp
                  *
    ERROR at line 1:
    ORA-00376: file 9 cannot be read at this time
    ORA-01110: data file 9: '/RealData/oradata/DATACENTER/ts1_01.dbf'
    
    
    SQL> select * from emp partition(part1);
    select * from emp partition(part1)
                  *
    ERROR at line 1:
    ORA-00376: file 9 cannot be read at this time
    ORA-01110: data file 9: '/RealData/oradata/DATACENTER/ts1_01.dbf'

     再查询位于ts2上的数据(也就是part2),一切正常(因为ts2所在的磁盘没有损坏)

    SQL> select * from emp partition(part2);
    
         EMPNO ENAME
    ---------- --------------------
          7521 WARD
          7566 JONES
          7788 SCOTT
          7844 TURNER
          7900 JAMES
          7902 FORD
    
    6 rows selected.

     恢复ts1 online状态,然后再次查询一切正常.

    SQL> alter tablespace ts1 online;
    
    Tablespace altered.
    SQL> select * from emp partition(part2);
    
         EMPNO ENAME
    ---------- --------------------
          7521 WARD
          7566 JONES
          7788 SCOTT
          7844 TURNER
          7900 JAMES
          7902 FORD
    
    6 rows selected.
    
    SQL> select * from emp;
    
         EMPNO ENAME
    ---------- --------------------
          7369 SMITH
          7499 ALLEN
          7654 MARTIN
          7698 BLAKE
          7782 CLARK
          7839 KING
          7876 ADAMS
          7934 MILLER
          7521 WARD
          7566 JONES
          7788 SCOTT
    
         EMPNO ENAME
    ---------- --------------------
          7844 TURNER
          7900 JAMES
          7902 FORD
    
    14 rows selected.
    
    SQL> select * from emp partition(part2);
    
         EMPNO ENAME
    ---------- --------------------
          7521 WARD
          7566 JONES
          7788 SCOTT
          7844 TURNER
          7900 JAMES
          7902 FORD
    
    6 rows selected.

    List Partitioning Example

    创建List Partitioning script

    CREATE TABLE locations
    (
            location_id int,
            street_address VARCHAR2(32),
            postal_code     VARCHAR2(16),
            city            VARCHAR2(16),
            state_province  VARCHAR2(24),
            country_id      int
    )
    STORAGE(INITIAL 10K NEXT 20K)
    TABLESPACE users
    PARTITION BY LIST(state_province)
    (
            PARTITION regeion_east('MA','NY','CT','ME','MD'),
            PARTITION regeion_west('ca','AZ','NM','OR','WA'),
            PARTITION regeion_south('TX','KY','TN','LA','MS'),
            PARTITION regeion_central'OH','ND','SD','MO','IL')
    
    );

    Default Partition

    Create a DEFAULT list patition for all values not convered by other partitions:

    如果在定义的时候,定了DEFAULT PARTITION,以后再想插入新的分区(不同通过ALTER TABLE ...),基本上就无法插入新的分区了.如果要想插入新的分区,就只能先将DEFAULT PARTITION给干掉,然后插入新的分区,再然后加入DEFAULT PARTITION; 

    CREATE TABLE customer
    ...
    PARTITION BY LIST(state)
    (
            PARTITION P1 VALUES('CA','CO'),
            PARTITION P2 VALUES('FL','TX'),
            PARTITION P3 VALUES(DEFAULT)
    );
    CREATE TABLE list1
    (
            stateid VARCHAR2(2),
            data    VARCHAR2(100)
    )
    PARTITION BY LIST(stateid)
    (
            PARTITION p1    VALUES('TX','MA','NY') TABLESPACE TS0,
            PARTITION p2    VALUES('CA','PA','LA') TABLESPACE TS0,
            PARTITION p3    VALUES(DEFAULT) TABLESPACE TS0
    );

    Composite Partitioning

    • Ideal for both historical data and data placement
    • Provides high availability  and manageability,like range partitioning.
    • Improves performance for parallel DML and supports partition-wise joins
    • Allows more granular partition elimination
    • Supports composite local indexes
    • Dose not support composite global indexes
    create composite partitions table
    CREATE TABLE composite1
    (
            range_key DATE,
            hash_key INT,
            data    VARCHAR2(100)
    )
    PARTITION BY RANGE(range_key)
    SUBPARTITION BY HASH(hash_key) subpartitions 2
    (
            PARTITION part1 VALUES LESS THAN (TO_DATE('01/01/2014','dd/mm/yyyy'))
            (
                    subpartition h1,
                    subpartition h2
            ),
            PARTITION part2 VALUES LESS THAN (TO_DATE('01/01/2015','dd/mm/yyyy'))
            (
                    subpartition h11,
                    subpartition h22
            )
    );

    如何删除一个composite partition table?是同删除普通Heap表一样吗? 

  • 相关阅读:
    使企点QQ来消息时不自动弹出窗口(以避免错过旧的消息和避免正在回复A时自动定位到B从而影响客服效率)
    8款开源聊天软件
    博客园设置皮肤(宽屏等)及选择文本编辑器
    Windows Server 2019 设置使用照片查看器查看图片
    使windows10重启后打开上次的文件夹和程序
    TinyMCE 5 富文本编辑器好
    wordpress 安装 Elementor PRO 插件(破解版)
    无法打印,提示“windows 打印后台处理程序 没有运行”的解决方案
    第一次将代码提交至git error: failed to push some refs to 'https://gitee.com/xxx/test.git'
    git本地和远程的关联问题
  • 原文地址:https://www.cnblogs.com/arcer/p/3069322.html
Copyright © 2011-2022 走看看