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;





  • 相关阅读:
    哈工大《机器学习》最小二乘法曲线拟合——实验一
    最小二乘法曲线拟合以及matlab实现
    Dubbo简介
    Redis持久化策略
    Linux安装Redis
    RabbitMQ-Demo
    RabbitMQ安装相关
    SpringCloud-Alibaba-Nacos-Demo
    Nacos_启动失败原因
    IDEA中properties中文显示乱码
  • 原文地址:https://www.cnblogs.com/xiaoxiao5ya/p/40b07faf5d8c0d46b01f49928d4bf58d.html
Copyright © 2011-2022 走看看