如何按范围在单独的数据文件中存储范围/散列复合分区?

时间:2016-09-11 14:19:01

标签: oracle partitioning database-partitioning

我正在创建一个利用复合分区的数据库。我将使用范围分区(按日期)对一个表进行分区 然后通过哈希(通过客户端ID)进一步对其进行子分区。到目前为止这么好,没有问题,但我还需要这些分区 存储在单独的数据文件中,每个dbf保存一个月的数据。我正在阅读复合分区以及我发现的内容 是主要范围分区将只是一个逻辑分区,数据将存储在子分区中,而不是似乎 让我的目标变得不可能我是对的,应该寻找不同的解决方案吗?

提前致谢。

我的数据库是Oracle 11g和Oracle 12

1 个答案:

答案 0 :(得分: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会通过“循环”方法将每月分区放到这12个表空间中。子分区也可以使用STORE IN子句,请参阅Creating a composite range-hash partitioned table