日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

有关域索引错误产生的原因及解决办法

發布時間:2023/12/1 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 有关域索引错误产生的原因及解决办法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

1說明

數據庫錯誤ORA-29861:域索引標記為LOADING/FAILED/UNUSABLE,其錯誤原因及解決辦法,根據ORACLE官方文檔的說法如下:

//?*Cause:?An?attempt?has?been?made?to?access?a?domain?index?that?is
//?????????being?built?or?is?marked?failed?by?an?unsuccessful?DDL
//?????????or?is?marked?unusable?by?a?DDL?operation.

//?*Action:?Wait?if?the?specified?index?is?marked?LOADING
//??????????Drop?the?specified?index?if?it?is?marked?FAILED
//??????????Drop?or?rebuild?the?specified?index?if?it?is?marked?UNUSABLE

由上述可知,當空間索引被DDL標記為FAILED或UNUSABLE時,訪問空間索引會報該錯誤。當出現此類錯誤時,若標記為LOADING,則需等待DDL完成;若標記為FAILED,則需刪除索引;若標記為USUSABLE,則需重建或刪除。盡管,ORACLE給出了解決辦法,但顯然不適用于我們的使用場景。我們不可能在每一次出現此類錯誤時,都刪除索引重建或者使用REBUILD命令。我們的目標是避免此類錯誤的產生,而不是在此類錯誤發生后采取某些解決手段。

既然是由DDL引起,自然首先應關心哪些DDL會引起此類錯誤呢?這里分兩類情況,分全局索引和分區索引。

2全局索引

????當使用全局域索引時,以下的DDL命令會造成上述域索引錯誤:

  • Exchange partition(我們的應用中目前沒有使用這一技術)
  • Drop partiion ,當drop的分區中存在數據記錄時,標記UNUSABLE
  • Truncate partition(我們的應用中目前沒有使用這一技術)
  • Split partition ,當分裂后的兩個分區中均存在數據時,標記UNUSABLE
  • Create index ,當由于某些原因(例如弧),創建失敗時,標記FAILED

在我們的應用中,存在drop partition、split partition、create index命令。其中create index在數據庫初始化的時候進行,此時圖層為空圖層,所以不會出現將域索引標記為FAILED的情況;而drop partition會在刪除某個縣的數據時用到,此時該分區內可能有數據,當存在數據時,會導致域索引被標記為USUABLE;split partition會在應用中用到,但不會出現分裂后的兩個分區均存在數據的情況,因此在我們的應用中不會因為split partition導致域索引被標記為UNUSABLE或FAILED。因此,得出一個結論,在使用drop partition、技術刪除某個縣的數據時,若使用全局索引,極有可能出現域索引的問題。

可以通過如下命令查看某個全局索引是否被標記為UNUSABLE或FAILED。

select INDEX_NAME,INDEX_TYPE,STATUS,DOMIDX_STATUS,DOMIDX_OPSTATUS from user_indexes where table_name=TABLENAME and index_type='DOMAIN';

若STATUS值為UNUSABLE或FAILED,或者DOMIDX_OPSTATUS值為FAILED,則該索引需要被刪除或被重建。重建的命令如下:

Alter index index_name rebuild;

3分區索引

????當使用分區索引時,以下DDL命令會造成上述域索引錯誤:

  • ????Split partition ,當分裂后的兩個分區中均存在數據時,標記UNUSABLE
  • Create index ,當由于某些原因(例如弧),創建失敗時,標記FAILED

其中create index在數據庫初始化的時候進行,此時圖層為空圖層,所以不會出現將域索引標記為FAILED的情況;split partition會在應用中用到,但不會出現分裂后的兩個分區均存在數據的情況,因此在我們的應用中不會因為split partition導致域索引被標記為UNUSABLE或FAILED。綜上所述,對于分區索引,我們的應用應該不會導致域索引錯誤。當的確在分區索引時出現了域索引錯誤,極有可能將多個縣的數據入在了一個分區中。而至于為什么出現將多個縣的數據入在了一個分區中,需要認真分析原因。

可以通過如下命令查看某個全局索引是否被標記為UNUSABLE或FAILED。

Select INDEX_NAME,PARTITION_NAME,STATUS,DOMIDX_OPSTATUS from user_ind_partitions where index_name=INDEXNAME

若STATUS值為UNUSABLE或FAILED,或者DOMIDX_OPSTATUS值為FAILED,則該索引需要被刪除或被重建。重建的命令如下:

Alter index INDEXNAME rebuild partition partition_name;

轉載于:https://www.cnblogs.com/6yuhang/p/8250488.html

總結

以上是生活随笔為你收集整理的有关域索引错误产生的原因及解决办法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。