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
해결 방법:
-
환경 변수 설정:
cmd
Copy
:: Windows 환경 변수 추가 (관리자 권한)
setx ORA_NLS10 "C:\app\<사용자>\product\21c\nls\data" /M
-
DBeaver JDBC URL에 문자셋 파라미터 추가:
원인 5: JDBC 드라이버 버전 불일치 (DBeaver/SQL Developer)
검색 결과에 따르면 JDBC 드라이버 충돌이 주요 원인입니다.
해결 방법:
-
최신 Oracle JDBC 드라이버 다운로드:
-
ojdbc8.jar (Java 8-11) 또는 ojdbc11.jar (Java 11+)
-
DBeaver 드라이버 교체:
-
DBeaver → Database → Driver Manager → Oracle
-
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 해결의 핵심:
-
정적 리스너 등록 (IP 변경 대응)
-
sqlnet.ora 인증 비활성화 (DRCP/NTS 충돌 방지)
-
JDBC 드라이버 최신화 (클라이언트 연결 안정화)
특히 VDI는 IP가 자주 변경되므로, HOST = localhost 사용과 SID_LIST_LISTENER 정적 설정이 필수입니다. 이 방법으로 90% 이상 해결됩니다.
728x90
'정보관리(데이터베이스, DB) > 오라클' 카테고리의 다른 글
| 오라클 DB 모든 테이블의 생성일, 레코드수, 최근 접근내역 등을 확인 (0) | 2025.08.20 |
|---|---|
| 기술 [Tibero/Oracle]DB 테이블 및 상세정보 추출 (0) | 2025.08.20 |
| 오라클 파티션 테이블 조회 방법 (0) | 2025.02.07 |
| [Oracle] TRUNCATE, DELETE, DROP 차이, 테이블 데이터 삭제 (1) | 2024.09.04 |
| 서브쿼리 Push에 대해 알아보자 (0) | 2024.09.03 |