我正在创建一个利用复合分区的数据库。我将使用范围分区(按日期)对一个表进行分区 然后通过哈希(通过客户端ID)进一步对其进行子分区。到目前为止这么好,没有问题,但我还需要这些分区 存储在单独的数据文件中,每个dbf保存一个月的数据。我正在阅读复合分区以及我发现的内容 是主要范围分区将只是一个逻辑分区,数据将存储在子分区中,而不是似乎 让我的目标变得不可能我是对的,应该寻找不同的解决方案吗?
提前致谢。
我的数据库是Oracle 11g和Oracle 12
答案 0 :(得分:1)
在现有表上,您可以将分区或子分区移动到不同的表空间,即不同的数据文件,例如:
ALTER TABLE scuba_gear MOVE SUBPARTITION bcd_types TABLESPACE tbs23;
ALTER TABLE parts MOVE PARTITION depot2 TABLESPACE ts094;
请参阅Moving Subpartitions和Moving 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会通过“循环”方法将每月分区放到这12个表空间中。子分区也可以使用STORE IN
子句,请参阅Creating a composite range-hash partitioned table