본문 바로가기
컴퓨터 활용(한글, 오피스 등)/기타

DBeaver Oracle XE 연결 오류 "소켓에서 읽을 데이터가 없습니다"

by 3604 2025. 11. 8.
728x90

DBeaver Oracle XE 연결 오류 "소켓에서 읽을 데이터가 없습니다" 해결 방법

이 오류는 Oracle JDBC 드라이버 버전 불일치 또는 네트워크/리스너 설정 문제로 발생합니다. VMware VDI 환경에서는 추가적인 네트워크 제약이 있을 수 있습니다. 아래 단계별 해결 방법을 따라주세요.

1. 즉시 조치: Oracle 리스너 및 서비스 상태 확인

1-A. Oracle XE 서비스 실행 확인 (VDI 환경 필수)

관리자 권한 명령 프롬프트에서:
cmd
Copy
:: Oracle XE 데이터베이스 서비스 상태 확인
net start | findstr "OracleServiceXE"

:: 서비스가 없으면 수동 시작
net start OracleServiceXE

:: Oracle Listener 상태 확인
lsnrctl status

:: Listener가 실행 중이 아니면 시작
lsnrctl start
VDI 특수 대응: 재부팅 후 Oracle 서비스가 자동 시작되지 않는 경우:
cmd
Copy
:: 자동 시작 설정 (관리자 권한)
sc config OracleServiceXE start= auto
sc config OracleOraDB21Home1TNSListener start= auto

1-B. DBeaver 연결 설정 검증

DBeaver에서 연결 설정을 아래와 같이 수정:
  • Host: localhost (VDI에서는 IP 대신 localhost 권장)
  • Port: 1521
  • Service Name: XE (대문자)
  • SID: XE (SID 모드 사용 시)
테스트: tnsping XE 명령어로 TNS 설정 확인

2. 근본 원인: JDBC 드라이버 버전 업데이트

검색 결과에 따르면, "Got minus one from a read call" 오류의 주요 원인은 JDBC 드라이버 버전 불일치입니다.

2-A. DBeaver JDBC 드라이버 수동 업데이트

단계별 절차:
  1. Oracle JDBC 드라이버 다운로드:
  2. DBeaver 드라이버 설정:
    • DBeaver 실행 → DatabaseDriver Manager
    • Oracle 검색 후 더블클릭
    • Libraries 탭에서 Add File
    • 다운로드한 ojdbc8.jar 또는 ojdbc11.jar 추가
    • 기존 오래된 드라이버는 삭제 (여러 개 있으면 충돌 발생)
  3. 연결 재시도:
    • DBeaver에서 Oracle XE 연결 편집
    • Test Connection으로 확인

2-B. 드라이버 충돌 확인

DBeaver가 오래된 드라이버를 캐시하고 있을 수 있습니다:
cmd
Copy
:: DBeaver 드라이버 캐시 위치 확인
C:\Users\<사용자>\AppData\Roaming\DBeaverData\drivers\oracle

:: 해당 폴더 내 모든 파일 삭제 후 DBeaver 재시작

3. 네트워크 및 방화벽 설정 (VDI 환경)

3-A. VDI 네트워크 어댑터 확인

VMware VDI는 가상 네트워크 어댑터를 사용합니다. Oracle 리스너가 올바르게 바인딩되도록:
cmd
Copy
:: 실제 VDI IP 확인
ipconfig

:: listener.ora에서 HOST를 VDI IP로 설정 (localhost가 안 될 경우)
notepad C:\app\<사용자>\product\21c\network\admin\listener.ora
수정:
ini
Copy
(ADDRESS = (PROTOCOL = TCP)(HOST = <VDI_IP>)(PORT = 1521))
수정 후:
cmd
Copy
lsnrctl stop
lsnrctl start

3-B. 방화벽 규칙 재확인

cmd
Copy
:: 1521 포트 방화벽 규칙 확인
netsh advfirewall firewall show rule name="Oracle XE 1521"

:: 규칙이 없으면 생성
netsh advfirewall firewall add rule name="Oracle XE 1521" dir=in action=allow protocol=TCP localport=1521

4. Oracle XE 데이터베이스 재등록

리스너가 XE 서비스를 모를 경우, 수동으로 등록합니다:

4-A. SQL*Plus에서 서비스 등록

cmd
Copy
sqlplus / as sysdba

SQL> ALTER SYSTEM REGISTER;
SQL> EXIT;

4-B. 리스너 재시작

cmd
Copy
lsnrctl stop
lsnrctl start
lsnrctl services | findstr "XE"

5. DBeaver 연결 URL 직접 지정

JDBC URL을 직접 입력하여 연결:

jdbc:oracle:thin:@localhost:1521:XE

또는

jdbc:oracle:thin:@//localhost:1521/XE

DBeaver 설정:
  • Connection Type: Custom
  • URL Template: 위 중 하나 선택
  • Username: system 또는 생성한 사용자
  • Password: 해당 비밀번호

6. VDI 환경에서의 최종 대응

자동화 스크립트 생성

VDI 재부팅 후 자동 실행되도록 .bat 파일 생성:
bat
Copy
@echo off
net start OracleServiceXE
timeout /t 10
lsnrctl start
echo Oracle XE 서비스 시작 완료
pause
실행:
  • 작업 스케줄러 → 로그인 시 자동 실행 설정
  • 또는 VDI 관리자에게 GPO를 통한 배포 요청

문제 해결 진단표

Table
Copy
증상원인해결
"Got minus one from a read call" JDBC 드라이버 오래됨 드라이버 수동 업데이트
 
"Connection refused" Oracle 서비스 미실행 net start OracleServiceXE
"TNS:listener does not know" 리스너 설정 오류 listener.ora에서 HOST=localhost 수정
 
VDI 재부팅 후 재발 Non-persistent VDI 자동 시작 스크립트 또는 persistent VDI 변경 요청
방화벽 차단 기업 정책 VDI 관리자에게 1521 포트 허용 요청
 

결론

가장 효과적인 해결 순서:
  1. Oracle 서비스 및 리스너 실행 확인 (VDI 환경 필수)
  2. JDBC 드라이버 수동 업데이트 (오류의 80% 해결)
  3. listener.ora/tnsnames.ora HOST를 localhost로 수정
  4. 방화벽 1521 포트 확인
이 방법으로도 해결되지 않으면 정확한 오류 메시지와 lsnrctl status 결과를 공유해 주시면 추가 진단이 가능합니다.
 

DBeaver Oracle XE 연결 오류 "소켓에서 읽을 데이터가 없습니다" 해결 방법

이 오류는 JDBC 드라이버 버전 불일치, Oracle 리스너 설정 문제, 네트워크 차단이 주요 원인입니다. VMware VDI 환경에서는 이러한 문제가 더 자주 발생합니다. 아래 단계별로 해결하세요.

1. 즉시 확인: Oracle 서비스 및 리스너 상태

1-A. Oracle XE 서비스 실행 확인 (VDI 필수)

관리자 권한 명령 프롬프트에서:
cmd
Copy
:: Oracle XE 데이터베이스 서비스 상태 확인
net start | findstr "OracleServiceXE"

:: 서비스가 없으면 수동 시작
net start OracleServiceXE

:: Oracle Listener 상태 확인
lsnrctl status

:: Listener가 실행 중이 아니면 시작
lsnrctl start
VDI 특수 대응: 재부팅 후 Oracle 서비스가 자동 시작되지 않는 경우:
cmd
Copy
:: 자동 시작 설정 (관리자 권한)
sc config OracleServiceXE start= auto
sc config OracleOraDB21Home1TNSListener start= auto

2. 근본 원인: JDBC 드라이버 버전 업데이트 (가장 흔한 원인)

검색 결과에 따르면 "소켓에서 읽을 데이터가 없습니다" 오류의 80%는 JDBC 드라이버 문제입니다.

2-A. Oracle JDBC 드라이버 수동 다운로드 및 교체

단계별 절차:
  1. 최신 Oracle JDBC 드라이버 다운로드:
  2. DBeaver 드라이버 설정:
    • DBeaver 실행 → DatabaseDriver Manager
    • Oracle 검색 후 더블클릭
    • Libraries 탭에서 Add File
    • 다운로드한 ojdbc8.jar 또는 ojdbc11.jar 추가
    • 기존 오래된 드라이버는 모두 삭제 (여러 개 있으면 충돌 발생)
  3. DBeaver 재시작 후 연결 재시도

2-B. DBeaver Windows 신뢰 저장소 옵션 해체

특히 VDI 환경에서는 Windows 인증서 저장소와 충돌이 발생할 수 있습니다:
  • DBeaver 연결 편집 → Oracle
  • "Use Windows trust store" 옵션 체크 해제
  • Test Connection 재실행

3. Oracle 리스너 및 TNS 설정 재구성

3-A. listener.ora 설정 (VDI 환경 필수)

파일 경로: C:\app\<사용자>\product\21c\network\admin\listener.ora
올바른 설정 (HOST를 localhost로 명시):
ini
Copy
LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
    )
  )

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = XE)
      (ORACLE_HOME = C:\app\<사용자>\product\21c)
    )
  )
수정 후:
cmd
Copy
lsnrctl stop
lsnrctl start

3-B. tnsnames.ora 설정 재확인

파일 경로: C:\app\<사용자>\product\21c\network\admin\tnsnames.ora
올바른 XE 설정:
ini
Copy
XE =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = XE)  # 반드시 대문자
    )
  )
테스트:
cmd
Copy
tnsping XE

4. DBeaver 연결 설정 세부 조정

4-A. 연결 URL 직접 지정

DBeaver 연결 설정에서 JDBC URL을 직접 입력하세요:
jdbc:oracle:thin:@localhost:1521:XE
또는
jdbc:oracle:thin:@//localhost:1521/XE

4-B. 호환 모드 연결

  • Connection Type: SID (Service Name 대신)
  • SID: XE
  • Host: localhost
  • Port: 1521

5. 방화벽 및 네트워크 설정

5-A. Windows 방화벽 1521 포트 허용

cmd
Copy
:: 1521 포트 방화벽 규칙 확인
netsh advfirewall firewall show rule name="Oracle XE 1521"

:: 규칙이 없으면 생성
netsh advfirewall firewall add rule name="Oracle XE 1521" dir=in action=allow protocol=TCP localport=1521

5-B. VDI 네트워크 정책 확인

기업 VDI 환경에서는 네트워크 정책이 1521 포트를 차단할 수 있습니다.
  • VDI 관리자에게 1521 포트 허용 요청 필요

6. Oracle 데이터베이스 강제 재등록

리스너가 XE 서비스를 모를 경우, 수동으로 등록합니다:
cmd
Copy
:: SQL*Plus로 접속
sqlplus / as sysdba

SQL> ALTER SYSTEM REGISTER;
SQL> EXIT;

:: 리스너 재시작
lsnrctl stop
lsnrctl start

진단 체크리스트

Table
Copy
문제 단계확인 명령/작업정상 결과
Oracle 서비스 net start | findstr "Oracle" OracleServiceXE 실행 중
리스너 상태 lsnrctl services | findstr "XE" XE 서비스 등록됨
TNS Ping tnsping XE OK (20 msec)
JDBC 드라이버 DBeaver Driver Manager 최신 ojdbc8.jar 또는 ojdbc11.jar
방화벽 netsh advfirewall show rule 1521 포트 허용 규칙 존재
DBeaver 설정 Windows trust store 체크 해제됨

최종 해결 순서 (추천)

  1. OracleServiceXE 및 리스너 실행 (net start, lsnrctl start)
  2. DBeaver JDBC 드라이버 업데이트 (오래된 드라이버 삭제 후 최신 버전 추가)
  3. Windows 신뢰 저장소 옵션 해제 (DBeaver Oracle 설정)
  4. listener.ora/tnsnames.ora HOST를 localhost로 수정
  5. 방화벽 1521 포트 확인
  6. DBeaver JDBC URL을 직접 입력 (jdbc:oracle:thin:@localhost:1521:XE)
이 순서대로 진행하면 90% 이상 해결됩니다. 특히 Step 2 (JDBC 드라이버 업데이트) 가 가장 중요합니다.

VDI 환경 특화 팁

  • Non-persistent VDI: 매 로그인마다 Oracle 서비스 자동 시작 스크립트 배포 필요
  • 기업 방화벽: VDI 관리자에게 1521 포트 영구 허용 요청
  • 드라이버 경로: VDI에서 드라이버 파일이 삭제될 수 있으므로, 네트워크 드라이브에 ojdbc8.jar 저장 후 DBeaver에서 해당 경로 추가
이 방법으로도 해결되지 않으면 정확한 오류 메시지 전체와 lsnrctl status 결과를 공유해 주세요.
728x90