zoukankan      html  css  js  c++  java
  • day11_分区表——11g新特性

    11g在分区上有了很大的改进,其中有一个特性是Interval-Partition,他是range分区的派生,自动创建指定间隔的分区。

    对时间类型和数字类型的支持:

    1.对于采用date类型或TIMESTAMP类型的Interval Partitioning可以支持按year、month、day、hour、minute、second六种类型的定长宽度分区,分别通过如下函数转换

    numtoyminterval ( n, { 'YEAR'|'MONTH'})
    numtodsinterval ( n, { 'DAY'|'HOUR'|'MINUTE'|'SECOND'})

    2. Interval (number) 即多少值一个分区

     

    创建示例

    1.时间类型

    --创建表
    SQL> CREATE TABLE intervalpart1 (c1 NUMBER, c2 DATE)
         PARTITION BY RANGE (c2)
         INTERVAL ( NUMTOYMINTERVAL (1, 'MONTH') )
         (PARTITION part1
             VALUES LESS THAN (TO_DATE ('02/01/2013', 'MM/DD/YYYY'))
        );

    Table created.

    --查询只有一个分区
    SQL> select table_name, partition_name, HIGH_VALUE
          from dba_tab_partitions t
         where table_name = 'INTERVALPART1';



    --增加2行记录一行是2月份的,一行是1月份的
    SQL>   insert into intervalpart1 values (1,TO_DATE ('02/02/2013', 'MM/DD/YYYY'));

    SQL> commit;


    SQL> insert into intervalpart1 values (1,TO_DATE ('01/01/2013', 'MM/DD/YYYY')); 

    SQL> commit;

    SQL>   Select Count(1) From intervalpart1;



    --增加了2月份的分区
    SQL> 
    SQL> select table_name, partition_name, HIGH_VALUE
          from dba_tab_partitions t
         where table_name = 'INTERVALPART1';



    --插入当前时间的分区
    SQL>  insert into intervalpart1 values (1,sysdate);

    SQL> commit;



    --又有一个分区新建了,如果插入的时间在两个月以后或者更久,则Oracle只生成必须的分区,并不会生成连续分区(先插入2015年的只产生2015年,再插入2014年的,也只产生2014年)。
    SQL> select table_name, partition_name, HIGH_VALUE
          from dba_tab_partitions t
         where table_name = 'INTERVALPART1';

     

    2.数字类型

    ----创建表
    SQL> CREATE TABLE intervalpart2 (c1 NUMBER, c2 DATE)
       PARTITION BY RANGE (c1)
         INTERVAL (100)
          (PARTITION part1
              VALUES LESS THAN (100)
        );



    --查询只有一个分区
    SQL> select table_name, partition_name, HIGH_VALUE
          from dba_tab_partitions t
          where table_name = 'INTERVALPART2';



    --增加2行记录一行是1,一行是101
    SQL> insert into  intervalpart2 values (1,sysdate);

    SQL> insert into  intervalpart2 values (101,sysdate);

    SQL> commit;

    SQL>  Select Count(1) From  intervalpart2;


    --增加了101的分区
    SQL> select table_name, partition_name, HIGH_VALUE
      from dba_tab_partitions t
     where table_name = 'INTERVALPART2';



    --插入1101数值的分区
    SQL>  insert into  intervalpart2 values (1101,sysdate);

    SQL> commit;

    --插入901数值的分区
    SQL>  insert into  intervalpart2 values (901,sysdate);

    SQL> commit;



    --又有一个分区新建了,如果插入的数值是差别很大或者更久,则Oracle只生成必须的分区,并不会生成连续分区(与时间的处理方式相同)。
    SQL> select table_name, partition_name, HIGH_VALUE
       from dba_tab_partitions t
        where table_name = 'INTERVALPART2';


     

    管理:

    1.普通分区与自动分区的转换

    --创建普通分区表
    SQL> CREATE TABLE intervalpart3 (c1 NUMBER, c2 DATE)
               PARTITION BY RANGE (c1)
               (PARTITION part1 VALUES LESS THAN (100)
        );


    SQL>  insert into  intervalpart3 values (1,sysdate);
    SQL> commit;


    --当插入超出值时会报错
    SQL>  insert into  intervalpart3 values (101,sysdate);
     insert into  intervalpart3 values (101,sysdate)
                       *
    ERROR at line 1:
    ORA-14400: inserted partition key does not map to any partition

    --设置100数值为分区
    SQL> alter table  intervalpart3 set INTERVAL(100);

    --插入成功
    SQL> insert into  intervalpart3 values (101,sysdate);

    SQL> commit;



    --新生成分区
    SQL> select table_name, partition_name, HIGH_VALUE
          from dba_tab_partitions t
         where table_name = 'INTERVALPART3';


    --也可以设置个更高的值
    SQL> alter table  intervalpart3 set INTERVAL(300);


    --插入数据
    SQL> insert into  intervalpart3 values (201,sysdate);

    SQL> insert into  intervalpart3 values (401,sysdate);

    SQL> insert into  intervalpart3 values (501,sysdate);

    SQL> insert into  intervalpart3 values (601,sysdate);

    SQL> commit;



    --更改的值生效,之前的分区不影响。
    SQL> select table_name, partition_name, HIGH_VALUE
          from dba_tab_partitions t
         where table_name = 'INTERVALPART3';


    --关闭自动分区
    SQL> alter table  intervalpart3 set INTERVAL();


    --插入数据不成功
    SQL>  insert into  intervalpart3 values (801,sysdate);
     insert into  intervalpart3 values (801,sysdate)
                       *
    ERROR at line 1:
    ORA-14400: inserted partition key does not map to any partition



    2.配置多个表空间的分区存储

    alter table intervalpart3 set STORE IN (tablespace1, tablespace2, tablespace3);

    这3个表空间,分区会循环分配到这3个表空间。



    3. rename 分区名

    分区:
    alter table INTERVALPART3  rename partition PART1 to gannimei;

    --------------------------------------------------------------
    (1)
    CREATE TABLE T_MOBBIZ_LOG_NEW 
    PARTITION BY RANGE(QUERY_TIME)
      INTERVAL (NUMTOYMINTERVAL(1,'MONTH'))
       (PARTITION P_BASE_1 VALUES LESS THAN(TO_DATE('2014-10-01','YYYY-MM-DD'))) 
       as select * from T_MOBBIZ_LOG where QUERY_TIME >=to_date('2014-09-01','yyyy-mm-dd');


    rename T_MOBBIZ_LOG to nimei;
    rename T_MOBBIZ_LOG_NEW to T_MOBBIZ_LOG;





  • 相关阅读:
    CNN comprehension
    Gradient Descent
    Various Optimization Algorithms For Training Neural Network
    gerrit workflow
    jenkins job配置脚本化
    Jenkins pipeline jobs隐式传参
    make words counter for image with the help of paddlehub model
    make words counter for image with the help of paddlehub model
    git push and gerrit code review
    image similarity
  • 原文地址:https://www.cnblogs.com/xiaoxiao5ya/p/40b07faf5d8c0d46b01f49928d4bf58d.html
Copyright © 2011-2022 走看看