Trouble Shooting/업무
[Trouble Shooting/업무] jdk 오라클버전에 따른 ojdbc 버전의 중요성 - Protocol violation
drCode
2025. 6. 5. 16:07
728x90
반응형
얼마 전, 내가 관리하는 서버에서
Caused by: java.sql.SQLException: Protocol violation: [ 0, ]
at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:669)
at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:249)
at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:566)
at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:215)
at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:58)
at oracle.jdbc.driver.T4CPreparedStatement.executeForDescribe(T4CPreparedStatement.java:776)
at oracle.jdbc.driver.OracleStatement.executeMaybeDescribe(OracleStatement.java:897)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1034)
at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3820)
at oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:3867)
at oracle.jdbc.driver.OraclePreparedStatementWrapper.executeQuery(OraclePreparedStatementWrapper.java:1502)
이라는 에러가 떴었다.
처음에는 커넥션 풀 문제인 줄 알았으나,
JDK 버전과 오라클 버전에 맞는 ojdbc 버전을 사용해야 한다고 한다.
예를 들어, jdk 버전이 8이고. 오라클 버전이 12.2 버전이면 ojdbc 버전은 ojdbc8.jar 를 사용해야 한다고 한다.
오라클 버전 확인 쿼리
SELECT *
FROM v$version;
알고 보니, 원래 jdk 버전이 7이었는데, 8버전으로 마이그레이션하면서
ojdbc버전을 7이 아닌 8로 같이 바꿔줘야 한다고 했다.
다음은 jdk - oracle - ojdbc 별 호환성 비교표이다.
🧩 JDK / Oracle DB / ojdbc 호환표
JDK 버전 | Oracle DB 버전 | 권장 ojdbc 버전 |
JDK 6 | 11g, 12c | ojdbc6.jar |
JDK 7 | 11g, 12c | ojdbc7.jar |
JDK 8 | 11g, 12c, 18c, 19c | ojdbc8.jar |
JDK 9 | 12c, 18c, 19c | ojdbc8.jar or ojdbc10.jar |
JDK 11 | 12c, 18c, 19c, 21c | ojdbc10.jar or ojdbc11.jar |
JDK 17 | 19c, 21c | ojdbc11.jar or ojdbc12.jar |
JDK 21 | 21c 이상 | ojdbc12.jar |
📌 참고사항
- Oracle JDBC 드라이버는 하위 호환성이 있지만, 가능한 한 JDK와 동일한 버전용 드라이버 사용을 권장한다.
✅ 예시
- JDK 8 + Oracle 12c → ojdbc8.jar
- JDK 11 + Oracle 19c → ojdbc11.jar
- JDK 17 + Oracle 21c → ojdbc12.jar
728x90
반응형