Oracle Partitioning Проблема разделения раздела

У нас есть VLDB около 2 ТБ, и таблицы разделены на каждую дату. У нас также есть отображение индекса для этих разделов. Но за 2019 год все данные до 01 октября 2019 года попадают в один раздел, так как из-за опечатки был создан один подраздел с высоким значением 10.01.2019.

Мы пытаемся исправить это с помощью «Разделить раздел», то есть переместить данные до 10 февраля 2019 года в один раздел, а затем удалить пустой раздел и создать отдельные разделы для каждой даты. Это работает нормально.

Проблема связана с сопоставлением индексов, так как уже есть сопоставления с 1 октября по 31 декабря, и мы не можем их удалить. Итак, мы пытались создать сопоставление с 11 февраля по 30 сентября. Сценарий для этого занимает очень много времени из-за объема данных. А также после этого индексы переходят в НЕИСПОЛЬЗУЕМОЕ состояние, и когда мы пытаемся перестроить, это занимает много времени!

Есть ли лучший способ сделать это.

ОБРАЗЕЦ КОДА-

CREATE TABLE My_Table (
  id             NUMBER(9,0)  NOT NULL,
  source_system  VARCHAR(20),
  eod_date                  NUMBER(9,0)  NOT NULL,
  other columns
  )
  TABLESPACE XYZ001td
  PARTITION BY LIST (source_system)
  SUBPARTITION BY RANGE (
    eod_date
  )
  (
    PARTITION p_XYZ VALUES ('XYZ')
      NOCOMPRESS
      (
        SUBPARTITION XYZ_20181227 VALUES LESS THAN (20181228) TABLESPACE XYZ_20181227_td,
        SUBPARTITION XYZ_20181228 VALUES LESS THAN (20181229) TABLESPACE XYZ_20181228_td,
        SUBPARTITION XYZ_20181229 VALUES LESS THAN (20181230) TABLESPACE XYZ_20181229_td,
        SUBPARTITION XYZ_20181230 VALUES LESS THAN (20181231) TABLESPACE XYZ_20181230_td,
        SUBPARTITION XYZ_20181231 VALUES LESS THAN (20190101) TABLESPACE XYZ_20181231_td
        **SUBPARTITION XYZ_20191001 VALUES LESS THAN (20191002) TABLESPACE XYZ_20191001_td,**
        SUBPARTITION XYZ_20191002 VALUES LESS THAN (20191003) TABLESPACE XYZ_20191002_td,
        SUBPARTITION XYZ_20191003 VALUES LESS THAN (20191004) TABLESPACE XYZ_20191003_td,
      )
   )
/

CREATE INDEX inx_my_table_01
  ON My_table (
    source_system,
    eod_date    
  )
  TABLESPACE XYZ001td
  GLOBAL PARTITION BY HASH (
    source_system,
    eod_date
  )
  (
    PARTITION XYZ_20181227
      TABLESPACE XYZ_20181227_ti
      LOGGING,
    PARTITION XYZ_20181228
      TABLESPACE XYZ_20181228_ti
      LOGGING,
    PARTITION XYZ_20181229
      TABLESPACE XYZ_20181229_ti
      LOGGING,
    PARTITION XYZ_20181230
      TABLESPACE XYZ_20181230_ti
      LOGGING,
    PARTITION XYZ_20181231
      TABLESPACE XYZ_20181231_ti
      LOGGING
  )

person AJ01    schedule 11.02.2019    source источник
comment
Было бы полезно, если бы вы добавили несколько примеров операторов создания таблиц и индексов, чтобы мы могли видеть, как создаются ваши таблицы и индексы. Тогда мы могли бы помочь.   -  person Boneist    schedule 11.02.2019
comment
Почему нельзя удалить существующие сопоставления индексов?   -  person APC    schedule 11.02.2019
comment
Привет, APC. Мы получаем ORA-14330: Не удается удалить раздел глобального индекса с хэш-разделами. Есть ли способ вставить промежуточное сопоставление индекса, не затрагивая существующее сопоставление индекса?   -  person AJ01    schedule 12.02.2019
comment
@ Boniest — добавлен пример кода   -  person AJ01    schedule 12.02.2019
comment
Как вы разделяете свой раздел и обновляете ли глобальные индексы как часть команды?   -  person Boneist    schedule 15.02.2019


Ответы (2)


я не уверен, что полностью понимаю проблему. Но я думаю, что следующие шаги могут помочь

Создайте временную таблицу и скопируйте все данные за 2019 год в эту таблицу, чтобы удалить все разделы и индексы за 2019 год. воссоздать разделы и повторно вставить данные, создать локальные индексы

person Hijesh Vl    schedule 11.02.2019
comment
Вместо INSERT вы также можете поменять местами разделы - это может быть быстрее - person Wernfried Domscheit; 11.02.2019

Мы не можем удалить глобальный хэш-разделенный индекс

ORA-14330: Невозможно удалить раздел глобального хеш-секционированного индекса.

Есть ли способ вставить промежуточное сопоставление индекса, не касаясь существующего сопоставления индекса

person Prajesh    schedule 12.02.2019