Столбец идентификаторов Oracle 12c пропускает часть чисел при вставке в таблицу во время загрузки ETL - PullRequest
0 голосов
/ 19 февраля 2019

Столбец идентификаторов Oracle 12c пропускает часть чисел при вставке в таблицу во время загрузки ETL.

В моей процедуре ETL приведен код, который пропускает определенные числа при вставке в таблицу во время процесса ETL.

Но если я выполню приведенный ниже код вручную, я не вижу никаких проблем.Кажется, что все числа появляются последовательно.

enter image description here

Код в моей процедуре ETL: -

MERGE INTO BRANDTABLE PT
USING (
    SELECT DISTINCT BRAND
        ,BRAND_DESC
    FROM SOURCE_BRAND
    ) TMP
    ON (PT.BRAND_CODE = TMP.BRAND)
WHEN MATCHED
    THEN
        UPDATE
        SET PT.BRAND_DESC = TMP.BRAND_DESC;

INSERT INTO /*+APPEND NOLOGGING*/ BRANDTABLE (
    BRAND_CODE
    ,BRAND_DESC
    )
SELECT DISTINCT BRAND
    ,BRAND_DESC
FROM SOURCE_BRAND SRC
WHERE NOT EXISTS (
        SELECT 1
        FROM BRANDTABLE Trg
        WHERE Trg.BRAND_CODE = Src.BRAND
        )
ORDER BY BRAND_DESC;

Таблица: -

CREATE TABLE TABLENAME
   (    "BRAND_ID" NUMBER(6,0) GENERATED ALWAYS AS IDENTITY MINVALUE 1 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 START WITH 4085 CACHE 20 NOORDER  NOCYCLE  NOKEEP  NOSCALE  NOT NULL ENABLE, 
    "BRAND_CODE" VARCHAR2(10 BYTE), 
    "BRAND_DESC" VARCHAR2(100 BYTE), 
     CONSTRAINT "DIM_BRAND_DESC_MASTER_PK" PRIMARY KEY ("BRAND_ID")
  USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS 
  STORAGE(INITIAL 131072 NEXT 131072 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "TABL"  ENABLE
   ) SEGMENT CREATION IMMEDIATE 
  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 
 NOCOMPRESS LOGGING
  STORAGE(INITIAL 131072 NEXT 131072 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "TABL" ;

enter image description here

1 Ответ

0 голосов
/ 19 февраля 2019

Идентификационные столбцы - это не что иное, как автоматическое использование последовательности для заполнения столбца.И у оракула есть никогда гарантированных последовательностей без пропусков.Любое количество вещей может создать разрыв.Откат транзакций, которые потянули последовательность;повторная загрузка кэша последовательности перед использованием всех кэшированных чисел.Тот факт, что ваш разрыв увеличивается до 4060 (делится на размер кеша, равный 20), настоятельно указывает на очистку кеша.Как бы то ни было, если ваш дизайн зависит от последовательностей, дизайн имеет недостатки.Первый вопрос состоит в том, почему вы думаете, что вам нужны непропущенные последовательности.

...