powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / при truncate partition падает index
12 сообщений из 12, страница 1 из 1
при truncate partition падает index
    #38496585
Elibay
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
всем привет,

После truncate partition падает unique index.

каким должен быть индекс чтобы после очистки партиции индекс был валидным!

Спасибо!
...
Рейтинг: 0 / 0
при truncate partition падает index
    #38496595
XCB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
локальным?
...
Рейтинг: 0 / 0
при truncate partition падает index
    #38496598
Фотография Серафимный Шестикрыл
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elibay...


stfm
...
Рейтинг: 0 / 0
при truncate partition падает index
    #38496603
Elibay
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XCB,

да, нужно на глобальный поменять ?
...
Рейтинг: 0 / 0
при truncate partition падает index
    #38497681
Bobby Z.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elibay,

Уникальный индекс на partitioned table должен быть либо глобальным, либо локальным композитным с включением partitioning key (причем желательно префиксом, иначе partition pruning может не срабатывать.) Иначе его уникальность просто невозможно гарантировать. Глобальные индексы автоматически инвалидируются при проведении операций над разделами типа truncate и прочих, если операция выполняется без UPDATE GLOBAL INDEXES clause (что, в свою очередь, может оказаться весьма дорогостоящим, поскольку фактически глобальные индексы будут перестроены.) Локальные индексы в целом от таких операций не падают, хотя после некоторых операций (например, move,) соответствующие разделы индекса могут быть помечены как unusable, если они не пустые и если не сказано UPDATE INDEXES. Там ещё есть всякие нюансы, для полной картинки читайте документацию (ссылку дали уже.)

Надеюсь, из вышесказанного Вы сможете вывести ответ на Ваш вопрос.
...
Рейтинг: 0 / 0
при truncate partition падает index
    #38497706
Фотография pravednik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bobby Z.может оказаться весьма дорогостоящим, поскольку фактически глобальные индексы будут перестроены.
подвержены операции delete
...
Рейтинг: 0 / 0
при truncate partition падает index
    #38507443
Elibay
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bobby Z.,

решил вопрос тем что поставил rebuild index после truncate partition!
...
Рейтинг: 0 / 0
при truncate partition падает index
    #38507500
ORA__SQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ElibayBobby Z.,
решил вопрос тем что поставил rebuild index после truncate partition! rebuild index дороже, чем update global indexes , если делаем DDL для небольшой доли данных по отношению ко всей таблице
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
при truncate partition падает index
    #39936506
Synoptic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дабы не заводить новую тему, подниму эту.
Ситуация аналогичная, партицированная таблица с непартицированным индексом, у которых примерно такой DDL:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
CREATE TABLE TABLE_NAME 
   (  ID NUMBER NOT NULL ENABLE, 
   INSDATE TIMESTAMP (6) NOT NULL ENABLE, 
   CONSTRAINT TABLE_NAME_PK PRIMARY KEY (ID)
  USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS 
  STORAGE(INITIAL 4194304 NEXT 4194304 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE TB1  ENABLE
   ) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 
  STORAGE(
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE TB1 
  PARTITION BY RANGE (INSDATE);
  CREATE UNIQUE INDEX TABLE_NAME_PK ON TABLE_NAME (ID) 



Есть джоб обслуживания партиций этой таблицы, который по некому правилу запускает
либо ALTER TABLE ADD PARTITION
либо ALTER TABLE TRUNCATE PARTITION

После выполнения truncate partition индекс стал unusable.
Если я всё правильно понимаю, ошибка в том, что индекс - не партицированный.

Прошу помочь с вопросам:
1. Правильно ли я понимаю, что при данных вводных нужен локальный партицированный индекс?
2. Есть ли форма Alter index для требуемого преобразования индекса?
...
Рейтинг: 0 / 0
при truncate partition падает index
    #39936643
Alexander Anokhin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Synoptic

1. Правильно ли я понимаю, что при данных вводных нужен локальный партицированный индекс?
2. Есть ли форма Alter index для требуемого преобразования индекса?


Если при данных вводных индекс TABLE_NAME_PK сделать локальным, это будет другой индекс. В частности, такой запрос как
Код: plsql
1.
select * from TABLE_NAME where ID = :B


должен будет сканировать все партиции индекса, чтобы найти строку через индекс.
...
Рейтинг: 0 / 0
при truncate partition падает index
    #39936644
Alexander Anokhin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
при truncate partition падает index
    #39936887
Synoptic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexander Anokhin, спасибо! Почитал...
Получается что если добавлять локальные индексы, то в каждый индекс нужно добавлять поле, по которому партицирована таблица. А следовательно и в запросы...
В моём случае возникает проблема, когда выполняется truncate партиции и инвалидируется первичный ключ, что не позволяет выполнять DML операции. Правильно ли я понимаю, что будет достаточно выполнить следующее:

Код: plsql
1.
2.
3.
ALTER TABLE TABLE_NAME DROP CONSTRAINT TABLE_NAME_PK;
CREATE UNIQUE INDEX TABLE_NAME_PK ON TABLE_NAME (INSDATE, ID) LOCAL TABLESPACE TB1;
ALTER TABLE TABLE_NAME ADD CONSTRAINT TABLE_NAME_PK PRIMARY KEY (INSDATE, ID);



Это устранит проблему. Ну а для других индексов, у которых status ='UNUSABLE' , непосредственно после ALTER TABLE TRUNCATE PARTITION выполнять REBUILD. И максимум что будет, в период между TRUNCATE PARTITION и окончанием REBUILD индексов, запросы будут выполняться фулсканом таблицы.
Всё верно?


UPDATE
Что-то похоже я затупил и можно просто делать
Код: plsql
1.
ALTER TABLE TRUNCATE PARTITION P_NAME UPDATE INDEXES
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / при truncate partition падает index
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]