본문 바로가기
정보관리(데이터베이스, DB)/오라클

ORA-28547 해결방법

by 3604 2025. 11. 10.
728x90
 
 
  •  

ORA-28547 오류 해결: "connection to server failed, probable Oracle Net admin error"

ORA-28547 오류는 Oracle Net 관리 설정 문제로, 특히 리스너 설정, 인증 충돌, 문자셋 불일치가 주요 원인입니다. VMware VDI 환경에서는 IP 변경, 방화벽, 드라이버 충돌로 자주 발생합니다.

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

1-A. 리스너에 XE 서비스 등록 여부 확인

cmd
Copy
:: 리스너에 등록된 서비스 확인 (XE가 반드시 포함되어야 함)
lsnrctl services | findstr "XE"

:: 만약 XE가 없다면 → 동적 등록 실패 → 정적 등록 필요
정상 결과:
Copy
Service "XE" has 1 instance(s).
  Instance "XE", status READY, has 1 handler(s) for this service...

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

cmd
Copy
:: Oracle 서비스 상태 확인
net start | findstr "OracleServiceXE"

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

:: 리스너 시작
lsnrctl start

2. VDI 환경에서의 주요 원인과 해결

원인 1: listener.ora 설정 오류 (가장 흔함)

VDI의 IP가 변경되거나, HOST 설정이 잘못되면 리스너가 XE를 인식하지 못합니다.
파일 경로: 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

원인 2: sqlnet.ora 인증 충돌

DRCP(Database Resident Connection Pooling) 또는 OS 인증 설정이 충돌합니다.
파일 경로: C:\app\<사용자>\product\21c\network\admin\sqlnet.ora
수정:
ini
 
# DRCP 사용 시 Windows에서는 NTS 사용 불가 → NONE으로 변경
SQLNET.AUTHENTICATION_SERVICES = (NONE)

# 또는 DRCP 비활성화 (VDI 환경 권장)
변경 후:
cmd
 
net stop OracleServiceXE
net start OracleServiceXE
lsnrctl stop
lsnrctl start

원인 3: tnsnames.ora에 (HS=) 사양 포함

Heterogeneous Services 설정이 잘못 포함되었을 수 있습니다.
파일 경로: C:\app\<사용자>\product\21c\network\admin\tnsnames.ora
잘못된 예:
ini
 
XE =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = XE)
      (HS=OK)  <-- 이 부분 제거!
    )
  )
올바른 예:
ini
 
XE =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = XE)
    )
  )

원인 4: 문자셋(Character Set) 불일치

Oracle 클라이언트가 데이터베이스 문자셋을 인식하지 못합니다.
데이터베이스 문자셋 확인:
cmd
Copy
sqlplus / as sysdba

SQL> SELECT value FROM v$nls_parameters WHERE parameter = 'NLS_CHARACTERSET';
정상 결과: AL32UTF8
해결 방법:
  1. 환경 변수 설정:
cmd
Copy
:: Windows 환경 변수 추가 (관리자 권한)
setx ORA_NLS10 "C:\app\<사용자>\product\21c\nls\data" /M
  1. DBeaver JDBC URL에 문자셋 파라미터 추가:
jdbc:oracle:thin:@localhost:1521:XE?oracle.jdbc.defaultNChar=true&oracle.jdbc.convertNcharLiterals=true

원인 5: JDBC 드라이버 버전 불일치 (DBeaver/SQL Developer)

검색 결과에 따르면 JDBC 드라이버 충돌이 주요 원인입니다.
해결 방법:
  1. 최신 Oracle JDBC 드라이버 다운로드:
  2. DBeaver 드라이버 교체:
    • DBeaver → DatabaseDriver ManagerOracle
    • Libraries 탭에서 기존 드라이버 모두 삭제
    • 새로운 ojdbc8.jar 추가
    • DBeaver 재시작

3. 완전한 재설정 (최후의 수단)

위 방법이 모두 실패하면 local_listener 파라미터 제거가 효과적입니다:
cmd
 
:: SQL*Plus로 접속 (비밀번호 인증)
sqlplus sys/YourPassword@XE as sysdba

SQL> ALTER SYSTEM SET LOCAL_LISTENER='' SCOPE=BOTH;

SQL> ALTER SYSTEM REGISTER;

SQL> EXIT;

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

4. VDI 환경 특수 대응

Non-persistent VDI에서의 재발 방지

cmd
Copy
:: 시작 스크립트 생성 (C:\OracleXE_Start.bat)
@echo off
net start OracleServiceXE
timeout /t 10
lsnrctl start
echo Oracle XE 서비스 시작 완료
작업 스케줄러 → 로그인 시 자동 실행 설정

문제 해결 진단표

Table
Copy
증상원인해결
lsnrctl services에 XE 없음 동적 등록 실패 정적 등록 추가 (SID_LIST_LISTENER)
 
sqlnet.ora에 NTS 설정 DRCP/인증 충돌
 
NONE으로 변경
tnsnames.ora에 (HS=) Heterogeneous Services 설정 오류
 
(HS=) 부분 제거
문자셋 오류 ORA_NLS10 미설정
 
환경 변수 설정
JDBC 드라이버 충돌 오래된 드라이버
 
최신 ojdbc8.jar로 교체
VDI IP 변경 리스너 바인딩 실패 HOST=localhost로 설정
 

최종 해결 체크리스트 (VDI 환경)

  • [ ] listener.ora에 정적 등록(SID_LIST_LISTENER) 추가, HOST=localhost
  • [ ] sqlnet.ora에서 SQLNET.AUTHENTICATION_SERVICES = (NONE)
  • [ ] tnsnames.ora에서 (HS=) 사양 제거
  • [ ] ORA_NLS10 환경 변수 설정 (문자셋 문제 시)
  • [ ] JDBC 드라이버 최신 버전으로 업데이트 (DBeaver/SQL Developer)
  • [ ] 방화벽 1521 포트 허용
  • [ ] ALTER SYSTEM SET LOCAL_LISTENER='' SCOPE=BOTH; 실행

결론

VDI 환경에서 ORA-28547 해결의 핵심:
  1. 정적 리스너 등록 (IP 변경 대응)
  2. sqlnet.ora 인증 비활성화 (DRCP/NTS 충돌 방지)
  3. JDBC 드라이버 최신화 (클라이언트 연결 안정화)
특히 VDI는 IP가 자주 변경되므로, HOST = localhost 사용과 SID_LIST_LISTENER 정적 설정이 필수입니다. 이 방법으로 90% 이상 해결됩니다.
728x90