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

ORA-1228547 오류 해결 방법은?

by 3604 2025. 11. 10.
728x90
 
 

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

참고: 오류 코드가 ORA-1228547이 아니라 ORA-28547입니다. 이 오류는 Oracle Net 관리 설정 문제로, VDI 환경에서 자주 발생합니다. 아래 단계별로 해결하세요.

1. 즉시 조치: 데이터베이스 인스턴스 리스너 등록 확인

1-A. 리스너 서비스 등록 상태 확인

cmd
:: 리스너에 등록된 서비스 목록 확인
lsnrctl services | findstr "XE"

:: 만약 XE가 목록에 없다면, 데이터베이스가 리스너에 자동 등록되지 않은 것입니다.
정상 결과:
Copy
Service "XE" has 1 instance(s).
  Instance "XE", status READY, has 1 handler(s) for this service...
만약 XE가 없다면동적 등록 실패 또는 정적 설정 누락

1-B. SQL*Plus로 데이터베이스 상태 확인

cmd
 
:: 먼저 로컬로 접속 시도 (OS 인증)
sqlplus / as sysdba

SQL> SELECT status FROM v$instance;
SQL> SELECT name FROM v$database;
접속이 안 된다면 → Oracle 서비스 미실행 또는 sqlnet.ora 설정 문제

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

원인 1: OracleServiceXE 미실행 및 리스너 등록 실패

VDI 환경에서는 IP 변경으로 인해 데이터베이스가 리스너에 자동 등록되지 않습니다.
cmd
 
:: Oracle 서비스 시작
net start OracleServiceXE

:: 리스너 시작
lsnrctl start

:: 10초 대기 후 리스너 재시작 (등록 강제)
timeout /t 10
lsnrctl stop
lsnrctl start

:: 등록 상태 재확인
lsnrctl services | findstr "XE"

원인 2: listener.ora 정적 설정 추가

동적 등록이 실패하면 정적 등록을 사용해야 합니다.
파일 경로: C:\app\<사용자>\product\21c\network\admin\listener.ora
수정 후:
ini
Copy
LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))  # VDI에서는 localhost 권장
    )
  )

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

원인 3: sqlnet.ora 설정 충돌

이전에 ORA-12638 해결을 위해 SQLNET.AUTHENTICATION_SERVICES = NONE으로 변경했을 수 있습니다. 이 설정이 DRCP(Database Resident Connection Pooling)와 충돌하여 ORA-28547을 발생시킬 수 있습니다.
파일 경로: C:\app\<사용자>\product\21c\network\admin\sqlnet.ora
검증:
ini
Copy
# DRCP를 사용하지 않는다면, 아래 설정이 있어야 합니다.
SQLNET.AUTHENTICATION_SERVICES = (NONE)

# DRCP를 사용한다면, Windows에서는 NTS를 사용할 수 없으므로 DRCP 비활성화 필요

3. 문자셋(Character Set) 불일치

Oracle 문서에 따르면, 문자셋 불일치도 ORA-28547의 원인입니다.

3-A. 데이터베이스 문자셋 확인

cmd
Copy
sqlplus / as sysdba

SQL> SELECT parameter, value FROM v$nls_parameters WHERE parameter LIKE '%CHARACTERSET';
정상 결과:
Copy
PARAMETER                      VALUE
------------------------------ ------------------------------
NLS_CHARACTERSET               AL32UTF8
NLS_NCHAR_CHARACTERSET         AL16UTF16

3-B. 클라이언트 문자셋 확인 (DBeaver)

DBeaver 연결 설정에서 NLS_LANG 환경 변수를 설정:
  • Connection settingsDriver propertiesAdd
  • Name: oracle.net.ns.SQLNetDef.TCP_CONNTIMEOUT_STR
  • Value: 10000 (밀리초 단위 타임아웃)
또는
cmd
Copy
:: Windows 환경 변수 설정 (관리자 권한)
setx NLS_LANG "AMERICAN_AMERICA.AL32UTF8" /M

4. 연결 타임아웃 설정

4-A. SQLNet 타임아웃 증가

sqlnet.ora에 타임아웃 설정 추가:
ini
Copy
SQLNET.INBOUND_CONNECT_TIMEOUT = 120
SQLNET.SEND_TIMEOUT = 120
SQLNET.RECV_TIMEOUT = 120

5. DBeaver 연결 설정 재구성

5-A. JDBC URL에 타임아웃 파라미터 추가

DBeaver 연결 설정에서 JDBC URL을 아래와 같이 수정:
jdbc:oracle:thin:@localhost:1521:XE?oracle.net.CONNECT_TIMEOUT=10000
또는
jdbc:oracle:thin:@(DESCRIPTION=(CONNECT_TIMEOUT=10)(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=XE)))

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

위 방법이 모두 실패하면 Oracle XE를 재설치하되, VDI 환경에 맞게 설정:
  1. Oracle XE 제거 (데이터 유지 옵션 선택)
  2. sqlnet.ora 백업 및 삭제 (재설치 시 기본값 생성)
  3. 재설치관리자 비밀번호 재설정
  4. 재설치 후 sqlnet.ora에서 SQLNET.AUTHENTICATION_SERVICES = (NONE) 설정
  5. listener.ora에 정적 등록 추가
  6. 서비스 및 리스너 재시작

문제 해결 흐름도

Copy
ORA-28547 발생
    │
    ├─→ lsnrctl services (XE 등록됨?) → NO → OracleServiceXE 실행? → NO → net start
    │                                                              ↓ YES
    │                                                          정적 등록 추가 → listener.ora 수정
    │
    ├─→ YES → sqlnet.ora 확인 → DRCP 사용? → YES → DRCP 비활성화 또는 NONE 설정
    │                     ↓ NO
    │                 NTS 설정? → YES → NONE으로 변경 후 재시작
    │
    ├─→ 문자셋 확인 → AL32UTF8? → NO → NLS_LANG 설정
    │
    └─→ 타임아웃 설정 → 120초로 증가

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

  • [ ] net start OracleServiceXE → 실행 중
  • [ ] lsnrctl status → 리스너 실행 중
  • [ ] lsnrctl services → XE 등록됨
  • [ ] listener.ora에 정적 등록(SID_LIST_LISTENER) 추가
  • [ ] sqlnet.ora에서 SQLNET.AUTHENTICATION_SERVICES = (NONE) 설정
  • [ ] DBeaver JDBC 드라이버 최신 버전(ojdbc8.jar)으로 업데이트
  • [ ] 방화벽 1521 포트 허용
  • [ ] JDBC URL에 타임아웃 파라미터 추가

결론

VDI 환경에서 ORA-28547 해결의 핵심:
  1. 리스너에 XE 정적 등록 (IP 변경 대응)
  2. sqlnet.ora 인증 설정 (NONE으로 변경)
  3. JDBC 드라이버 최신화 (DBeaver 연결 안정화)
특히 VDI는 IP가 자주 변경되므로, HOST = localhost 사용과 정적 리스너 등록이 필수입니다.
728x90