2016-09-11 31 views
1

我正在創建一個將使用複合分區的數據庫。我將使用範圍分區(按日期) 對一個表進行分區,然後通過散列(按客戶機ID)進一步對其進行子分區。到目前爲止這麼好,沒有問題,但我還需要將這些分區 存儲在單獨的數據文件中,每個dbf持有一個月的數據。我正在閱讀複合分區,我發現 是主要的範圍分區將只是一個邏輯分區,數據將存儲在子分區中,而不是我看來 使我的目標不可能。我是否對,應該尋找不同的解決方案?如何將範圍/哈希複合分區按範圍存儲在單獨的數據文件中?

在此先感謝。

我的數據庫是甲骨文11g和Oracle 12

+0

您確定需要管理數據文件嗎?如果你使用ASM,它會爲你照顧。 –

回答

1

對於現有的表,你可以移動分區或子分區到不同的表空間,即不同的數據文件,示例:

ALTER TABLE scuba_gear MOVE SUBPARTITION bcd_types TABLESPACE tbs23; 
ALTER TABLE parts MOVE PARTITION depot2 TABLESPACE ts094; 

看到Moving SubpartitionsMoving Table Partitions

對於新表格,您通常會像這樣創建它們:

CREATE TABLE sales 
    (prod_id  NUMBER(6) 
    , cust_id  NUMBER 
    , time_id  DATE 
    , channel_id CHAR(1) 
    , promo_id  NUMBER(6) 
    , quantity_sold NUMBER(3) 
    , amount_sold NUMBER(10,2) 
) 
PARTITION BY RANGE (time_id) 
INTERVAL (NUMTOYMINTERVAL(1,'MONTH')) 
STORE IN (ts_1, ts_2, ts_3, ts_4, ts_5, ts_6 ,ts_7 ,ts_8, ts_9, ts_10, ts_11, ts_12) 
SUBPARTITION BY HASH (cust_id) SUBPARTITIONS 4 
(PARTITION before_2000 VALUES LESS THAN (TO_DATE('01-JAN-2000','dd-MON-yyyy'))); 

然後Oracle會通過「round-robin」方法將這些月份分區放到這12個表空間中。 STORE IN子句也可以用於子分區,請參閱Creating a composite range-hash partitioned table