-
[오라클] ORA-08103 객체가 더 이상 존재하지 않습니다 object no longer exists문제해결/Oracle 2023. 1. 19. 22:48반응형
[오라클]
ORA-08103
개체가 더 이상 존재하지 않습니다
객체가 더 이상 존재하지 않습니다
object no longer exists발생 원인
해당 오류의 경우 명확하면서도 이해가 안가는 애매한 케이스이다.
검색만 해봐도 다양한 케이스에서 발생하는 것이 확인되며( 원인 불명, 버그, 인덱스 및 통계정보 문제 등) 해결 방법 또한 제각각이다.
본인의 경우 매일 수행되는 작업이 간헐적으로 해당 작업에서 ORA-08103 이라는 오류와 함께 작업이 중지되었다. 오류가 난 쿼리를 확인해봤지만 당연히 오류가 발생한 쿼리문에서는 문제를 찾지 못했다.(몇 개월에 한번씩 발생하다보니 외면하는게 더 쉬운 방법이었다)
그러던 중 어김없이 또 ORA-08103 오류가 발생했고, 오류 내용을 다시한번 읽어보았다. ORA-08103 객체가 더 이상 존재하지 않습니다
여기서 객체란 무엇일까. 에러가 발생한 작업은 SELECT 후 INSERT 하는 쿼리문이었으므로 SELECT 대상을 객체로 볼 수 있지 않을까? 라는 생각을 하니 의심이 가는 부분이 생겼다. SELECT 쿼리에서는 특정 테이블을 참조하고 있는데, 해당 테이블 또한 매일 작업으로 TRUNCATE가 발생하고 있었다. 작업 수행시간을 보니 공교롭게 두 작업이 동시에 발생하는 날짜에 에러가 발생한 것이다!
정리하자면,
1. (가) 작업에서 테이블A 테이블 B Join하여 SELECT 수행
2. (나) 작업에서 테이블B를 TRUNCATE [(가) 작업은 수행중!]
3. SELECT중인 테이블B에서 데이터 삭제가 발생하여 ORA-08103 발생해결 방법
해결방법은 오류가 발생한 쿼리가 참조하는 테이블들의 데이터가 변경되지 않도록 분리시켜주는 것이다.
생각해보면 내가 백화점에서 쇼핑을 하기위해 물건을 찾고, 찾은 물건들을 담는 와중에 갑자기 장바구니고 진열대고 백화점에 모든 물건이 사라진다면 나도 매우 당황스러울 것이다.(물건 다 어디갔지;;)
아마 오라클도 당황하면서 저렇게 말하지 않았을까?(ORA-08103;;;)
모든 CASE가 내가 겪은 경우와 동일하지 않을 수도 있지만, ORACLE의 에러는 항상 맞는말만 한다는 걸 다시 한번 깨달았다.
혹시 위와 같은 오류로 구글링 중이라면, 오류가 발생한 쿼리문에서 참조하는 테이블의 데이터가 쿼리 수행 도중 삭제나 변경되지 않는지 확인을 해보는 것도 좋은 해결 방법 중 하나가 될 것이다.(다시한번 돌이켜보면 항상 문제는 작업을 만든 나였다)
오라클아 의심해서 미안해~반응형'문제해결 > Oracle' 카테고리의 다른 글
[오라클] ORA-01476 : 제수가 0 입니다 Divisor is equal to zero 원인 및 해결 방법 (0) 2023.01.18