Я выполняю параллельные запросы на вставку (12 запросов одновременно) через инструмент ETL для вставки данных в секционированную таблицу в Oracle.
Определение таблицы
CREATE TABLE CUST_TRAN
(
TRAN_SEQ_NO NUMBER(20,0)
, TRAN_DATE DATE
)
TABLESPACE USERS
STORAGE (INITIAL 256K NEXT 256K)
PARTITION BY RANGE (TRAN_DATE)
INTERVAL(NUMTODSINTERVAL(1, 'DAY'))
(
PARTITION CUST_TRAN_p_old VALUES LESS THAN (TO_DATE('1-1-2008', 'DD-MM-YYYY'))
)
12 запросов выполняются для 4 разных дат (по 3 запроса для каждой даты). Итак, 12 запросов пытаются вставить в 4 раздела. Вот пример запроса на вставку -
insert into cust_tran
select a.tran_seq_no, trunc(a.tran_datetime) as tran_date
from table_a a
inner join table_b b on a.store = b.store
and a.tran_seq_no = b.tran_seq_no
and trunc(a.tran_datetime) = to_date('2018-01-31', 'YYYY-MM-DD')
and a.tran_type in ('SALE')
Тем не менее, я продолжаю сталкиваться с одной из следующих проблем:
1) я получаю эту ошибку - ORA-14300: partitioning key maps to a partition outside maximum permitted number of partitions
Or
2) Задание выполняется нормально, без ошибок, но вставляет данные в раздел CUST_TRAN_SUMM_p_old со странной датой, которой не было ни в одном из исходных запросов, и эта дата не существует в исходных таблицах. Точное значение этой странной даты трудно сказать, потому что, когда я использую SQL Developer и форматирую дату для отображения в виде ГГГГ-ММ-ДД ЧЧ24:МИ:СС (в Инструменты > Настройки > База данных > NLS), она отображает ноль, но когда я меняю формат отображения на DD-MON-RR HH24:MI:SS, отображается 29-NOV-01 22:58:59. Когда я использую DBeaver, он отображается как 10101-11-29 22:58:59. Когда я использую Toad для Oracle, он отображается как 01.01.0001.
Первая проблема действительно странная, потому что я указываю дату в фильтре, и он никак не может подобрать другую дату, которой нет в фильтре. Кроме того, я запускаю это после создания таблицы. Таким образом, невозможно, чтобы было достигнуто максимальное количество разделов (1 023 999).
Вторая проблема не менее странная.
Это ошибка в Oracle? Есть ли какие-то настройки в Oracle, которые нужно изменить? Неправильно ли вставлять данные с помощью одновременных запросов на вставку в секционированную таблицу?
10101
? - это не может быть ни год, ни месяц, ни день.... Укажите дату в форматеDD-MM-YYYY
- person Marmite Bomber   schedule 26.10.2018