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