Oracle Listener 완벽 가이드: 구성부터 관리까지
안녕하세요.
이번 포스팅은 Oracle 데이터베이스 네트워크 구성의 핵심 요소인 Oracle Listener에 대해 상세히 알아보겠습니다. Listener는 클라이언트 애플리케이션과 Oracle 데이터베이스 간 통신을 관리하는 중요한 컴포넌트입니다. 이 글에서는 Oracle Listener의 개념부터 구성, 관리, 문제 해결까지 모든 측면을 포괄적으로 다룹니다.
목차
- Oracle Listener 개요
- Listener 구조와 작동 원리
- Listener 설치 및 기본 구성
- Listener.ora 파일 구성
- Listener 관리 명령어(LSNRCTL)
- 다중 Listener 구성
- Listener 보안 설정
- Listener 로그 분석
- 성능 모니터링 및 튜닝
- 일반적인 오류와 문제 해결
- Oracle 버전별 Listener 변화
- 자주 묻는 질문(FAQ)
#1. Oracle Listener 개요
Oracle Listener는 클라이언트 요청을 대기하고 이를 적절한 데이터베이스 인스턴스로 라우팅하는 Oracle Net Services의 핵심 구성 요소입니다.
Listener의 주요 기능:
- 연결 중재: 클라이언트 요청을 데이터베이스 서버에 연결
- 서비스 등록 관리: 사용 가능한 데이터베이스 서비스 정보 유지
- 로드 밸런싱: 여러 인스턴스 간 연결 분산(RAC 환경)
- 연결 집중화: 데이터베이스 리소스 효율적 사용
- 투명한 애플리케이션 페일오버: 고가용성 지원
Listener가 중요한 이유:
Listener 없이는 클라이언트가 Oracle 데이터베이스에 접속할 수 없습니다. 데이터베이스는 정상적으로 실행 중이어도 Listener가 작동하지 않으면 원격 접속이 불가능합니다.
#2. Listener 구조와 작동 원리
기본 구조
Oracle Listener는 운영체제 레벨에서 실행되는 프로세스이며, 보통 tnslsnr
이라는 이름으로 실행됩니다. 이 프로세스는 특정 TCP/IP 포트(기본값 1521)에서 클라이언트 연결 요청을 대기합니다.
연결 설정 과정
- 클라이언트 요청: 클라이언트가 접속 정보(TNS 별칭)를 사용하여 연결 요청
- Listener 수신: Listener가 클라이언트 요청을 수신하고 분석
- 서비스 확인: 요청된 서비스 이름에 해당하는 데이터베이스 인스턴스 확인
- 연결 설정: 클라이언트와 데이터베이스 인스턴스 간 직접 연결 설정
- Listener 역할 종료: 연결이 설정되면 Listener는 해당 세션에서 역할 종료 (연결 자체는 유지)
서비스 등록 방식
Oracle 데이터베이스는 두 가지 방식으로 Listener에 자신의 서비스를 등록합니다:
- 정적 등록: listener.ora 파일에 SID_LIST 섹션을 통해 수동 구성
- 동적 등록: PMON(Process Monitor) 프로세스가 자동으로 Listener에 서비스 정보 등록
#3. Listener 설치 및 기본 구성
설치 확인
Oracle 데이터베이스를 설치하면 Listener도 함께 설치됩니다. 설치 여부는 다음 명령으로 확인할 수 있습니다:
# Unix/Linux ps -ef | grep tnslsnr # Windows tasklist | findstr tnslsnr |
기본 Listener 생성
Oracle 설치 중 Listener를 구성하지 않았다면 다음과 같이 새로 생성할 수 있습니다:
# Oracle Net Configuration Assistant 실행 netca |
또는 직접 명령줄에서:
# 기본 포트(1521)에 Listener 생성 lsnrctl start |
기본 환경 변수 설정
Listener 관리를 위한 필수 환경 변수:
# Unix/Linux export ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1 export PATH=$ORACLE_HOME/bin:$PATH export TNS_ADMIN=$ORACLE_HOME/network/admin # Windows set ORACLE_HOME=C:\app\oracle\product\19.0.0\dbhome_1 set PATH=%ORACLE_HOME%\bin;%PATH% set TNS_ADMIN=%ORACLE_HOME%\network\admin |
#4. Listener.ora 파일 구성
listener.ora
파일은 Listener의 구성 정보를 담고 있는 텍스트 파일입니다. 기본 위치는 $ORACLE_HOME/network/admin
또는 $TNS_ADMIN
디렉토리입니다.
기본 listener.ora 파일 예제
# 기본 Listener 구성 LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = myhost.example.com)(PORT = 1521)) ) ) # 정적 서비스 등록 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) ) ) # 로깅 및 추적 설정 LOGGING_listener = ON TRACE_LEVEL_listener = OFF |
주요 파라미터 설명
- ADDRESS: Listener가 대기할 프로토콜, 호스트, 포트 지정
- SID_LIST: 정적으로 등록할 데이터베이스 서비스 목록
- GLOBAL_DBNAME: 데이터베이스의 전역 이름
- ORACLE_HOME: 데이터베이스 홈 디렉토리
- SID_NAME: 시스템 식별자(System Identifier)
- LOGGING: 로그 생성 여부(ON/OFF)
- TRACE_LEVEL: 추적 수준(OFF, USER, ADMIN, SUPPORT)
고급 구성 옵션
# 고급 Listener 구성 예제 LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = myhost.example.com)(PORT = 1521)) (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC)) ) ) # 관리자 접근 제한 PASSWORDS_listener = oracle # 연결 속도 제한 CONNECTION_RATE_listener = 10 # 유휴 시간 제한(분) INBOUND_CONNECT_TIMEOUT_listener = 60 |
#5. Listener 관리 명령어(LSNRCTL)
LSNRCTL은 Oracle Listener 관리를 위한 명령줄 도구입니다. 다음은 주요 명령어입니다:
기본 명령어
# Listener 상태 확인 lsnrctl status # Listener 시작 lsnrctl start # Listener 중지 lsnrctl stop # 설정 다시 로드 lsnrctl reload # 서비스 목록 표시 lsnrctl services # 버전 정보 표시 lsnrctl version # 현재 연결 수 확인 lsnrctl show current_listener |
대화형 모드 사용
# 대화형 모드 시작 lsnrctl # 프롬프트에서 명령 입력 LSNRCTL> start LSNRCTL> status LSNRCTL> stop LSNRCTL> exit |
여러 Listener 관리
# 특정 Listener 지정 lsnrctl status LISTENER_CUSTOM # 모든 Listener 확인 lsnrctl status -all |
#6. 다중 Listener 구성
여러 Listener를 구성하면 다양한 네트워크 요구사항을 충족하거나 성능을 개선할 수 있습니다.
추가 Listener 구성 예제
# listener.ora 파일에 추가 Listener 정의 LISTENER_HR = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = myhost.example.com)(PORT = 1522)) ) ) SID_LIST_LISTENER_HR = (SID_LIST = (SID_DESC = (GLOBAL_DBNAME = hrdb.example.com) (ORACLE_HOME = /u01/app/oracle/product/19.0.0/dbhome_1) (SID_NAME = hrdb) ) ) |
다중 Listener 관리
# HR Listener 시작 lsnrctl start LISTENER_HR # HR Listener 상태 확인 lsnrctl status LISTENER_HR # HR Listener 중지 lsnrctl stop LISTENER_HR |
다중 Listener 사용 시나리오
- 여러 데이터베이스 버전 지원: 다른 Oracle 버전용 별도 Listener
- 보안 분리: DMZ와 내부 네트워크용 별도 Listener
- 성능 최적화: 특정 애플리케이션 전용 Listener
- 부하 분산: 여러 Listener로 부하 분산(RAC 환경)
#7. Listener 보안 설정
Oracle Listener는 데이터베이스 연결의 첫 관문이므로 보안이 매우 중요합니다.
관리자 액세스 제한
# listener.ora에 암호 설정 PASSWORDS_LISTENER = oracle # 설정 후 암호 변경 lsnrctl LSNRCTL> set password Password: (입력) The command completed successfully LSNRCTL> save_config |
유효한 노드 제한
# TCP.VALIDNODE_CHECKING 활성화 TCP.VALIDNODE_CHECKING = YES # 허용 노드 지정 TCP.INVITED_NODES = (192.168.1.100, 192.168.1.101, 192.168.1.102) # 또는 거부 노드 지정 TCP.EXCLUDED_NODES = (192.168.2.100, 192.168.2.0/24) |
서비스 등록 제한
# 동적 등록 제한 DYNAMIC_REGISTRATION_listener = OFF |
로깅 및 감사 설정
# 상세 로깅 활성화 LOGGING_listener = ON TRACE_LEVEL_listener = ADMIN TRACE_DIRECTORY_listener = /u01/app/oracle/diag/tnslsnr TRACE_FILE_listener = listener |
#8. Listener 로그 분석
Listener 로그는 연결 문제 진단에 중요한 정보를 제공합니다.
로그 위치
# 기본 로그 위치 (Oracle 11g 이상) $ORACLE_BASE/diag/tnslsnr/$HOSTNAME/listener/trace/listener.log # 이전 버전 $ORACLE_HOME/network/log/listener.log |
주요 로그 항목
- 시작 및 중지 메시지: Listener 시작/중지 시간
- 서비스 등록 정보: 데이터베이스 서비스 등록/등록 해제
- 연결 요청: 클라이언트 연결 시도
- 오류 메시지: 연결 실패 및 기타 오류
- 구성 변경: Listener 구성 변경 사항
로그 분석 예제
# 시작 메시지 15-MAR-2025 08:12:34 * (CONNECT_DATA=(SERVICE_NAME=orcl)(CID=(PROGRAM=sqlplus)(HOST=client1)(USER=oracle))) * (ADDRESS=(PROTOCOL=tcp)(HOST=192.168.1.100)(PORT=53922)) * establish * orcl * 0 # 오류 메시지 15-MAR-2025 08:15:45 * TNS-12514: TNS:listener does not currently know of service requested in connect descriptor |
유용한 로그 분석 명령어
# 특정 IP의 연결 시도 확인 grep "HOST=192.168.1.100" listener.log # 특정 서비스에 대한 연결 확인 grep "SERVICE_NAME=orcl" listener.log # 오류 메시지만 확인 grep "TNS-" listener.log |
#9. 성능 모니터링 및 튜닝
Listener 성능 최적화는 전체 데이터베이스 성능에 영향을 미칩니다.
연결 상태 모니터링
# 현재 연결 수 확인 lsnrctl status | grep "Established" # 자세한 서비스 정보 lsnrctl services |
일반적인 튜닝 파라미터
# 연결 비율 제한 (초당 최대 연결 수) CONNECTION_RATE_listener = 30 # 인바운드 연결 타임아웃 (초) INBOUND_CONNECT_TIMEOUT_listener = 120 # 세션 데이터 단위 (바이트) SQLNET.INBOUND_CONNECT_TIMEOUT = 60 SQLNET.OUTBOUND_CONNECT_TIMEOUT = 60 |
RAC 환경에서의 Listener 튜닝
# 로드 밸런싱 목표 설정 listener.ora: (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = rac1.example.com)(PORT = 1521)) (LOAD_BALANCE = ON) ) # SCAN Listener 구성 (11g R2 이상) srvctl config scan srvctl status scan |
#10. 일반적인 오류와 문제 해결
Oracle Listener 관련 일반적인 오류와 해결 방법을 알아보겠습니다.
TNS-12541: TNS:no listener
문제: Listener가 실행되지 않음 해결: 1. Listener 상태 확인: lsnrctl status 2. 필요시 시작: lsnrctl start 3. 호스트/포트 설정 확인 |
TNS-12514: TNS:listener does not currently know of service requested
문제: 요청한 서비스가 Listener에 등록되지 않음 해결: 1. 서비스 등록 확인: lsnrctl services 2. 데이터베이스 실행 중인지 확인 3. 정적 등록 추가 또는 동적 등록 오류 확인 4. tnsnames.ora의 서비스 이름 확인 |
TNS-12535: TNS:operation timed out
문제: 연결 시간 초과 해결: 1. 네트워크 연결 확인 2. 방화벽 설정 확인 3. 타임아웃 설정 늘리기: INBOUND_CONNECT_TIMEOUT_listener = 240 |
TNS-12547: TNS:lost contact
문제: 연결 중 연결 끊김 해결: 1. 네트워크 안정성 확인 2. 클라이언트/서버 네트워크 설정 확인 3. SQLNET.INBOUND_CONNECT_TIMEOUT, SQLNET.OUTBOUND_CONNECT_TIMEOUT 설정 확인 |
ORA-12516: TNS:listener could not find available handler for requested type of server
문제: 최대 프로세스 수 초과 해결: 1. 프로세스 파라미터 확인: show parameter processes 2. 필요시 증가: alter system set processes=300 scope=spfile; 3. 데이터베이스 재시작 |
#11. Oracle 버전별 Listener 변화
Oracle 버전에 따른 Listener의 주요 변화를 살펴보겠습니다.
Oracle 9i
- 기본 TCP 프로토콜 지원 강화
- IPC 프로토콜 개선
- 기본 보안 기능 도입
Oracle 10g
- 자동 서비스 등록 기능 개선
- 동적 서비스 등록이 기본값으로 설정
- 클라이언트 연결 로드 밸런싱 개선
Oracle 11g
- SCAN(Single Client Access Name) Listener 도입(RAC)
- 다중 엔드포인트 지원 강화
- 진단 기능 향상
- ADR(Automatic Diagnostic Repository) 통합
Oracle 12c
- 멀티테넌트 아키텍처(PDB/CDB) 지원
- 플러그형 데이터베이스 서비스 등록
- 향상된 보안 기능(TLS 1.2 지원)
Oracle 19c
- SCAN 기능 강화
- 네트워크 암호화 기본 설정 강화
- 자동 진단 기능 개선
- TLS 1.3 지원
Oracle 21c
- 서비스 탐색 기능 개선
- 중앙 집중식 Listener 관리
- 보안 기능 강화(암호화, 인증)
- 클라우드 통합 기능 개선
#12. 자주 묻는 질문(FAQ)
Q1: Listener가 없어도 데이터베이스에 접속할 수 있나요?
A: 로컬 접속(localhost)은 Listener 없이도 가능합니다. 'bequeath' 연결이라고 하며, 원격 접속에만 Listener가 필요합니다.
Q2: Listener 암호를 잊어버렸습니다. 어떻게 복구할 수 있나요?
A: listener.ora 파일에서 PASSWORDS_LISTENER
항목을 제거하고 Listener를 재시작하면 암호가 초기화됩니다. 그 후 새 암호를 설정할 수 있습니다.
Q3: 기본 Listener 포트를 변경하려면 어떻게 해야 하나요?
A:
|
Q4: 여러 Oracle 홈 환경에서 Listener를 관리하는 방법은?
A:
|
Q5: RAC 환경에서 SCAN Listener와 일반 Listener의 차이점은?
A:
|
Q6: 데이터베이스가 Listener에 등록되지 않는 문제의 원인은?
A: 주요 원인은 다음과 같습니다:
- LOCAL_LISTENER 파라미터 미설정 또는 잘못된 설정
- PMON 프로세스 문제
- listener.ora와 tnsnames.ora 파일의 불일치
- 네트워크/방화벽 문제
해결 방법:
-- LOCAL_LISTENER 설정 확인 및 수정 SHOW PARAMETER LOCAL_LISTENER ALTER SYSTEM SET LOCAL_LISTENER='LISTENER_ALIAS' SCOPE=BOTH; ALTER SYSTEM REGISTER; |
결론
Oracle Listener는 클라이언트와 데이터베이스 간의 중요한 통신 매개체입니다. 올바른 설정과 관리는 데이터베이스 환경의 안정성, 보안 및 성능에 직접적인 영향을 미칩니다.
이 글에서는 Oracle Listener의 기본 개념부터 구성, 관리, 문제 해결까지 전반적인 내용을 다루었습니다. Listener 관리는 DBA의 일상적인 업무 중 하나이므로, 이러한 지식은 Oracle 데이터베이스 환경을 효과적으로 운영하는 데 필수적입니다.
최신 Oracle 버전에서는 자동 등록 및 관리 기능이 향상되었지만, 기본 원리를 이해하고 문제 상황에 대응할 수 있는 능력은 여전히 중요합니다. 특히 엔터프라이즈 환경에서는 다중 Listener 구성, 보안 설정, 성능 최적화 등의 고급 주제에 대한 이해가 필요합니다.
긴 글 읽어주셔서 감사합니다.
끝.
'■Development■ > 《Database》' 카테고리의 다른 글
[DB] 데이터 모델링 완벽 가이드 (0) | 2022.09.04 |
---|---|
[DB] Oracle SQL 완벽 정리 (0) | 2022.08.31 |
[DB] DB Sequence 생성과 삭제 완벽 가이드 (0) | 2020.04.08 |
[DB] ROWNUM과 ROWID의 완벽한 이해 (0) | 2020.04.08 |
[DB] ORACLE DB 사용자 계정 패스워드 없애는 방법 (0) | 2020.04.08 |