Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / при truncate partition падает index / 12 сообщений из 12, страница 1 из 1
11.12.2013, 10:52
    #38496585
Elibay
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
при truncate partition падает index
всем привет,

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

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

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


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

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

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

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

решил вопрос тем что поставил rebuild index после truncate partition!
...
Рейтинг: 0 / 0
20.12.2013, 10:13
    #38507500
ORA__SQL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
при truncate partition падает index
ElibayBobby Z.,
решил вопрос тем что поставил rebuild index после truncate partition! rebuild index дороже, чем update global indexes , если делаем DDL для небольшой доли данных по отношению ко всей таблице
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
12.03.2020, 08:23
    #39936506
Synoptic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
при truncate partition падает index
Дабы не заводить новую тему, подниму эту.
Ситуация аналогичная, партицированная таблица с непартицированным индексом, у которых примерно такой 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
12.03.2020, 13:29
    #39936643
Alexander Anokhin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
при truncate partition падает index
Synoptic

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


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


должен будет сканировать все партиции индекса, чтобы найти строку через индекс.
...
Рейтинг: 0 / 0
12.03.2020, 13:29
    #39936644
Alexander Anokhin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
при truncate partition падает index
...
Рейтинг: 0 / 0
13.03.2020, 06:20
    #39936887
Synoptic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
при truncate partition падает index
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
Форумы / Oracle [игнор отключен] [закрыт для гостей] / при truncate partition падает index / 12 сообщений из 12, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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