Я выполняю параллельные запросы вставки (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
Или
2) Задание выполняется без ошибок, но вставляет данные в раздел CUST_TRAN_SUMM_p_old со странной датой, которой не было ни в одном из исходных запросов, и эта дата не существует в исходных таблицах. Трудно сказать точное значение этой странной даты, потому что, когда я использую SQL Developer и форматирую дату, которая будет отображаться как ГГГГ-ММ-ДД HH24: MI: SS (в меню Инструменты> Предпочтения> База данных> NLS), он отображает ноль, но когда я меняю формат отображения на DD-MON-RR HH24: MI: SS, он отображает 29-НОЯБРЬ-01 22:58:59. Когда я использую DBeaver, он отображается как 10101-11-29 22:58:59. Когда я использую Toad for Oracle, он отображается как 01.01.00.
Первая проблема действительно странная, потому что я поставляю дату в фильтре, и нет никакого способа, которым она может забрать другую дату, которой нет в фильтре. Плюс, я запускаю это после свежего создания таблицы. Таким образом, невозможно, чтобы оно достигло максимального количества разделов (1 023 999).
Второй вопрос одинаково странный.
Это ошибка в Oracle? Есть ли в Oracle какие-то настройки, которые нужно изменить? Разве неправильно вставлять данные, используя параллельные запросы вставки в многораздельную таблицу?