Цель: Автоматическое добавление новых партиций при добавлении нового текстового значения
Ситуация: Поступают записи, в одном поле которых есть повторяющееся текстовое значение. На это поле в целевой для этих данных таблице создана партиция. В качестве значения этого поля может прийти новое значение, которого нет в существующих партициях. Возникает ошибка, связанная с отсутствие соответствующей секции. Списком эти партиции не сделать так, как заранее не известны значения, которые могут поступать.
Вопрос: Можно ли для этого случая организовать автоматическое добавление необходимых секций? Без триггера, только средствами организации таблицы.
Что то типа такого (выдуманный пример):
create table char_part
(
id integer,
txt varchar2(200)
)
partition by range (txt) interval (1) -- Проблема в автодобавлении нового текст. значения
(
partition "abc" values less than ('abc'),
partition "max" values less than (maxvalue) -- Для null - значений
)
Ответ
TL;DR: В версии 11g это невозможно. Лучшее решение - перейти на 12c, так как в этой версии уже введено автоматическое лист секционирование.
Можно решить задачу через секционирование по interval появившиеся в 11g.
На основе бизнес требований надо продумать, как вычислqть колонку для секционирования. Как например, спроси у Тома.
Предложение для задачи как в вопросе:
create table char_part
(
id integer,
txt varchar2(200),
txt# generated always as (coalesce (ora_hash (txt, power (2,20)-1), 0)) virtual
)
partition by range (txt#) interval (1) (
partition "empty" values less than (0),
partition "undef" values less than (1)
);
insert into char_part (id, txt)
select 1, 'ABC' from dual union all
select 2, 'DEF' from dual union all
select 3, 'ZZZ' from dual union all
select 9, null from dual
;
select table_name, partition_name, high_value
from user_tab_partitions
where table_name=upper('char_part')
;
TABLE_NAME PARTITION_NAME HIGH_VALUE
---------- -------------------- ----------
CHAR_PART SYS_P1141 222410
CHAR_PART SYS_P1142 59915
CHAR_PART SYS_P1143 627928
CHAR_PART empty 0
CHAR_PART undef 1
Комментариев нет:
Отправить комментарий