2026년 09월 12일 | DBMS Error 가이드
이 글에서 다루는 내용
ORA-12525 에러의 원인 분석, 해결 SQL, 예방 방법을 실무 관점에서 정리합니다.
ORA-12525 TNS: listener has not received client request in time allowed 는?
ORA-12525 에러는 Oracle TNS 리스너(Listener)가 클라이언트로부터 접속 요청을 받은 후, 설정된 제한 시간(INBOUND_CONNECT_TIMEOUT) 내에 완전한 접속 요청 패킷을 수신하지 못했을 때 발생하는 오류입니다. 리스너는 클라이언트가 연결을 시작하면 특정 시간 안에 인증 및 프로토콜 협상 데이터를 받아야 하는데, 이 시간을 초과하면 해당 연결을 강제로 끊고 에러를 반환합니다. 이 에러는 단순한 설정 문제일 수도 있지만, 네트워크 불안정, DoS(Denial of Service) 공격, 또는 애플리케이션 측 연결 구성 오류로 인해 발생하는 경우도 많아 정확한 원인 파악이 중요합니다.
주요 발생 원인
1. INBOUND_CONNECT_TIMEOUT 값이 너무 짧게 설정된 경우
리스너의 INBOUND_CONNECT_TIMEOUT 파라미터가 기본값(Oracle 11g 이후 기본값 60초) 또는 DBA가 임의로 낮게 설정한 값보다 클라이언트의 응답 시간이 길 때 발생합니다. 네트워크 지연이 심한 WAN 환경이나 방화벽(Firewall)을 경유하는 구성에서 특히 빈번하게 나타납니다. 클라이언트가 리스너에 TCP 연결은 성립했지만, 실제 TNS 핸드셰이크(Handshake) 데이터를 보내기까지 시간이 걸리면 리스너가 타임아웃으로 연결을 끊어버립니다.
2. 네트워크 불안정 또는 방화벽(Firewall)/보안 장비 간섭
클라이언트와 Oracle 서버 사이에 위치한 방화벽, 로드밸런서, 또는 IDS/IPS 장비가 패킷을 지연시키거나 필터링하는 경우에 이 에러가 발생합니다. 특히 방화벽이 idle 연결을 조기에 차단하거나, TCP SYN 패킷만 통과시키고 이후 데이터 패킷을 지연시키는 정책이 있을 때 문제가 됩니다. 이러한 환경에서는 리스너 입장에서는 연결 요청이 들어왔지만 후속 데이터가 오지 않아 타임아웃이 발생하는 것처럼 보입니다.
3. DoS(서비스 거부) 공격 또는 포트 스캐닝
악의적인 외부 공격자가 Oracle 리스너 포트(기본 1521)에 대해 TCP 연결만 수립하고 실제 TNS 데이터는 보내지 않는 방식으로 리스너 자원을 소모시키는 공격이 발생할 수 있습니다. 이 경우 리스너 로그(listener.log)에 대량의 ORA-12525 에러가 짧은 시간 내에 반복적으로 기록됩니다. 이는 단순 설정 문제가 아닌 보안 이슈이므로 DBA와 보안팀이 협력하여 대응해야 합니다.
해결 방법
원인 1 해결: INBOUND_CONNECT_TIMEOUT 값 조정
sqlnet.ora 및 listener.ora 파일에서 타임아웃 값을 현재 네트워크 환경에 맞게 조정합니다. 아래는 현재 설정 값을 확인하고, 동적으로 리스너 파라미터를 변경하는 방법입니다.
현재 리스너 파라미터 확인 (lsnrctl 명령어):
-- Oracle Listener 현재 설정 상태 확인 (OS 명령어 레벨)
-- lsnrctl status 결과에서 파라미터 확인
-- LSNRCTL> STATUS
-- LSNRCTL> SHOW INBOUND_CONNECT_TIMEOUT
listener.ora 파일 수정 예시:
-- listener.ora 파일에 아래 항목 추가 또는 수정
-- INBOUND_CONNECT_TIMEOUT_LISTENER = 120 (초 단위, 기본값 60)
-- 수정 후 리스너 재시작 없이 동적 적용 방법
-- LSNRCTL> SET INBOUND_CONNECT_TIMEOUT 120
-- LSNRCTL> SAVE_CONFIG
sqlnet.ora 파일 수정 예시:
-- sqlnet.ora 파일에서 클라이언트 측 타임아웃도 함께 조정
-- SQLNET.INBOUND_CONNECT_TIMEOUT = 120
-- 현재 sqlnet.ora 설정 DB에서 확인
SELECT name, value
FROM v$parameter
WHERE name LIKE '%timeout%'
ORDER BY name;
원인 2 해결: 네트워크 및 방화벽 구성 점검
방화벽 idle 타임아웃과 Oracle 리스너 타임아웃의 조화를 맞추는 것이 중요합니다. 네트워크 경로 상의 지연을 측정하고 방화벽 정책을 검토해야 합니다.
-- 현재 세션의 네트워크 관련 대기 이벤트 확인
SELECT event, total_waits, time_waited, average_wait
FROM v$system_event
WHERE event LIKE '%SQL*Net%'
OR event LIKE '%listener%'
ORDER BY time_waited DESC;
-- 특정 시점의 세션 연결 실패 현황 확인
SELECT to_char(sample_time, 'YYYY-MM-DD HH24:MI') AS sample_time,
session_state,
event,
COUNT(*) AS cnt
FROM dba_hist_active_sess_history
WHERE event LIKE '%SQL*Net%'
AND sample_time >= SYSDATE - 1
GROUP BY to_char(sample_time, 'YYYY-MM-DD HH24:MI'), session_state, event
ORDER BY sample_time DESC;
원인 3 해결: DoS 공격 대응 및 리스너 보안 강화
리스너 로그를 분석하여 비정상적인 접속 패턴을 식별하고, 방화벽에서 해당 IP를 차단합니다.
-- listener.log 분석을 위한 External Table 생성 예시
-- (listener.log 경로는 환경에 맞게 수정)
CREATE OR REPLACE DIRECTORY listener_log_dir
AS '/u01/app/oracle/diag/tnslsnr/hostname/listener/trace';
-- 리스너 관련 실패 세션 IP별 집계 (alert log 기반)
SELECT machine, COUNT(*) AS fail_count
FROM v$session
WHERE status = 'INACTIVE'
AND logon_time < SYSDATE - 1/24 -- 1시간 이상 inactive
GROUP BY machine
ORDER BY fail_count DESC;
-- 비정상 접속 시도 IP 확인 (auditing 활성화 전제)
SELECT os_username, userhost, timestamp, action_name, returncode
FROM dba_audit_trail
WHERE returncode != 0
AND timestamp >= SYSDATE - 1
ORDER BY timestamp DESC
FETCH FIRST 50 ROWS ONLY;
-- 리스너에 유효한 IP만 접근 허용 (sqlnet.ora 설정)
-- TCP.VALIDNODE_CHECKING = YES
-- TCP.INVITED_NODES = (192.168.1.0/24, 10.0.0.1)
-- TCP.EXCLUDED_NODES = (192.168.2.100)
예방 방법
1. 리스너 타임아웃 및 네트워크 파라미터 정기 검토
운영 환경의 네트워크 특성(WAN/LAN, 방화벽 유무, VPN 사용 여부)에 맞게 INBOUND_CONNECT_TIMEOUT과 SQLNET.INBOUND_CONNECT_TIMEOUT 값을 처음 구성 시부터 충분히 설정하고, 분기별로 실제 연결 패턴과 리스너 로그를 분석하여 적정값을 유지합니다. Oracle Enterprise Manager 또는 별도의 모니터링 도구를 통해 ORA-12525 에러 발생 건수를 지속적으로 추적하면 이상 징후를 조기에 감지할 수 있습니다.
2. 리스너 보안 강화 및 접근 제어 적용
sqlnet.ora의 TCP.VALIDNODE_CHECKING, TCP.INVITED_NODES, TCP.EXCLUDED_NODES 파라미터를 활용하여 허가된 IP 대역에서만 리스너에 접근하도록 제한합니다. 또한 Oracle Database Vault나 네트워크 방화벽 정책과 연계하여 불필요한 외부 포트 노출을 최소화하고, 정기적인 보안 감사(Audit)를 통해 비정상 접속 시도를 모니터링하는 체계를 구축하는 것이 장기적인 안정성에 필수적입니다.
관련 에러
- ORA-12526: TNS: listener: all appropriate instances are in restricted mode — 리스너가 접근 가능한 인스턴스가 제한 모드일 때 발생
- ORA-12516: TNS: listener could not find available handler with matching protocol stack — 리스너가 사용 가능한 서버 프로세스 핸들러를 찾지 못할 때 발생
- ORA-12541: TNS: no listener — 리스너 자체가 구동되지 않았거나 포트 연결 불가 시 발생
- ORA-03135: connection lost contact — 클라이언트-서버 간 연결이 유지되다가 중간에 끊어질 때 발생하며, ORA-12525와 함께 나타나는 경우가 많음
- TNS-12535: TNS: operation timed out — ORA-12525와 유사한 타임아웃 계열 에러로, 리스너 로그에서 함께 확인되는 경우가 있음
주요 DBMS error code를 정리하는 시리즈입니다.
블로그 홈에서 다른 에러도 확인하세요.
본 포스트는 AI가 생성한 기술 가이드입니다. 운영 환경 적용 전 충분한 검토를 권장합니다.