2013-10-18 117 views
1

我有一個包含大量信息的日誌表。 我想將它分成兩部分:第一部分是過去一個月的日誌,因爲它們通常被查看。第二部分是來自今年剩餘時間的日誌(壓縮)。oracle 11g中的「動態」分區

我的問題是,分區哪裏「直到2013年1月1日」,「比2013年1月1日更近」的所有例子 - 與固定日期...

我是什麼尋找/期望是一種在上個月定義分區的方法,以便在日期發生變化時,將30天前的日誌「自動」傳輸到壓縮分區。

我想我可以創建另一個表,它是完全壓縮的,並使用JOBS移動信息,但我希望有一個內置的解決方案。

謝謝。

回答

4

我想你想要基於日期的間隔分區。這會自動爲你生成分區。例如,每月的分區將是:

create table test_data (
    created_date  DATE default sysdate not null, 
    store_id   NUMBER, 
    inventory_id  NUMBER, 
    qty_sold   NUMBER 
) 
PARTITION BY RANGE (created_date) 
INTERVAL(NUMTOYMINTERVAL(1, 'MONTH')) 
(
    PARTITION part_01 values LESS THAN (TO_DATE('20130101','YYYYMMDD')) 
) 

當數據被插入,甲骨文將投入適當的分區或如果需要創建一個。分區名稱會有點神祕(SYS_xxxx),但是您可以使用「partition for」子句只抓取您想要的月份。例如:

select * from test_data partition for (to_date('20130101', 'YYYYMMDD')) 
0

無法自動將數據傳輸到壓縮分區。你可以,但是,安排一個簡單的工作上個月的分區在每月的開始這種說法壓縮:

ALTER TABLE some_table 
MOVE PARTITION FOR (add_months(trunc(SYSDATE), -1) 
COMPRESS; 

如果你想留下來,只有兩個分區:當前月份和歸檔所有過去的交易,你也可以將分區與ALTER TABLE MERGE PARTITIONS合併,但就我而言,它會重建整個歸檔分區,所以我會勸阻這樣做,並保持每個月在其獨立分區中存儲。