powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Удалить быстро индексы и построить заново
7 сообщений из 32, страница 2 из 2
Удалить быстро индексы и построить заново
    #39749887
mikron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SYmikronТеоретический вопрос для понимания.
пропущено...

Ты зашорился в своей ситуации. Oracle понятия не имеет "живой" ли unusable индекс или нет. Вот тебе пример "дохлого" индекса

Я вроде чётко вопрос обрисовал, но попробуем ещё раз. Я вижу ошибку "ORA-01502", я понимаю что она значит.
Я не понимаю почему ораклу естъ дело до этого индекса. Зачем ему этот индекс на удалении?
...
Рейтинг: 0 / 0
Удалить быстро индексы и построить заново
    #39749908
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mikronЯ не понимаю почему ораклу естъ дело до этого индекса. Зачем ему этот индекс на удалении?

Если нет PK/UK + SKIP_UNUSABLE_INDEXES то ему этот индекс и при INSERT и UPDATE и DELETE побоку. А если есть constraint PK/UK то могут быть таблицы дети a при DELETE (или UPDATE) проверка таблиц детей осуществляется через PK/UK индекс папаши. В принципе Oracle мог бы проверить есть ли таблицы дети и если нет то разрешать DELETE при SKIP_UNUSABLE_INDEXES, enabled PK/UK и его unusable индексе но зачем так заморачиваться?

SY.
...
Рейтинг: 0 / 0
Удалить быстро индексы и построить заново
    #39750010
mikron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SYА если есть constraint PK/UK то могут быть таблицы дети a при DELETE (или UPDATE) проверка таблиц детей осуществляется через PK/UK индекс папаши.
SY.

"Дети" это referencing tables?
Не логично: для проверки констраинтов "детей" при удалении в "родителе" индекс "родителя" не нужен. Нужен индекс на таблицах "детей".
...
Рейтинг: 0 / 0
Удалить быстро индексы и построить заново
    #39750450
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
mikronЯ не понимаю почему ораклу естъ дело до этого индекса. Зачем ему этот индекс на удалении?xtenderораклу для поддержки уникальности нужен валидный индекс, соответственно при отключении индекса, оракл будет ругаться при изменении ключа уникальности, независимо какая DML операция проходит и даже, если этот констрейнт deferred (естественно, кроме вставки/удаления NULL'ов и апдейта на то же значение).
Еще раз: Для проверки уникальности оракл пользуется связанным индексом. Соответственно, для поддержки уникальности оракл должен быть уверен, что все его изменения проходят без ошибок, т.е индекс актуален.
Простой пример:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
-- создадим табличку из 3 полей:
SQL> create table test(a int,b int,c int);

Table created.
-- создадим обычный индекс на двух из них
SQL> create index nonunique on test(a,b);

Index created.

-- создадим unique констрейнт только на A, причем он deferred - то есть 
-- реальная проверка должна проводиться только при коммите:
SQL> alter table test add constraint uq_a unique(a) deferrable initially deferred using index nonunique;

Table altered.

SQL> insert into test select level,level,level from dual connect by level<=15;

15 rows created.

SQL> commit;

Commit complete.

-- переведем индекс в Unusable:
SQL> alter index nonunique unusable;

Index altered.

-- без проблем обновляем третий столбец, который не входит ни в список полей индекса,
-- ни в список полей констрейнта:
SQL> update test set c=null;

15 rows updated.

-- а теперь попробуем обновить поле, которое входит в индекс, но не в констрейнт:
SQL> update test set b=null;
update test set b=null
*
ERROR at line 1:
ORA-01502: index 'XTENDER.NONUNIQUE' or partition of such index is in unusable state



зы. Ну и кроме того, нет смысла усложнять код отдельными проверками при разных операциях (insert/update/merge...)
...
Рейтинг: 0 / 0
Удалить быстро индексы и построить заново
    #39750459
mikron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xtenderЕще раз: Для проверки уникальности оракл пользуется связанным индексом. Соответственно, для поддержки уникальности оракл должен быть уверен, что все его изменения проходят без ошибок, т.е индекс актуален.

Причинноследственная связь нарушена.
проходят без ошибок != индекс актуален.
И ваш пример тому подтверждение: оракл различает что меняем.
Вы можете привести пример удаления, который бы нарушил unique constraint?

xtenderзы. Ну и кроме того, нет смысла усложнять код отдельными проверками при разных операциях (insert/update/merge...)
IMHO проверки на вставку и удаление очень разные.
Об усложнении кода тут вряд ли стоит рассчитывать.
Конкуренты Оракла не ленятся и заработывют бонусы :)
...
Рейтинг: 0 / 0
Удалить быстро индексы и построить заново
    #39750535
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
mikronпроходят без ошибок != индекс актуален.будет пример в контексте сабжа?
По-моему, вполне очевидно, что если индекс не валиден, значит нельзя использовать его для проверок.

mikronИ ваш пример тому подтверждение: оракл различает что меняем.У меня сильное подозрение, что вы не поняли пример. Можете объяснить своими словами, что в примере происходит?

mikronКонкуренты Оракла не ленятся и заработывют бонусы :)
Какие именно конкуренты?
Postgres и DB2 не позволяют отключать индексы, их можно только дропнуть вместе с констрейнтом.
Чтобы заработали бонусы, они должны хотя бы научиться временно их отключать.
А в MS SQL отключение индекса, автоматически отключает связанные с ним констрейнты, хорошо хоть выводит, что именно наотключал.
Так про что речь?
...
Рейтинг: 0 / 0
Удалить быстро индексы и построить заново
    #39750562
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mikronПричинноследственная связь нарушена.Так продай свой патент Oreacle-у. Чего ты тут распыляешься?
...
Рейтинг: 0 / 0
7 сообщений из 32, страница 2 из 2
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Удалить быстро индексы и построить заново
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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