Oracle ORA-12545 오류 원인과 해결 방법 완벽 가이드

ORA-12545
2026년 09월 14일 | DBMS Error 가이드

이 글에서 다루는 내용

ORA-12545 에러의 원인 분석, 해결 SQL, 예방 방법을 실무 관점에서 정리합니다.

ORA-12545 Connect failed because target host or object does not exist 는?

ORA-12545는 Oracle 클라이언트가 데이터베이스 서버에 접속을 시도할 때, 지정된 호스트 또는 서비스 객체를 찾을 수 없을 때 발생하는 네트워크 연결 오류입니다. 주로 TNS(Transparent Network Substrate) 설정이 잘못되었거나, 대상 호스트가 실제로 존재하지 않거나, 네트워크 경로가 올바르지 않을 때 발생합니다. 이 에러는 단순한 오타부터 DNS 설정 문제, 방화벽 차단에 이르기까지 다양한 원인으로 발생할 수 있어 신속한 원인 파악이 중요합니다.


주요 발생 원인

1. tnsnames.ora 파일의 잘못된 호스트명 또는 IP 주소 설정

가장 빈번하게 발생하는 원인으로, tnsnames.ora 파일에 등록된 HOST 항목이 실제 서버의 호스트명 또는 IP 주소와 일치하지 않을 때 발생합니다. 오타, 구 서버 IP가 남아 있거나, DNS 변경 후 설정 파일을 갱신하지 않은 경우가 대표적입니다. 특히 서버 마이그레이션이나 IP 변경 후 클라이언트 설정 파일을 일괄 변경하지 않은 환경에서 자주 발생합니다.

2. DNS 해석 실패 또는 네트워크 경로 문제

클라이언트가 호스트명을 IP 주소로 변환하는 과정(DNS Resolution)에서 실패하면 이 에러가 발생합니다. DNS 서버가 응답하지 않거나, /etc/hosts 파일에 해당 호스트명이 등록되어 있지 않은 경우, 혹은 방화벽이 특정 포트(기본 1521)를 차단하고 있을 때도 동일한 증상이 나타납니다. 네트워크 팀과 협력하여 라우팅 경로와 방화벽 정책을 함께 점검해야 합니다.

3. Oracle Listener가 정지되어 있거나 잘못된 포트로 설정된 경우

Oracle Listener가 실행 중이지 않거나, listener.ora에 설정된 포트와 tnsnames.ora에 지정된 포트가 서로 다를 경우 접속이 실패합니다. Listener가 특정 IP 또는 호스트명에만 바인딩되어 있는 경우, 다른 주소로 접속 시도하면 연결이 거부될 수 있습니다. 서버 재부팅 후 Listener 자동 시작 설정이 빠진 경우에도 이 문제가 반복적으로 발생합니다.


해결 방법

1. tnsnames.ora 설정 확인 및 수정

먼저 tnsnames.ora 파일의 HOST 설정을 검토합니다.

-- 현재 TNS 연결 문자열로 접속 테스트 (SQL*Plus)
-- 아래와 같이 EZCONNECT 방식으로 우선 직접 IP 테스트
-- sqlplus username/password@//실제IP주소:1521/서비스명

-- 예시
-- sqlplus scott/tiger@//192.168.1.100:1521/ORCL

-- tnsnames.ora 설정 예시 (올바른 형식)
-- ORCL =
--   (DESCRIPTION =
--     (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.100)(PORT = 1521))
--     (CONNECT_DATA =
--       (SERVER = DEDICATED)
--       (SERVICE_NAME = ORCL)
--     )
--   )
-- TNS 설정 파일 위치 확인 쿼리 (접속 성공 후)
SELECT VALUE
FROM V$PARAMETER
WHERE NAME = 'tns_admin';

-- 또는 서버의 네트워크 설정 파일 경로 확인
SELECT NAME, VALUE
FROM V$PARAMETER
WHERE NAME IN ('db_name', 'service_names', 'local_listener');

2. 네트워크 및 DNS 점검

OS 레벨에서 호스트 접근 가능 여부를 먼저 확인합니다.

-- 접속 가능한 상태에서 서버 네트워크 정보 확인
SELECT UTL_INADDR.GET_HOST_ADDRESS('db-server-hostname') AS IP_ADDRESS
FROM DUAL;

-- 반대로 IP로 호스트명 조회
SELECT UTL_INADDR.GET_HOST_NAME('192.168.1.100') AS HOST_NAME
FROM DUAL;

-- 서비스 명칭 확인 (서버에 접속된 상태에서)
SELECT NAME, NETWORK_NAME, CREATION_DATE
FROM DBA_SERVICES
ORDER BY NAME;

3. Listener 상태 확인 및 재시작

서버에서 직접 Listener 상태를 점검합니다.

-- Listener 상태 확인 (OS 커맨드 후 DB 쿼리)
-- OS: lsnrctl status
-- OS: lsnrctl start

-- Listener 등록된 서비스 확인 (DB 접속 후)
SELECT LISTENER_ALIAS, ENDPOINTS_SUMMARY
FROM DBA_LISTENERS;

-- Dynamic 서비스 등록 상태 확인
SELECT NAME, NETWORK_NAME, ENABLED
FROM V$SERVICES
ORDER BY NAME;

-- Listener 재등록 명령 (DB 내부에서 실행)
ALTER SYSTEM REGISTER;

-- local_listener 파라미터 확인
SHOW PARAMETER LOCAL_LISTENER;

-- local_listener 수동 설정 예시
ALTER SYSTEM SET LOCAL_LISTENER =
  '(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.100)(PORT=1521))'
SCOPE=BOTH;

4. 포트 통신 가능 여부 확인

-- Oracle 접속 후 현재 세션의 네트워크 정보 확인
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;

-- 활성 Listener 연결 세션 수 확인
SELECT COUNT(*) AS ACTIVE_CONNECTIONS,
       STATUS,
       SERVER
FROM V$SESSION
WHERE TYPE = 'USER'
GROUP BY STATUS, SERVER;

예방 방법

1. TNS 설정 파일의 중앙화 관리 및 주기적 검증 자동화

tnsnames.ora 파일을 각 클라이언트 PC에 개별 관리하지 않고, LDAP 디렉토리(Oracle Internet Directory) 또는 중앙 파일 서버를 통해 일괄 배포하는 방식으로 운영하면 설정 불일치 문제를 근본적으로 방지할 수 있습니다. 추가적으로 아래와 같은 쉘 스크립트나 cron 잡을 통해 주기적으로 TNS 접속 가능 여부를 모니터링하는 것이 좋습니다.

-- 접속 가능 여부 주기적 점검용 헬스체크 쿼리
-- 모니터링 툴에서 아래 쿼리로 접속 테스트 자동화 가능
SELECT 'ALIVE' AS DB_STATUS,
       SYSDATE AS CHECK_TIME,
       SYS_CONTEXT('USERENV', 'DB_NAME') AS DB_NAME
FROM DUAL;

2. Listener 자동 시작 등록 및 이중화 구성

서버 재부팅 시 Listener가 자동으로 시작될 수 있도록 OS의 서비스 등록(Linux: systemd/init.d, Windows: 서비스 등록)을 반드시 설정해야 합니다. 또한 Oracle RAC(Real Application Clusters) 또는 SCAN(Single Client Access Name) 리스너를 활용하여 단일 장애점(SPOF)을 제거하고, 여러 노드 중 하나가 장애가 발생하더라도 자동으로 다른 노드로 연결될 수 있는 고가용성 아키텍처를 구성하는 것이 장기적인 예방책입니다.


관련 에러

  • ORA-12541: TNS No Listener — Listener 자체가 실행되지 않을 때 발생하며, ORA-12545와 함께 자주 쌍으로 발생합니다.
  • ORA-12154: TNS Could not resolve the connect identifier specified — tnsnames.ora에 해당 TNS 별칭 자체가 존재하지 않을 때 발생합니다.
  • ORA-12170: TNS Connect timeout occurred — 호스트는 존재하지만 응답이 없을 때 발생합니다.
  • ORA-12535: TNS Operation timed out — 네트워크 지연으로 인해 타임아웃이 발생할 때 나타납니다.
  • ORA-01034: ORACLE not available — 리스너는 정상이지만 DB 인스턴스 자체가 시작되지 않은 경우 발생합니다.

DBMS 에러 코드 시리즈

주요 DBMS error code를 정리하는 시리즈입니다.
블로그 홈에서 다른 에러도 확인하세요.

본 포스트는 AI가 생성한 기술 가이드입니다. 운영 환경 적용 전 충분한 검토를 권장합니다.

댓글 남기기