[ADMIN]A misunderstanding

chenyan995發表於2009-04-14

I used to consider that an unusable index may cause DML changes fail. In fact, only the index related to a constraint may lead to such situation.

SQL> create table move_test(cola number);

表已建立。

SQL> begin
2 for i in 1..10 loop
3 insert into move_test values(i);
4 end loop;
5 commit;
6 end;
7 /

PL/SQL 過程已成功完成。

SQL> select * rom move_test;
select * rom move_test
*
第 1 行出現錯誤:
ORA-00923: 未找到要求的 FROM 關鍵字


SQL> select * from move_test;

COLA
----------
1
2
3
4
5
6
7
8
9
10

已選擇10行。

SQL> create index idx1_move_test on move_test(cola);

索引已建立。

SQL> insert into move_test values(11);

已建立 1 行。

SQL> commit;

提交完成。

SQL> alter table move_test move;

表已更改。

SQL> select status from user_indexes where index_name='IDX1_MOVE_TEST';

STATUS
--------
UNUSABLE

SQL> insert into move_test values(12);

已建立 1 行。

SQL> commit;

提交完成。

SQL> select status from user_indexes where index_name='IDX1_MOVE_TEST';

STATUS
--------
UNUSABLE

SQL> alter index idx1_move_test rebuild;

索引已更改。

SQL> alter table move_test add primary key(cola);

表已更改。

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

INDEX_NAME
------------------------------
IDX1_MOVE_TEST

SQL> alter table move_test move;

表已更改。

SQL> select status from user_indexes where index_name='IDX1_MOVE_TEST';

STATUS
--------
UNUSABLE

SQL> insert into move_test values(13);
insert into move_test values(13)
*
第 1 行出現錯誤:
ORA-01502: 索引 'YCHEN.IDX1_MOVE_TEST' 或這類索引的分割槽處於不可用狀態


SQL> alter index idx1_move_test rebuild;

索引已更改。

SQL> insert into move_test values(13);

已建立 1 行。

SQL> commit;

提交完成。

[@more@]A

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8558093/viewspace-1020495/,如需轉載,請註明出處,否則將追究法律責任。

相關文章