본문 바로가기
Oracle

[ORACLE] ORA-03113 : Merge 사용 시 에러 발생

by 상후 2022. 4. 20.
728x90
반응형

 

ORA-03113 : 통신 채널에 EOF가 있습니다.

ORA-03113 : end-of-file on communication channel

발생 원인
일반적으론  DB서버와의 통신이 끊겼을 때 발생한다고한다.
참고 : https://docs.oracle.com/cd/E11882_01/server.112/e17766/e2100.htm#sthref1271  

나의 경우엔 위 내용과는 무관했지만 해당 로그가 남았다.

원인은 CLOB + Merge문에 있었다. 테이블끼리 관계로 Merge하지 않고, 파라미터로 값을 넣어 Merge문의 Insert/Update 쿼리를 작성하였는데,  CLOB에 저장될 때 파라미터의 데이터 길이가 너무 길어서 발생하였다.

일반적인 INSERT/UPDATE문에선 저장 시 문제가 없었는데 Merge문에서만 발생했다.

 

해결 방법
환경마다 다르지만 저장을 허용하는 최대 Byte(4000)가 있다. (로컬, 개발/운영 달랐음)

1. TO_CLOB 으로 감싸 최대 허용 Byte를 늘려준다. ( 상황에 따라 유효성을 추가하여 방어할 수도 있다. )
2. 테이블 데이터 복사가 아닌 꼭 파라미터로 저장해야하는지 확인한다. ( 테이블 데이터 복사로 회피 가능 )
3. Merge문 해제
4. Oracle 버전 업그레이드

1~3번 모두 상황에 맞게 적절히 사용하여 해결할 수 있었다.

 

 

출처 : https://docs.oracle.com/cd/E11882_01/server.112/e17766/e2100.htm#sthref1271

출처2 : https://groups.google.com/g/mybatis-user/c/b43d3VNGY24?pli=1 

 

 

 

 

728x90
반응형

댓글