zoukankan      html  css  js  c++  java
  • oracle数据库分区

    numtoyminterval和numtoyminterval是日期转换函数,

    作用:可以将数字转换成相应的日期单位时间

    1.NUMTOYMINTERVAL ( n , 'char_expr' ) char_expr:日期描述,可以是YEAR和MONTH。

        通常当我们使用add_month添加月时,如果输入是本月月底的日期,那么得到的也是月底的日期,

        比如add_month(to_date('2007-02-28','yyyy-mm-dd'),1)得到的就会是'2007-03-31',而不是'2007-03-28'。

        此时,如果使用的是to_date('2007-02-28','yyyy-mm-dd')+numtoyminterval(1,'month'),那么得到的就是'2007-03-28'。

    2. numtodsinterval的用法和numtoyminterval一样只是他的参数为day、hour、minute、second

        Oracle 11g之前,维护分区需要手工。11g之后使用interval来实现自动扩展分区,简化了维护。 根据年: INTERVAL(NUMTOYMINTERVAL(1,'YEAR')) 根据月:            INTERVAL(NUMTOYMINTERVAL(1,'MONTH')) 根据天: INTERVAL(NUMTODSINTERVAL(1,'DAY')) 根据时分秒: NUMTODSINTERVAL( n, { 'DAY'|'HOUR'|'MINUTE'|'SECOND'})

    create table SYS_LOG_TEST
    (
      id           VARCHAR2(64) not null,
      log_type     VARCHAR2(64),
      title        NVARCHAR2(500),
      create_by    VARCHAR2(64),
      create_date  TIMESTAMP(6),
      remote_addr  VARCHAR2(255),
      user_agent   VARCHAR2(255),
      request_uri  VARCHAR2(255),
      method       VARCHAR2(5),
      params       CLOB,
      exception    CLOB,
      operate_type VARCHAR2(64),
      content      CLOB,
      PRIMARY KEY (ID)
    )
    partition by range(create_date)
    INTERVAL(NUMTODSINTERVAL(1,'HOUR'))
    (PARTITION p0 VALUES LESS THAN (TIMESTAMP'2018-05-06 14:30:00'));

    3.该段代码表示:

        1).创建的表SYS_LOG_TEST

        2).创建了默认分区表p0,insert  数据时,create_date  小于 '2000-05-06' 的所有数据都存储在 p0 分区表中

        3).做到了自动创建分区表的功能,(TIMESTAMP'2018-05-06 14:30:00') 按小时自动分区

            即如果 date_time  的年月找不到已有分区,则自动创建新的分区

    根据分区表查询语句类似:select * from SYS_LOG_TEST partition (p0);

    采用自动创建分区优缺点

    优点:可以根据实际情况,自动创建分区

    缺点:创建的分区表名称无法指定(目前我研究的范围内,无法指定),系统自动默认生成类似SYS_P27的分区表名

    自动创建的分区表可以在oracle系统自带的表中查询到自己的分区表名称

    语句如下: select * from dba_tab_partitions where table_name='SYS_LOG_TEST'

    该语句可以查询到SYS_LOG_TEST 下面的所有分区表信息,

    如果非要根据分区条件找到对应的分区表名称,只能  通过 系统表 dba_tab_partitions 中的High_value  字段,

    截取相关字符串匹配条件找出Partition_Name 

    //update DPHOMEWMS.WMS_OPERATION_RECORD set OPERATION_TIME = sysdate where OPERATION_TIME is null;
    insert into SYS_LOG_TEST select * from SYS_LOG;
    drop table SYS_LOG;
    alter table SYS_LOG_TEST rename to SYS_LOG;
    alter table SYS_LOG enable row movement;
    alter table SYS_LOG enable row movement; 是指允许分区表的分区键是可更新,当某一行更新时,如果更新的是分区列,并且更新后的列值不属于原来的这个分区,
    如果开启了这个选项,就会把这行从这个分区中delete掉,并加到更新后所属的分区,此时就会发生rowid的改变。相当于一个隐式的delete+insert,但是不会触发insert/delete触发器。
    如果没有开启这个选项,就会在更新时报错。
  • 相关阅读:
    【python进阶】哈希算法(Hash)
    【数据库】MongoDB操作命令
    【数据库】MongoDB安装&配置
    【python基础】元组方法汇总
    【python基础】集合方法汇总
    滴水穿石-04Eclipse中常用的快捷键
    滴水穿石-03一道面试题引发的思考
    滴水穿石-02制作说明文档
    滴水穿石-01JAVA和C#的区别
    步步为营101-同一个PCode下重复的OrderNumber重新排序
  • 原文地址:https://www.cnblogs.com/person008/p/9003625.html
Copyright © 2011-2022 走看看