본문 바로가기

Server Oriented/Server

평상시에 없던 SQLException 발생시, 또 다른 JDBC 드라이버가 classpath 에 있는지 확인해 보세요.

ojdbc14.jar 도 버전이 몇 개 있나 봅니다.
일단, 1,546,274 bytes 짜리가 최종 또는 정상 작동하는 버전인듯..
JDBC 드라이버에 오류가 생각보다 많아요.. ㅠ.
--------------------------------------------------------------------------------------

Orange 나 Toad 등 DB Client 도구에서는 잘 돌아가는 쿼리인데,
서버에서 돌리면 엉뚱한 에러들이 발생하는 경우가 있어요. 아래와 같은 에러들이지요.

- 부적합한 Refcursor
- 유형 길이가 최대값보다 큽니다
- 프로토콜 위반
- 데이터가 없습니다

인터넷에서 검색해 보니..
오라클의 경우에는, classpath 상에서 classes12.jarojdbc14.jar 등을 확인해 보라고 하는데..
원인은 JDBC 드라이버들 간의 충돌이 맞기는 하지만,
때에 따라서는 오라클에서 제공하는 JDBC 드라이버가 아니라..
또 다른 3rd-Party 에서 제공된 JDBC 드라이버와 충돌해서 발생할 수도 있다는 사실입니다.

오늘 확인해 보니 Paradox_JDBC30.jar 라는 JDBC 드라이버가 classpath 에 잡혀 있더군요.
그것도, 파일명을 콕 집어서 기술한 것이 아니라, 디렉토리 경로에 잡혀 있었어요..
참, 잡아내기 힘든 케이스였습니다.
확장자 .jar 를 .jar.20111228 로 고치고 서버를 재시작 하니까 제대로 돌아가는군요.

조금은 귀찮더라도.. classpath 에는 디렉토리가 아니라 파일별로 기술해 주어야 할 때도 있습니다.
물론, 시스템 파라미터가 메모리에 올라가는 용량의 한도가 있어서 어쩔 수 없이 디렉토리로 기술해야 할 때도 있긴 하네요..

.Fine.