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

Кто знает как эффективно дропнуть(или отключить?) все индексы по табличке, а потом после заливки данных восстановить их? Как это можно сделать без особых усилий, спасибо

Oracle 10g
...
Рейтинг: 0 / 0
Удалить быстро индексы и построить заново
    #35557707
tru55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
ALTER INDEX ... UNUSABLE

...

ALTER INDEX ... REBUILD [ONLINE]
...
Рейтинг: 0 / 0
Удалить быстро индексы и построить заново
    #35557751
IndexDropper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спос. Все равно скрипт писать придется для удаления всех индексов, жаль, что нет команды типа ALTER TABLE SET ALL INDEXES UNUSABLE....

Кстати, если так
Код: plaintext
ALTER INDEX ... REBUILD NOLOGGING
то будет быстрее по идее ?
...
Рейтинг: 0 / 0
Удалить быстро индексы и построить заново
    #35557766
G.M.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IndexDropperСпос. Все равно скрипт писать придется для удаления всех индексов, жаль, что нет команды типа ALTER TABLE SET ALL INDEXES UNUSABLE....

Кстати, если так
Код: plaintext
ALTER INDEX ... REBUILD NOLOGGING
то будет быстрее по идее ?

Еще быстрее будет, если в параллельном режиме их создавать:
Код: plaintext
ALTER INDEX ... REBUILD NOLOGGING PARALLEL
...
Рейтинг: 0 / 0
Удалить быстро индексы и построить заново
    #35557897
Фотография Timm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
До 10.2.0.4 лучше грохать индексы вместо ребилда.
см. Note 6455161 Higher CPU / Higher "cache buffer chains" latch gets / Higher "consistent gets" after truncate/Rebuild.
...
Рейтинг: 0 / 0
Удалить быстро индексы и построить заново
    #35558931
IndexDropper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Версия,как раз 10.2.0.4

Дело в другом, сделал индексы UNUSABLE, теперь при инсертах ругается
Код: plaintext
ORA- 01502 : index 'TEST.IX_TEST' or partition of such index is in unusable state

Что делать то?
...
Рейтинг: 0 / 0
Удалить быстро индексы и построить заново
    #35558943
sql+
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
IndexDropperВерсия,как раз 10.2.0.4

Дело в другом, сделал индексы UNUSABLE, теперь при инсертах ругается
Код: plaintext
ORA- 01502 : index 'TEST.IX_TEST' or partition of such index is in unusable state

Что делать то?

Включить обратно
...
Рейтинг: 0 / 0
Удалить быстро индексы и построить заново
    #35558963
tru55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IndexDropperВерсия,как раз 10.2.0.4

Дело в другом, сделал индексы UNUSABLE, теперь при инсертах ругается
Код: plaintext
ORA- 01502 : index 'TEST.IX_TEST' or partition of such index is in unusable state

Что делать то?

Почитать про параметр базы skip_unusable_indexes
...
Рейтинг: 0 / 0
Удалить быстро индексы и построить заново
    #35558976
IndexDropper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skip_unusable_indexes = true

Дело в том, что это был уникальный индекс и на него это не действует, так что его анюзить не буду, пожалуй.
...
Рейтинг: 0 / 0
Удалить быстро индексы и построить заново
    #35560040
Фотография bastrakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
стало интересно.
а что будет, если все индексы изначально были организованны в отдельном tablespace и вот его и пересоздать. после этого дать комманду на пересоздание всех индексов.

другой вариант того же вопроса: я хочу перенести все индексы на другой драйв.

чем чревато?

заранее спасибо. во
...
Рейтинг: 0 / 0
Удалить быстро индексы и построить заново
    #35560479
>см. Note 6455161

Оппа. Так вот какая букашка нам жисть портит.
Thnx, Timm.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Удалить быстро индексы и построить заново
    #39749191
mikron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IndexDropperskip_unusable_indexes = true

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

У меня схожая ситуация что и у автора. Но мой вопрос: почему ORA-01502 на удаление выскакивает? Я понимаю аргументацию орaкла на вставку, но удаление ведь уже никак уникалность не нарушит. Тогда почему?
...
Рейтинг: 0 / 0
Удалить быстро индексы и построить заново
    #39749205
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
mikron,

ораклу для поддержки уникальности нужен валидный индекс, соответственно при отключении индекса, оракл будет ругаться при изменении ключа уникальности, независимо какая DML операция проходит и даже, если этот констрейнт deferred (естественно, кроме вставки/удаления NULL'ов и апдейта на то же значение). Так что просто дропните/отключите констрейнт, все равно вам потом индекс заново ребилдить/строить:
1. если отключите или дропнете констрейнт и грохните индекс, то при включении констрейнта оракл сам построит индекс
2. если же сначала отдельно восстановите уникальный индекс, то при включении/создании констрейнта его даже валидировать не надо будет.
...
Рейтинг: 0 / 0
Удалить быстро индексы и построить заново
    #39749247
mikron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xtender,

Индекс перевожу в unusable, constraint запрещаю, делаю delete и ошибка остаётся.
Я не понимаю смысл проверки уникальности при удалении.
Он есть и я его не вижу или баг?

Удалять constraint не хочу.
...
Рейтинг: 0 / 0
Удалить быстро индексы и построить заново
    #39749276
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mikronЯ не понимаю смысл проверки уникальности при удалении.Результат нарушения уникальности это ora-1.
ora-1502 это запрет dml над unusable уникальным индексом.
...
Рейтинг: 0 / 0
Удалить быстро индексы и построить заново
    #39749301
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
mikronconstraint запрещаюне понял? что значит запрещаю? покажите ddl таблицы
...
Рейтинг: 0 / 0
Удалить быстро индексы и построить заново
    #39749307
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
mikronИндекс перевожу в unusable, constraint запрещаю, делаю delete и ошибка остаётся.что-то не так делаете:
alter table ... disable constraint ...
Код: 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.
SQL> create table test(a int,b int, constraint uq_a unique (a));

Table created.

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

15 rows created.

SQL> commit;

Commit complete.

SQL> alter index uq_a unusable;

Index altered.

SQL> delete from test where b=15;
delete from test where b=15
*
ERROR at line 1:
ORA-01502: index 'XTENDER.UQ_A' or partition of such index is in unusable state


SQL> alter table test disable constraint uq_a;

Table altered.

SQL> delete from test where b=15;

1 row deleted.

deferred/delete/insert
Код: 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.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
SQL> create table test(a int,b int);

Table created.

SQL> create index nonunique on test(a);

Index created.

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 from dual connect by level<=15;

15 rows created.

SQL> commit;

Commit complete.

SQL> alter index nonunique unusable;

Index altered.

SQL> delete from test where b=15;
delete from test where b=15
*
ERROR at line 1:
ORA-01502: index 'XTENDER.NONUNIQUE' or partition of such index is in unusable state


SQL> update test set a=null;
update test set a=null
*
ERROR at line 1:
ORA-01502: index 'XTENDER.NONUNIQUE' or partition of such index is in unusable state


SQL> insert into test values(null,null);

1 row created.

SQL> commit;

Commit complete.

SQL> delete from test where b is null;

1 row deleted.

SQL> commit;

Commit complete.

SQL> alter table test disable constraint uq_a;

Table altered.

SQL> delete from test where b=15;

1 row deleted.

SQL>
SQL> drop index nonunique;

Index dropped.

SQL> select index_name from user_indexes where table_name='TEST';

no rows selected

SQL> alter table test enable constraint uq_a;

Table altered.

SQL> select index_name from user_indexes where table_name='TEST';

INDEX_NAME
--------------------------------------------------------------
UQ_A

1 row selected.

...
Рейтинг: 0 / 0
Удалить быстро индексы и построить заново
    #39749312
mikron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xtendermikronconstraint запрещаюне понял? что значит запрещаю?
Код: plsql
1.
alter table table_name modify constraint constraint_name disable
...
Рейтинг: 0 / 0
Удалить быстро индексы и построить заново
    #39749323
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
mikron,

покажите полный текст ошибки и детали:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
select * from user_constraints where table_name='&your_tab_name';

select c.* from user_constraints c,user_constraints p 
where p.table_name='&your_tab_name' and c.r_owner=p.owner and c.r_constraint_name=p.constraint_name;

select i.index_name,i.index_type,i.uniqueness,i.status
      ,ic.column_position
      ,ic.column_name
from user_indexes i,user_ind_columns ic 
where i.table_name='&your_tab_name' and i.index_name=ic.index_name;
...
Рейтинг: 0 / 0
Удалить быстро индексы и построить заново
    #39749367
mikron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xtender,

Код: 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.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
>> select CONSTRAINT_NAME, constraint_type, STATUS from user_constraints where table_name='QUOTE_VALUE_INTRADAY';


CONSTRAINT_NAME                C STATUS  
------------------------------ - --------
CT_PRIMARYKEY_456              P DISABLED
SYS_C001554782                 C ENABLED 
SYS_C001554783                 C ENABLED 
SYS_C001554784                 C ENABLED 
SYS_C001554785                 C ENABLED 
SYS_C001554786                 C ENABLED 
SYS_C001554787                 C ENABLED 

7 rows selected. 

>> select c.* 
from user_constraints c,user_constraints p 
where p.table_name='QUOTE_VALUE_INTRADAY' and c.r_owner=p.owner and c.r_constraint_name=p.constraint_name;

no rows selected


>> select i.index_name,i.index_type,i.uniqueness,i.status
      ,ic.column_position
      ,ic.column_name
from user_indexes i,user_ind_columns ic 
where i.table_name='QUOTE_VALUE_INTRADAY' and i.index_name=ic.index_name;

INDEX_NAME                     INDEX_TYPE                  UNIQUENES STATUS   COLUMN_POSITION
------------------------------ --------------------------- --------- -------- ---------------
COLUMN_NAME                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
IDX_QUOTE_VALUE_INTR5          NORMAL                      NONUNIQUE UNUSABLE               1 
QUOTE_NAME                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  

IDX_QUOTE_VALUE_INTR6          NORMAL                      NONUNIQUE UNUSABLE               1 
QUOTE_DATE                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  

CT_PRIMARYKEY_456              NORMAL                      UNIQUE    UNUSABLE               1 
QUOTE_SET_NAME                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              


INDEX_NAME                     INDEX_TYPE                  UNIQUENES STATUS   COLUMN_POSITION
------------------------------ --------------------------- --------- -------- ---------------
COLUMN_NAME                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
CT_PRIMARYKEY_456              NORMAL                      UNIQUE    UNUSABLE               2 
QUOTE_NAME                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  

CT_PRIMARYKEY_456              NORMAL                      UNIQUE    UNUSABLE               3 
QUOTE_DATETIME                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              




И вроде бы всё прибрано, но:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
alter session set skip_unusable_indexes=True
/


Session altered.


delete from quote_value_intraday 
where not exists (select 1 from del_quote_value_intraday s 
		where s.quote_set_name = quote_value_intraday.quote_set_name
		  and s.quote_name = quote_value_intraday.quote_name
		  and s.quote_date = quote_value_intraday.quote_date)
/

Error starting at line : 27 in command -
delete from quote_value_intraday 
where not exists (select 1 from del_quote_value_intraday s 
		where s.quote_set_name = quote_value_intraday.quote_set_name
		  and s.quote_name = quote_value_intraday.quote_name
		  and s.quote_date = quote_value_intraday.quote_date)
Error report -
ORA-01502: index 'CALYPSO_C03.CT_PRIMARYKEY_456' or partition of such index is in unusable state

...
Рейтинг: 0 / 0
Удалить быстро индексы и построить заново
    #39749465
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
mikron,

какая версия оракла? выложите полный ддл таблицы. И попробуйте просто грохнуть индекс(не констрейнт). Вообще если индекс был создан автоматически при создании констрейнта, то при отключении констрейнта, у вас индекс сам должен был дропнуться, но тк у вас не удалился, значит создавали отдельно.
...
Рейтинг: 0 / 0
Удалить быстро индексы и построить заново
    #39749590
mikron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xtender,

Код: plaintext
1.
2.
3.
4.
5.
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
PL/SQL Release 11.2.0.4.0 - Production
"CORE	11.2.0.4.0	Production"
TNS for Linux: Version 11.2.0.4.0 - Production
NLSRTL Version 11.2.0.4.0 - Production

У меня сейчас нет много времени ковырять ошибку. Вернусь позже к ней.

Теоретический вопрос для понимания.
mikronЯ не понимаю смысл проверки уникальности при удалении.
Он есть и я его не вижу или баг?
...
Рейтинг: 0 / 0
Удалить быстро индексы и построить заново
    #39749605
Фотография Viewer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mikronТеоретический вопрос для понимания.
mikronЯ не понимаю смысл проверки уникальности при удалении.
Он есть и я его не вижу или баг?
... есть ли смысл учить пулю различать где свой, а где чужой? Или единый механизм надёжнее?
...
Рейтинг: 0 / 0
Удалить быстро индексы и построить заново
    #39749631
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mikronТеоретический вопрос для понимания.
mikronЯ не понимаю смысл проверки уникальности при удалении.
Он есть и я его не вижу или баг?


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

Код: 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.
SQL> create table tbl as select * from emp;

Table created.

SQL> alter table tbl add constraint tbl_pk primary key(empno);

Table altered.

SQL> create table tbl_child(empno number);

Table created.

SQL> alter table tbl_child add constraint tbl_child_fk foreign key(empno) references tbl;

Table altered.

SQL> alter table tbl move;

Table altered.

SQL> alter session set skip_unusable_indexes = true;

Session altered.

SQL> delete tbl where rownum = 1;
delete tbl where rownum = 1
*
ERROR at line 1:
ORA-01502: index 'SCOTT.TBL_PK' or partition of such index is in unusable state


SQL> 
...
Рейтинг: 0 / 0
Удалить быстро индексы и построить заново
    #39749722
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
SY,

А доп.таблица с внешним ключом в примере зачем? Без неё точно так же все будет
...
Рейтинг: 0 / 0
25 сообщений из 32, страница 1 из 2
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Удалить быстро индексы и построить заново
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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