問題描述
香港客戶有一套日本開發的全球系統,它採用的數據庫是Oracle Database Standard Edition 10.2.0.5。系統側拋出錯誤參考如下:
Ora-08102:index key not found, obj# 145664, file 12, block 3326692(2)
問題分析
- 檢查問題對象信息
col object_name format a15;
col owner format a10;
select o.owner, o.object_name, o.object_id, o.object_type from dba_objects o where o.object_id = 145664;
日誌輸出:
OWNER OBJECT_NAME OBJECT_ID OBJECT_TYPE
---------- ------------------------- ---------- -------------------
XXXXXXX IDX_CR_PK_DIM_CARTON 145664 INDEX
- 索引DDL語句檢查
set long 2000
select dbms_metadata.get_ddl('INDEX','IDX_CR_PK_DIM_CARTON','XXXXXX') from dual;
日誌輸出:
DBMS_METADATA.GET_DDL('INDEX','IDX_CR_PK_DIM_CARTON','XXXXXX')
--------------------------------------------------------------------------------
CREATE INDEX "SILOS_LIVE"."IDX_CR_PK_DIM_CARTON" ON "XXXXXX"."PACKING_CART
ON_DIMENSION" (NVL("CARTON_NO",' ')) PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPU
TE STATISTICS STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147
483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
TABLESPACE "USERS"
通過MOS發現,NVL函數索引經常會出現類似找不到鍵值的問題。
解決方案
1. 重建索引
alter index IDX_CR_PK_DIM_CARTON rebuild;
2. 檢查索引必要性
如果沒有必要運用此NVL函數索引,那麼就將它刪除吧!