Индексирование удаленного раздела Oracle - PullRequest
0 голосов
/ 01 марта 2019

Я хочу проиндексировать раздел моей таблицы, я не уверен, как это сделать, и у меня нет доступа к моей базе данных.

База данных - Oracle 11. Будет ли мой код работать?

CREATE TABLE MARKET.PARTTABLE
(
  EXTRACT_DATE   DATE                   NOT NULL,
  LOAD_ID    NUMBER(10)                 NOT NULL,
  LOAD_DATE  DATE                       NOT NULL,
  NAME  VARCHAR2(200 BYTE)              NOT NULL
)
PARTITION BY RANGE (EXTRACT_DATE)
(   
    PARTITION PDEFAULT VALUES LESS THAN (MAXVALUE)
    NOLOGGING
    NOCOMPRESS 
    TABLESPACE MARKET_DAT
    PCTFREE    0
    INITRANS   1
    MAXTRANS   255
    STORAGE    (
                MAXSIZE          UNLIMITED
                BUFFER_POOL      DEFAULT
                FLASH_CACHE      DEFAULT
                CELL_FLASH_CACHE DEFAULT
               )
CREATE INDEX NAME_PARTTABLE ON PARTTABLE(NAME)
)
NOCACHE
NOPARALLEL
MONITORING;

Когда я запускаю это, я получаю следующую ошибку:

ORA-14020: этот физический атрибут не может быть указан для раздела таблицы

Это указывает на то, что у меня есть проблема с форматированием, но я на самом деле не нахожу никакой полезной документации для индексации раздела (или, может быть, я просто слишком глуп, чтобы понять их).

РЕДАКТИРОВАТЬ: я пробовал это:

CREATE TABLE MARKET.PARTTABLE
(
  EXTRACT_DATE   DATE                   NOT NULL,
  LOAD_ID    NUMBER(10)                 NOT NULL,
  LOAD_DATE  DATE                       NOT NULL,
  NAME  VARCHAR2(200 BYTE)              NOT NULL
)
PARTITION BY RANGE (EXTRACT_DATE)
(   
    PARTITION PDEFAULT VALUES LESS THAN (MAXVALUE)
    NOLOGGING
    NOCOMPRESS 
    TABLESPACE MARKET_DAT
    PCTFREE    0
    INITRANS   1
    MAXTRANS   255
    STORAGE    (
                MAXSIZE          UNLIMITED
                BUFFER_POOL      DEFAULT
                FLASH_CACHE      DEFAULT
                CELL_FLASH_CACHE DEFAULT
               )
)
NOCACHE
NOPARALLEL
MONITORING;
CREATE INDEX NAME_PARTTABLE ON PARTTABLE(NAME)

Это сработало, но я не уверен, находится ли индекс сейчас на разделе или на всей таблице.Может ли кто-нибудь помочь мне?

1 Ответ

0 голосов
/ 01 марта 2019

Ваше второе утверждение фактически не создавало INDEX в разделе.Секционированные индексы должны быть определены как LOCAL или GLOBAL.

Поскольку вы пытаетесь создать это без префикса индекса (крайний левый столбец (столбцы) индексане является ключом раздела), лучше выбрать LOCAL INDEX

CREATE INDEX NAME_PARTTABLE ON PARTTABLE(NAME) LOCAL;

.. но я не уверен, что индекс теперь находится в разделе или включенвся таблица.

Вы можете запросить представление словаря данных ALL_PART_INDEXES или USER_PART_INDEXES, чтобы проверить ваше индексное имя.Обычные однораздельные индексы не отображаются в этих представлениях.

select * from USER_PART_INDEXES where index_name='NAME_PARTTABLE';

Секционированные таблицы и индексы

...