oracle分區表按時間自動創建


表分區是一種思想,分區表示一種技術實現。當表的大小過G的時候可以考慮進行表分區,提高查詢效率,均衡IO。oracle分區表是oracle數據庫提供的一種表分區的實現形式。表進行分區后,邏輯上仍然是一張表,原來的查詢SQL同樣生效,同時可以采用使用分區查詢來優化SQL查詢效率,不至於每次都掃描整個表。

根據年: INTERVAL(NUMTOYMINTERVAL(1,'YEAR'))
根據月: INTERVAL(NUMTOYMINTERVAL(1,'MONTH'))
根據天: INTERVAL(NUMTODSINTERVAL(1,'DAY'))
根據時分秒: NUMTODSINTERVAL( n, { 'DAY'|'HOUR'|'MINUTE'|'SECOND'})

此時已經有普通表了,我創建了含相同字段的分區表,把數據導入到分區表中,再把原表刪掉。

-- Create table(WMS_OPERATION_RECORD)
create table DPHOMEWMS.WMS_OPERATION_RECORD_TMP
(
  ID             NUMBER(19) not null,
  WAREHOUSE_ID   NUMBER(19),
  ASN_ID         NUMBER(19),
  PICK_TICKET_ID NUMBER(19),
  RELATION_CODE  VARCHAR2(50),
  OPERATION_TYPE VARCHAR2(50),
  OPERATION_ID   NUMBER(19),
  OPERATION_NAME VARCHAR2(50 CHAR),
  OPERATION_TIME TIMESTAMP(6) DEFAULT systimestamp not null,
  STATUS         VARCHAR2(10),
  TYPE           VARCHAR2(10),
  COUNTS         NUMBER(10)
)tablespace DPHOMEWMS_DATA
PARTITION BY RANGE (OPERATION_TIME) interval (numtoyminterval(1, 'month')) 
STORE IN (DPHOMEWMS_DATA) 
(
  partition OPERATION_RECORD_P01 values less than (TIMESTAMP' 2017-05-08 00:00:00')
  tablespace DPHOMEWMS_DATA
);
-- Add comments to the columns 
comment on column DPHOMEWMS.WMS_OPERATION_RECORD_TMP.WAREHOUSE_ID
  is '倉庫id';
comment on column DPHOMEWMS.WMS_OPERATION_RECORD_TMP.ASN_ID
  is '收貨單id';
comment on column DPHOMEWMS.WMS_OPERATION_RECORD_TMP.PICK_TICKET_ID
  is '發貨單ID';
comment on column DPHOMEWMS.WMS_OPERATION_RECORD_TMP.RELATION_CODE
  is '關聯單據號(收貨單或發貨單的code)';
comment on column DPHOMEWMS.WMS_OPERATION_RECORD_TMP.OPERATION_TYPE
  is '操作類型';
comment on column DPHOMEWMS.WMS_OPERATION_RECORD_TMP.OPERATION_ID
  is '操作人ID';
comment on column DPHOMEWMS.WMS_OPERATION_RECORD_TMP.OPERATION_NAME
  is '操作人名稱';
comment on column DPHOMEWMS.WMS_OPERATION_RECORD_TMP.OPERATION_TIME
  is '操作時間';
comment on column DPHOMEWMS.WMS_OPERATION_RECORD_TMP.STATUS
  is '狀態';
comment on column DPHOMEWMS.WMS_OPERATION_RECORD_TMP.TYPE
  is '明細或者統計次數類型';
comment on column DPHOMEWMS.WMS_OPERATION_RECORD_TMP.COUNTS
  is '統計次數';
--創建本地索引
create index IDX_WMS_OPERATION_RECORD  on DPHOMEWMS.WMS_OPERATION_RECORD_TMP(RELATION_CODE)
tablespace DPHOMEWMS_INDEX local;
update DPHOMEWMS.WMS_OPERATION_RECORD set OPERATION_TIME = sysdate where OPERATION_TIME is null;
insert into DPHOMEWMS.WMS_OPERATION_RECORD_TMP select * from WMS_OPERATION_RECORD;
drop table DPHOMEWMS.WMS_OPERATION_RECORD;
alter table DPHOMEWMS.WMS_OPERATION_RECORD_TMP rename to WMS_OPERATION_RECORD;
alter table DPHOMEWMS.WMS_OPERATION_RECORD enable row movement;

(1)OPERATION_TIME是分區鍵,每一個月會自動創建一個分區,分區鍵不允許為null。

(2)alter table table_name enable row movement;    是指允許分區表的分區鍵是可更新,當某一行更新時,如果更新的是分區列,並且更新后的列值不屬於原來的這個分區,如果開啟了這個選項,就會把這行從這個分區中delete掉,並加到更新后所屬的分區,此時就會發生rowid的改變。相當於一個隱式的delete+insert,但是不會觸發insert/delete觸發器。如果沒有開啟這個選項,就會在更新時報錯。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM