티스토리 뷰


local-space-*** (SDB) 는 

local-space-*** (PDB) 와 Oracle Data Guard로 연결된 Standby DB이며,


이곳에서는 다음에서 사용하는 지도의 형상을 제작하는 작업과 

R-TREE를 이용한 점선면간의 조인을 수행합니다.


개발자분께서 근린공원이라는 사각형안에 포함되는 장소들을 추출하는 쿼리를 수행했을 때

SELECT  

 CASE  WHEN (CATEID=369) then '근린공원_369' ELSE '-1' END AS categoryName, objectid, shape, DP_NAME1, dp_angle, sb_angle FROM NDM.POI_SUB_P

 WHERE SDO_FILTER(shape, SDO_GEOMETRY(2003, null, null, SDO_ELEM_INFO_ARRAY(1, 1003, 3), SDO_ORDINATE_ARRAY(200912,448928,201424,449440))) = 'TRUE'

 AND ( l3='Y') AND ((CATEID=369))


다음과 같은 에러를 발생시키는 경우가 있어 이에 대한 원인 확인을 요청 하셨습니다.


ORA-29903: ODCIIndexFetch() 루틴을 수행시 오류가 생겼습니다

ORA-13236: R 트리 처리 중 내부 오류: []

ORA-13236: R 트리 처리 중 내부 오류: [Snapshot too old or Recursive fetch error]

ORA-13234: R 트리 인덱스 테이블 [MDRT table]을(를) 액세스하는 데 실패했습니다

ORA-29400: 데이터 카트리지 오류

ORA-00942: 테이블 또는 뷰가 존재하지 않습니다

29903. 00000 -  "error in executing ODCIIndexFetch() routine"

*Cause:    The execution of ODCIIndexFetch routine caused an error.

*Action:   Examine the error messages produced by the indextype code and

           take appropriate action.


내용에 대한 구체적인 원인을 파악할 수 없고 빠르게 정상화하기 위해 


1. 해당 테이블의 Spatial Index 재생성

2. 해당 테이블 및 인덱스 재생성 


순으로 작업하였으나 동일에러 발생하였으며,

Data Guard 구성시, ORA-29902 와 ORA-29903 발생의 원인을 찾아보던 중, 


The problem arises beacuse the SQL uses cached execution plan is used in the Standby DB.

The only workaround is to flush the shared pool in the Standby DB.


라는 글을 발견. ^^ 아래 커맨드를 Standby DB 에서 실행


SQL>alter system flush shared_pool;


정상적으로 위 쿼리가 수행됨을 확인함.

댓글
댓글쓰기 폼