ORA-01502 state unusable錯誤成因和解決方案

來源:互聯網
上載者:User

一般普通表在在如下3個情況下可以使index unusable
1)move
2)sqlldr [有時]--關於sqlldr專門測試學些
3)手動alter index unusable

對分區表,又要分local index和globa index來說
1)首先上面的導致普通表上的索引失效的原因對分區表也同樣適用.
2)對local index在exchange without including indexes的時候也會unusable
3)global index在partition mt的時候會導致unusable[除非加上update global indexes]

樣本:
1.建立測試表:
create table idx_status_tb(
  id   number,
  name varchar2(32),
  type number(2),
  idx1 number(2),
  idx2 number(2)
);
2.建立唯一索引
create unique index idx_tb on idx_status_tb(idx1,idx2);
3.查看索引狀態
select index_name,index_type,tablespace_name,table_type,status from user_indexes where index_name='IDX_TB';
4.插入樣本資料
insert into idx_status_tb values (1, 'first', 01, 01, 01);
5.手工將索引置為無效
alter index idx_tb unusable;
6.再次插入資料到表中
insert into idx_status_tb values (2, 'sec', 01, 02, 01);
提示:ORA-01502錯誤(ORA-01502: 索引 'FIONA.IDX_TB' 或這類索引的分區處於不可用狀態)

解決方案:1)重建索引:alter index idx_tb rebuild;

再次插入資料到表中,資料正常插入

再次將索引改為無效狀態,通過修改參數的方式來更改問題

通過設定alter session set skip_unusable_indexes=true;

修改之後再次插入資料到表中發現仍然無法插入;因此索引失效的解決辦法目前我所知道的只能是重建索引;

索引失效的另一種情況
1.將表遷移到其他資料表空間
alter table idx_status_tb move tablespace TESTTB;
2.查看索引狀態
SQL> select index_name,index_type,tablespace_name,table_type,status from user_indexes where index_name ='IDX_TB';
 
INDEX_NAME                     INDEX_TYPE                  TABLESPACE_NAME                TABLE_TYPE  STATUS
------------------------------ --------------------------- ------------------------------ ----------- --------
IDX_TB                         NORMAL                      MYTBS                          TABLE       UNUSABLE
3.重建索引
alter index idx_tb rebuild;
4.查看索引狀態,此時索引已經生效,但索引所在資料表空間仍未為之前的MYTBS並沒有跟隨表的遷移而移動
select index_name,index_type,tablespace_name,table_type,status from user_indexes where index_name ='IDX_TB';
 
INDEX_NAME                     INDEX_TYPE                  TABLESPACE_NAME                TABLE_TYPE  STATUS
------------------------------ --------------------------- ------------------------------ ----------- --------
IDX_TB                         NORMAL                      MYTBS                          TABLE       VALID
5.如果要將索引也遷移到新的資料表空間需要怎麼做呢
alter index idx_tb rebuild tablespace TESTTBS;
6.再次查看索引狀態;此時索引也存在於TESTTBS資料表空間中
select index_name,index_type,tablespace_name,table_type,status from user_indexes where index_name ='IDX_TB';
 
INDEX_NAME                     INDEX_TYPE                  TABLESPACE_NAME                TABLE_TYPE  STATUS
------------------------------ --------------------------- ------------------------------ ----------- --------
IDX_TB                         NORMAL                      TESTTBS                        TABLE       VALID

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.