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触发器。
如果没有开启这个选项,就会在更新时报错。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM