• Oracle 11g系统分区表中的新功能


      在11g有一个新的特点是分区表系统。下面做一个实验:

    SQL> select * from v$version;
    BANNER
    --------------------------------------------------------------------------------
    Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
    PL/SQL Release 11.2.0.1.0 - Production
    CORE    11.2.0.1.0      Production
    TNS for Linux: Version 11.2.0.1.0 - Production
    NLSRTL Version 11.2.0.1.0 - Production

    SQL> drop table S_P_TEST purge;

    SQL> CREATE TABLE S_P_TEST
        (
         col1 number,
         name varchar2(100)
        )
        PARTITION BY SYSTEM
        (
          PARTITION p1,
          PARTITION p2,
          PARTITION p3,
          PARTITION p4
       );

    --插入时要指明分区
    SQL> insert into S_P_TEST select object_id,object_name from dba_objects;
    insert into S_P_TEST select object_id,object_name from dba_objects
                *
    第 1 行出现错误:
    ORA-14701: 对于按“系统”方法进行分区的表, 必须对 DML 使用分区扩展名或绑定变量
    SQL> insert into S_P_TEST partition(p1) select object_id,object_name from dba_objects
        where object_type='TABLE';
    已创建2115行。


    SQL> insert into S_P_TEST partition(p2) select object_id,object_name from dba_objects
        where object_type='INDEX';
    已创建2888行。
    SQL> commit;
    SQL> select count(1) from S_P_TEST;
      COUNT(1)
    ----------
          5003
    SQL> select count(1) from S_P_TEST  partition(p1);
      COUNT(1)
    ----------
          2115
    SQL> select count(1) from S_P_TEST  partition(p2);
      COUNT(1)
    ----------
          2888
    --同样的数据能够插入到不同的分区中,这说明数据和分区没有不论什么关系
    SQL> insert into S_P_TEST partition(p3) values(1,'aa');
    SQL> insert into S_P_TEST partition(p4) values(1,'aa');
    SQL> commit;
    SQL> select * from S_P_TEST  partition(p3);
          COL1 NAME
    ---------- ------------------------------------------
             1 aa
    SQL> select * from S_P_TEST  partition(p4);

          COL1 NAME
    ---------- -----------------------------------------
             1 aa

    --传统的分区裁剪和分区智能关联无效,不能建立本地化的索引
    SQL> ALTER TABLE S_P_TEST SPLIT PARTITION p1 at(1000)
         into(partition p3,partition p4);
    ALTER TABLE S_P_TEST SPLIT PARTITION p1 at(1000)
                *
    第 1 行出现错误:

    ORA-14255: 未按范围, 列表, 组合范围或组合列表方法对表进行分区


    --假设你知道数据在哪个表里面,做好要制定分区条件
    SQL> set autotrace traceonly
    SQL> select * from S_P_TEST where col1=1;
    运行计划
    ----------------------------------------------------------
    Plan hash value: 2020968526
    -------------------------------------------------------------------------------------------------
    | Id  | Operation            | Name     | Rows  | Bytes | Cost (%CPU)| Time     | Pstart| Pstop |
    -------------------------------------------------------------------------------------------------
    |   0 | SELECT STATEMENT     |          |     2 |   130 |    10   (0)| 00:00:01 |       |       |
    |   1 |  PARTITION SYSTEM ALL|          |     2 |   130 |    10   (0)| 00:00:01 |     1 |     4 |
    |*  2 |   TABLE ACCESS FULL  | S_P_TEST |     2 |   130 |    10   (0)| 00:00:01 |     1 |     4 |
    -------------------------------------------------------------------------------------------------
    Predicate Information (identified by operation id):
    ---------------------------------------------------
       2 - filter("COL1"=1)
    Note
    -----
       - dynamic sampling used for this statement (level=2)
    统计信息
    ----------------------------------------------------------
              5  recursive calls
              0  db block gets
             70  consistent gets
              0  physical reads
              0  redo size
            414  bytes sent via SQL*Net to client
            338  bytes received via SQL*Net from client
              2  SQL*Net roundtrips to/from client
              0  sorts (memory)
              0  sorts (disk)
              2  rows processed
    SQL> select * from S_P_TEST partition(p3) where col1=1;
    运行计划
    ----------------------------------------------------------
    Plan hash value: 1626227678
    ----------------------------------------------------------------------------------------------------
    | Id  | Operation               | Name     | Rows  | Bytes | Cost (%CPU)| Time     | Pstart| Pstop |
    ----------------------------------------------------------------------------------------------------
    |   0 | SELECT STATEMENT        |          |     1 |    65 |     4   (0)| 00:00:01 |       |       |
    |   1 |  PARTITION SYSTEM SINGLE|          |     1 |    65 |     4   (0)| 00:00:01 |     3 |     3 |
    |*  2 |   TABLE ACCESS FULL     | S_P_TEST |     1 |    65 |     4   (0)| 00:00:01 |     3 |     3 |
    ----------------------------------------------------------------------------------------------------
    Predicate Information (identified by operation id):
    ---------------------------------------------------
       2 - filter("COL1"=1)
    Note
    -----
       - dynamic sampling used for this statement (level=2)
    统计信息
    ----------------------------------------------------------
              5  recursive calls
              0  db block gets
             15  consistent gets
              0  physical reads
              0  redo size
            385  bytes sent via SQL*Net to client
            338  bytes received via SQL*Net from client
              2  SQL*Net roundtrips to/from client
              0  sorts (memory)
              0  sorts (disk)

              1  rows processed

      系统分区表的使用场景我想并不多,假设对传统的分区表数据的特性理解是:1.数据和分区是有联系的; 2.分区就是把非常多的表粘在管理结合起来。

    该系统分区表只有第二特征。

    版权声明:本文博客原创文章,博客,未经同意,不得转载。

  • 相关阅读:
    机器视觉行业分析
    lua sample code analysis
    My GPU info from "GPU Caps Viewer"
    网页hack程序编写
    debug redmine send email
    如何下载web资源
    看国内网络电视解决方案2
    看国内网络电视解决方案
    babel-polyfill使用与性能优化
    升级NGINX支持HTTP/2服务端推送
  • 原文地址:https://www.cnblogs.com/gcczhongduan/p/4745179.html
Copyright © 2020-2023  润新知