Восстановление индексов

VS2004
Дата: 05.06.2006 06:50:34
Вопрос такой. База в режиме NOARCIVEMODE
Отрабатываю ситуацию, когда индексы находятся на выделенном диске и этот диск полностью сдох.
Что сделал:
1. смонтировал БД и используя команду ALTER DATABASE DATAFILE .... OFFLINE DROP отключил все файлы индексного пространства. Открыл базу.
2. Создал новое табличное индексное пространство. Пересоздал индексы
3. Удаляю старое табличное индексное пространство. Естественно получаю ошибку:
ORA-02429: cannot drop index used for enforcement of unique/primary key
потому что есть на таблицах ссылки на индексы.

Вопрос: каким образом все-таки удалить старое индексное пространство.
SeaGate
Дата: 05.06.2006 08:34:29
VS2004
Вопрос та
кой. База в режиме NOARCIVEMODE
Отрабатываю ситуацию, когда индексы находятся на выделенном диске и этот диск полностью сдох. 
Что сделал:
1. смонтировал БД и используя команду ALTER DATABASE DATAFILE .... OFFLINE DROP отключил все файлы индексного пространства. Открыл базу.
2. Создал новое табличное индексное пространство. Пересоздал индексы
3. Удаляю старое табличное индексное пространство. Естественно получаю ошибку:
ORA-02429: cannot drop index used for enforcement of unique/primary key
потому что есть на таблицах ссылки на индексы.

Вопрос: каким образом все-таки удалить старое индексное пространство.

По всей видимости надо переключить constraints на новые индексы.
Для примера:
SQL> create table test (id number,constraint test_pk primary key (id) using index (create index test_idx on test (id)));

Table created

SQL> alter table test modify constraint test_pk disable;

Table altered

SQL> drop index test_idx;

Index dropped

SQL> create index test_idx1 on test (id);

Index created

SQL> alter table test modify constraint test_pk using index test_idx1;

Table altered

SQL> alter table test modify constraint test_pk enable;

Table altered

SQL> select index_name from user_constraints where constraint_name='TEST_PK';

INDEX_NAME
------------------------------
TEST_IDX1

SQL> select banner from v$version;

BANNER
----------------------------------------------------------------
Oracle9i Enterprise Edition Release 9.2.0.7.0 - Production
PL/SQL Release 9.2.0.7.0 - Production
CORE	9.2.0.7.0	Production

TNS for 32-bit Windows: Version 9.2.0.7.0 - Production
NLSRTL Version 9.2.0.7.0 - Production

SQL> 
И еще такой вариант (для constraint, имена которых были сгенерированы системой):
SQL> drop table test;

Table dropped

SQL> create table test (id number primary key);

Table created

SQL> select constraint_name,index_name from user_constraints where table_name='TEST';

CONSTRAINT_NAME                INDEX_NAME
------------------------------ ------------------------------
SYS_C003010                    SYS_C003010

SQL> alter table test modify constraint SYS_C003010 disable;

Table altered

SQL> create index test_idx1 on test (id);

Index created

SQL> alter table test modify constraint SYS_C003010 using index test_idx1;

Table altered

SQL> alter table test modify constraint SYS_C003010 enable;

Table altered

SQL> select constraint_name,index_name from user_constraints where table_name='TEST';

CONSTRAINT_NAME                INDEX_NAME
------------------------------ ------------------------------
SYS_C003010                    TEST_IDX1

SQL> 
Alek__Sher
Дата: 05.06.2006 09:08:49
Может лучше пересоздать индексы?
alter index test_i rebuild;
organiz
Дата: 05.06.2006 10:05:05
Alek__Sher
Может лучше пересоздать индексы?
alter index test_i rebuild;


Насколько помню для перестройки Oracle использует старые индексы.
Не завалится ли тогда перестройка?
Alek__Sher
Дата: 05.06.2006 15:42:37
>Насколько помню для перестройки Oracle использует старые индексы.
>Не завалится ли тогда перестройка?

Индексы должны пересоздаваться заново.
Только в случае потери TS получается облом. Сейчас попробовал.
Пришлось все индексы дропать и создавать заново...
juks@gala.net
Дата: 05.06.2006 15:48:40
VS2004
Вопрос такой. База в режиме NOARCIVEMODE
Отрабатываю ситуацию, когда индексы находятся на выделенном диске и этот диск полностью сдох.

Отрабатывать нужно ситуацию :
База в режиме ARCHIVELOG
Восстановление файлов индексного пр-ва из бекапа
Ааз
Дата: 05.06.2006 16:29:42
Alek__Sher
Пришлось все индексы дропать и создавать заново...
alter index xxx unusable;
alter index xxx rebuild tablespace yyy;
Всего
organiz
Дата: 05.06.2006 16:30:18
Alek__Sher
>Насколько помню для перестройки Oracle использует старые индексы.
>Не завалится ли тогда перестройка?

Индексы должны пересоздаваться заново.
Только в случае потери TS получается облом. Сейчас попробовал.
Пришлось все индексы дропать и создавать заново...


Так и я о том ж. :) rebuild не пройдет.
Alek__Sher
Дата: 05.06.2006 16:58:17
>alter index xxx unusable;
>alter index xxx rebuild tablespace yyy;

Работает! Прикольно! Спасибо!
VS2004
Дата: 06.06.2006 04:42:31
Alek__Sher
>alter index xxx unusable;
>alter index xxx rebuild tablespace yyy;

Работает! Прикольно! Спасибо!



После команды: alter index xxx rebuild tablespace yyy;
индексы станут активными? То есть не будет никаких последствий команды alter index xxx unusable?