2026년 09월 13일 | DBMS Error 가이드
이 글에서 다루는 내용
ORA-12541 에러의 원인 분석, 해결 SQL, 예방 방법을 실무 관점에서 정리합니다.
ORA-12541 TNS: no listener 는?
ORA-12541 에러는 Oracle 클라이언트가 데이터베이스 서버에 연결을 시도할 때 TNS 리스너(Listener)가 응답하지 않거나 존재하지 않을 경우 발생하는 네트워크 연결 오류입니다. TNS(Transparent Network Substrate)는 Oracle의 네트워크 통신 레이어로, 리스너는 클라이언트의 연결 요청을 받아 데이터베이스 프로세스에 전달하는 핵심 역할을 담당합니다. 즉, 리스너가 정상적으로 작동하지 않으면 어떤 클라이언트도 Oracle 데이터베이스에 접속할 수 없게 되며, 이는 운영 환경에서 매우 심각한 장애로 이어질 수 있습니다.
주요 발생 원인
1. Oracle 리스너 서비스가 중지된 경우
가장 빈번하게 발생하는 원인으로, 서버 재부팅 이후 리스너 서비스가 자동으로 시작되지 않거나 수동으로 중지된 경우입니다. 또한 시스템 리소스 부족, 비정상적인 종료, 또는 DBA의 실수로 인해 리스너가 중단될 수 있으며, 이 경우 모든 신규 클라이언트 연결이 즉시 실패하게 됩니다.
2. tnsnames.ora 또는 listener.ora 설정 파일 오류
클라이언트 측의 tnsnames.ora 파일에 잘못된 호스트명, 포트 번호, 또는 서비스명이 기재되어 있을 경우 리스너를 찾지 못해 이 에러가 발생합니다. 마찬가지로 서버 측의 listener.ora 파일에 리스닝 포트나 주소 설정이 올바르지 않으면, 리스너가 기동되더라도 클라이언트가 올바른 엔드포인트에 도달하지 못하는 문제가 생깁니다.
3. 방화벽 또는 네트워크 차단으로 인한 포트 접근 불가
Oracle 리스너는 기본적으로 1521번 포트를 사용하는데, 서버 또는 네트워크 방화벽 정책이 해당 포트를 차단하고 있을 경우 클라이언트 입장에서는 리스너가 없는 것과 동일하게 보입니다. OS 업데이트, 보안 정책 변경, 또는 클라우드 환경의 보안 그룹 설정 변경 후에 갑자기 이 문제가 발생하는 경우가 많으므로, 네트워크 레벨의 점검도 반드시 병행해야 합니다.
해결 방법
원인 1: 리스너 서비스 재시작
서버에 SSH 또는 원격으로 접속하여 아래 명령어로 리스너 상태를 확인하고 재시작합니다.
-- 리스너 상태 확인 (OS 명령어, oracle 계정에서 실행)
-- lsnrctl status
-- 리스너 시작
-- lsnrctl start
-- 특정 리스너 이름이 있는 경우
-- lsnrctl start LISTENER_NAME
-- 리스너 재시작
-- lsnrctl stop
-- lsnrctl start
리스너가 정상 기동된 후 데이터베이스 서비스가 리스너에 등록되었는지 확인합니다.
-- 리스너에 등록된 서비스 목록 확인
-- lsnrctl services
-- sqlplus로 로컬 접속 후 서비스 등록 상태 확인
SELECT name, network_name, creation_date
FROM v$active_services
ORDER BY name;
리스너에 데이터베이스 서비스가 자동 등록되지 않았다면, 아래 명령으로 수동 등록합니다.
-- DB 서비스를 리스너에 수동 등록 (sqlplus / as sysdba 접속 후)
ALTER SYSTEM REGISTER;
원인 2: tnsnames.ora / listener.ora 설정 파일 수정
클라이언트의 tnsnames.ora 파일 경로는 보통 $ORACLE_HOME/network/admin/tnsnames.ora입니다. 아래 예시를 참고하여 올바른 형식으로 작성되었는지 확인합니다.
-- tnsnames.ora 올바른 설정 예시
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.100)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl.example.com)
)
)
-- listener.ora 올바른 설정 예시 (서버 측)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.100)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = orcl.example.com)
(ORACLE_HOME = /u01/app/oracle/product/19.0.0/dbhome_1)
(SID_NAME = ORCL)
)
)
설정 파일 수정 후 반드시 리스너를 재시작하고 tnsping으로 연결을 테스트합니다.
-- 연결 테스트 (OS 명령어)
-- tnsping ORCL
-- 상세 연결 정보 확인
-- tnsping ORCL 10
-- sqlplus 연결 테스트
-- sqlplus system/password@ORCL
원인 3: 방화벽 포트 개방
Linux 환경에서 firewalld를 사용하는 경우 아래와 같이 1521 포트를 허용합니다.
-- Linux firewalld 포트 개방 (OS 명령어)
-- firewall-cmd --permanent --add-port=1521/tcp
-- firewall-cmd --reload
-- firewall-cmd --list-ports
-- iptables를 사용하는 경우
-- iptables -A INPUT -p tcp --dport 1521 -j ACCEPT
-- 포트 리스닝 여부 확인 (OS 명령어)
-- netstat -tlnp | grep 1521
-- ss -tlnp | grep 1521
Oracle 내부에서 현재 리스너 포트 설정을 확인하려면 아래 쿼리를 사용합니다.
-- DB 내부에서 리스너 관련 파라미터 확인
SELECT name, value
FROM v$parameter
WHERE name IN ('local_listener', 'remote_listener', 'service_names')
ORDER BY name;
-- 현재 접속 정보 확인
SELECT sys_context('USERENV', 'IP_ADDRESS') AS client_ip,
sys_context('USERENV', 'HOST') AS client_host,
sys_context('USERENV', 'SERVER_HOST') AS server_host,
sys_context('USERENV', 'SERVICE_NAME') AS service_name
FROM dual;
예방 방법
1. 리스너 자동 시작 설정 및 모니터링 체계 구축
서버 재부팅 후 리스너가 자동으로 시작될 수 있도록 OS 레벨의 서비스 등록을 반드시 해두어야 합니다. Linux 환경이라면 systemd 서비스 파일을 생성하거나, Oracle의 dbstart/dbshut 스크립트를 활용하여 부팅 시 자동 기동되도록 설정합니다. 또한 OEM(Oracle Enterprise Manager) 또는 외부 모니터링 도구(Zabbix, Nagios 등)를 이용하여 리스너 포트(1521)의 가용성을 주기적으로 체크하고, 장애 발생 시 즉각 알람이 발송되도록 구성해야 합니다.
-- 리스너 헬스체크용 간단 모니터링 쿼리 (DB 접속이 가능할 때)
SELECT 'LISTENER_CHECK' AS check_type,
COUNT(*) AS active_connections,
SYSDATE AS check_time
FROM v$session
WHERE type = 'USER';
2. 네트워크 설정 파일 버전 관리 및 변경 통제
tnsnames.ora, listener.ora, sqlnet.ora 등의 Oracle 네트워크 설정 파일은 Git 등의 버전 관리 시스템으로 관리하고, 변경 시 반드시 변경 이력을 남겨야 합니다. 파일 수정 전후로 백업을 생성하는 습관을 들이고, 운영 환경에서는 변경 통제 프로세스(Change Management)를 통해 승인된 변경만 적용하도록 정책을 수립하면 설정 오류로 인한 장애를 대폭 줄일 수 있습니다.
관련 에러
- ORA-12514:
TNS: listener does not currently know of service requested— 리스너는 기동 중이지만 요청한 서비스명이 리스너에 등록되지 않은 경우 발생하며, ORA-12541과 함께 자주 혼동됩니다. - ORA-12505:
TNS: listener does not currently know of SID given in connect descriptor— SID가 리스너에 등록되지 않았을 때 발생합니다. - ORA-12170:
TNS: Connect timeout occurred— 리스너에는 연결되었으나 응답 지연으로 타임아웃이 발생한 경우입니다. - ORA-12154:
TNS: could not resolve the connect identifier specified— tnsnames.ora에서 해당 TNS 별칭을 찾지 못할 때 발생합니다.
주요 DBMS error code를 정리하는 시리즈입니다.
블로그 홈에서 다른 에러도 확인하세요.
본 포스트는 AI가 생성한 기술 가이드입니다. 운영 환경 적용 전 충분한 검토를 권장합니다.