2016-09-11 4 views
1

Я создаю базу данных, которая будет использовать составное разбиение. Я разбиваю одну таблицу с использованием разбиения по диапазону (по дате) , а затем далее подразделяет его на хэш (по идентификатору клиента). Пока все хорошо, не проблема, но мне также нужно иметь эти разделы , хранящиеся в отдельных файлах данных, каждый dbf, содержащий данные за один месяц. Я читаю составные разделы и то, что я нашел , состоит в том, что разделение первичного диапазона будет только логическим, и данные будут сохранены в подгруппах, а это, по-видимому, делает мою цель невозможной. Правильно ли я должен искать другое решение?Как хранить диапазонные/хеш-составные разделы в отдельных файлах данных по диапазону?

Заранее спасибо.

Мои базы данных Oracle 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 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 затем поместит ежемесячные разделы методом «round-robin» в эти 12 табличных пространств. STORE IN также возможно для подразделов, см. Creating a composite range-hash partitioned table