Trouble Shooting/업무

[Trouble Shooting/업무] jdk 오라클버전에 따른 ojdbc 버전의 중요성 - Protocol violation

drCode 2025. 6. 5. 16:07
728x90
반응형

Protocol Violation

 

얼마 전, 내가 관리하는 서버에서 

 

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
반응형