728x90
JDBC-90700 오류는 Tibero DB와의 JDBC 연결이 원활하지 않아 발생하는 통신 오류입니다. 이 오류는 주로 네트워크 불안정, 서버 설정 오류, 또는 드라이버 불일치 시 나타납니다.
1. 주요 원인
1.1 네트워크 계층 문제
-
서버 및 포트 접근 불가: 방화벽, 보안 그룹, 네트워크 ACL 등으로 인한 접속 차단
-
DNS/IP 설정 오류: JDBC URL에 잘못된 IP 주소나 호스트명 사용
-
연결 타임아웃: 네트워크 지연으로 인한 타임아웃 (기본값 초과)
1.2 Tibero DB 서버 문제
-
bash
# 프로세스 확인 명령어 ps -ef | grep tbsvr - DB 서버 미가동: Tibero 인스턴스가 실행되지 않음
-
최대 연결 수 초과: MAX_SESSION 파라미터 값을 초과한 연결 시도
-
리스너 포트 불일치: 설정된 포트(기본 8629)와 다른 포트 사용 시
1.3 JDBC 드라이버 계층 문제
-
드라이버 버전 불일치: Tibero 서버와 JDBC 드라이버의 메이저 버전이 다른 경우
-
Tibero 6.x → tibero6-jdbc.jar
-
Tibero 7.x → tibero7-jdbc.jar
-
-
JDBC URL 형식 오류: 표준 형식이 아닌 잘못된 URL 사용
-
올바른 형식: jdbc:tibero:thin:@{HOST}:{PORT}:{SID}
-
잘못된 예: jdbc:tibero:@//host:port/sid (Oracle 형식 혼용)
-
1.4 인증 및 권한 문제
-
계정 잠금: 비밀번호 실패 횟수 초과로 인한 계정 잠김sql
-- 계정 상태 확인 SELECT USERNAME, ACCOUNT_STATUS FROM DBA_USERS WHERE USERNAME = 'YOUR_USER'; -
IP 접근 제한: V$IPACCESS 설정에 의한 클라이언트 IP 차단
2. 해결방법 (단계별 진단)
단계 1: 기본 연결 가능성 확인
1.1 서버 프로세스 확인
bash
# Tibero 서버 프로세스 확인
$ ps -ef | grep tbsvr
tibero 12345 1 0 09:00 ? 00:00:10 tbsvr INSTANCE_NAME
1.2 포트 리스닝 확인
bash
# 포트 8629(기본) 리스닝 여부 확인
$ netstat -an | grep 8629
tcp 0 0 0.0.0.0:8629 0.0.0.0:* LISTEN
1.3 클라이언트에서 telnet 테스트
bash
# DB 서버에 직접 접속 가능 여부 확인
$ telnet {DB_IP} 8629
Trying {DB_IP}...
Connected to {DB_IP}. # 성공 시
단계 2: JDBC 드라이버 테스트 프로그램 실행
Tibero의 표준 JDBC 테스트 프로그램으로 직접 연결 확인:
java
import java.sql.*;
public class TiberoConnectionTest {
public static void main(String[] args) {
Connection conn = null;
try {
// 1. 드라이버 로드
Class.forName("com.tmax.tibero.jdbc.TbDriver");
// 2. 연결 정보 설정 (반드시 실제 값으로 변경)
String url = "jdbc:tibero:thin:@{DB_IP}:8629:{SID}";
String user = "{USERNAME}";
String password = "{PASSWORD}";
// 3. 연결 시도
conn = DriverManager.getConnection(url, user, password);
if (conn != null) {
System.out.println("✓ 연결 성공!");
// 4. 세션 정보 확인
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(
"SELECT SID, USERNAME FROM V$SESSION WHERE USERNAME = '" + user.toUpperCase() + "'");
while (rs.next()) {
System.out.println("Session ID: " + rs.getInt("SID"));
System.out.println("Username: " + rs.getString("USERNAME"));
}
rs.close();
stmt.close();
}
} catch (ClassNotFoundException e) {
System.err.println("✗ JDBC 드라이버를 찾을 수 없습니다: " + e.getMessage());
} catch (SQLException e) {
System.err.println("✗ 연결 실패 (오류 코드: " + e.getErrorCode() + ")");
System.err.println("오류 메시지: " + e.getMessage());
// JDBC-90700 오류가 여기서 잡힘
} finally {
try { if (conn != null) conn.close(); } catch (SQLException e) {}
}
}
}
컴파일 및 실행:
bash
# javac -cp .:tibero6-jdbc.jar TiberoConnectionTest.java
# java -cp .:tibero6-jdbc.jar TiberoConnectionTest
단계 3: JDBC URL 및 드라이버 버전 검증
3.1 URL 형식 확인
java
// 올바른 Tibero 형식
String url = "jdbc:tibero:thin:@192.168.1.100:8629:tibero";
// 잘못된 형식 (오류 발생)
String url = "jdbc:tibero:thin:@//192.168.1.100:8629/tibero"; // Oracle 형식
3.2 드라이버 버전 확인
bash
# jar 파일에서 버전 확인
$ jar tf tibero6-jdbc.jar | grep -i version
# 또는
$ java -cp tibero6-jdbc.jar com.tmax.tibero.jdbc.TbDriver
단계 4: 계정 및 권한 확인
4.1 계정 상태 확인
sql
-- DBA 권한으로 실행
SELECT USERNAME, ACCOUNT_STATUS, LOCK_DATE
FROM DBA_USERS
WHERE USERNAME = 'YOUR_USER';
-- 결과: ACCOUNT_STATUS가 'OPEN'이어야 정상
4.2 IP 접근 제한 확인
sql
-- 현재 IP 접근 제어 설정 확인
SELECT * FROM V$IPACCESS;
-- 특정 IP 허용 필요 시
-- (TB_CONFIG.PAR 파일에서 IP_ACCESS_CONTROL 설정 필요)
단계 5: WAS(JEUS6) 환경에서의 추가 대응
귀하의 JEUS6 환경에서는 다음도 함께 확인하세요:
5.1 JDBC 드라이버 배포 위치
JEUS_HOME/lib/system 디렉토리에 tibero6-jdbc.jar 배치
또는 애플리케이션의 WEB-INF/lib 디렉토리에 배치
5.2 데이터소스 설정 확인 (jeus.xml)
xml
<datasource>
<name>TiberoDS</name>
<classname>com.tmax.tibero.jdbc.TbDriver</classname>
<url>jdbc:tibero:thin:@{DB_IP}:8629:{SID}</url>
<username>{USERNAME}</username>
<password>{ENCRYPTED_PASSWORD}</password>
<connection-pool>
<min-pool-size>5</min-pool-size>
<max-pool-size>50</max-pool-size>
<connection-timeout>30000</connection-timeout> <!-- 타임아웃 설정 확인 -->
</connection-pool>
</datasource>
5.3 JEUS6 로그 상세 확인
bash
# JEUS 로그에서 JDBC 예외 추적
grep -A 10 -B 10 "JDBC-90700" $JEUS_HOME/domains/domain1/servers/server1/logs/jeus.log
3. 즉각 대응 순서 (정리)
Table
Copy
단계명령/작업확인 목적
| 1 | ps -ef | grep tbsvr | DB 서버 실행 여부 |
| 2 | telnet DB_IP 8629 | 네트워크 연결 가능성 |
| 3 | JDBC 테스트 프로그램 실행 | 드라이버/인증 문제 구분 |
| 4 | SELECT * FROM V$IPACCESS | IP 차단 여부 확인 |
| 5 | 드라이버 버전 일치 확인 | 서버-클라이언트 버전 불일치 해결 |
| 6 | JEUS 데이터소스 타임아웃 증가 | connection-timeout 60000으로 조정 |
긴급 우회 방안 (운영 환경에서 즉시 필요 시)
-
JDBC URL에 타임아웃 옵션 추가:java
jdbc:tibero:thin:@{DB_IP}:8629:{SID}?connectTimeout=60000&socketTimeout=60000 -
커넥션 풀 즉시 해제:xml
<connection-pool> <min-pool-size>0</min-pool-size> <!-- 유휴 연결 최소화 --> <connection-timeout>10000</connection-timeout> </connection-pool> -
Tibero 서버 세션 제한 증가 (TB_CONFIG.PAR 파일):MAX_SESSION=500 # 기본값 100에서 증가
이처럼 JDBC-90700은 네트워크/서버/드라이버 계층의 연결 불안정을 나타내므로, 단계별로 추적하여 근본 원인을 파악하는 것이 중요합니다. JEUS6 환경에서는 특히 드라이버 배포 위치와 데이터소스 설정을 우선 검증하세요.
728x90
'프로그램 개발(분석, 설계, 코딩, 배포) > 100. 기타' 카테고리의 다른 글
| ISMS-P 재해복구 (0) | 2025.12.21 |
|---|---|
| 부고 소식 전하기 (0) | 2025.12.17 |
| 무료 오픈소스 Oracle Database 26ai 대안 (0) | 2025.11.25 |
| 2 CPU 코어 설정 (0) | 2025.11.25 |
| AI 도메인 구조도 (0) | 2025.11.23 |