오라클 리스너 상태 - olakeul liseuneo sangtae

Oracle Listener를 등록하는 방법에는 두가지가 있습니다. 동적등록과 정적등록. 정적등록은 listener.ora파일에 직접 서비스를 등록해주는 방법 입니다. 자세한 내용은 아래 링크를 통해 확인합니다.

 

[Oracle] Listener 네트워크 구성 정적 등록 listener.ora 생성

Oracle 네트워크 통신 방법  외부에서 Oracle서버를 통신하기 위해서는 Listener를 통해 통신을 하게됩니다. Listener가 해주는 작업은 Connection을 만들어주는 것 입니다. 서버 구성 방식에따라 조금 다��

myjamong.tistory.com

 

정적등록 VS 동적 등록

정적 등록과 동적 등록의 가장 큰 차이는 Oracle Instance가 리스너를 자동으로 인식 하느냐 못하느냐의 차이입니다. 정적 등록은 listener.ora파일에 직접 서비스를 등록해주는 것이다. 동적 등록은 PMON이라는 프로세스가 LREG프로세스를 통해 리스너에 등록 가능한 서비스를 자동으로 등록해주는 것 입니다.

 

listener.ora

LISTENER =
 (DESCRIPTION_LIST =
  (DESCRIPTION =
   (ADDRESS = (PROTOCOL = TCP)(HOST = 601d2fce71dc)(PORT = 1521))
  )
 )

LISTENER1 =
 (DESCRIPTION =
  (ADDRESS = (PROTOCOL = TCP)(HOST = 601d2fce71dc)(PORT = 1522))
 )

SID_LIST_LISTENER1 =
 (SID_LIST =
  (SID_DESC =
   (GLOBAL_DBNAME = newdb)
   (ORACLE_HOME = /opt/oracle/app/product/11.2.0/dbhome_1)
   (SID_NAME = newdb)
  )
  (SID_DESC =
   (GLOBAL_DBNAME = PROD)
   (ORACLE_HOME = /opt/oracle/app/product/11.2.0/dbhome_1)
   (SID_NAME = PROD)
  )
 )

listener.ora파일을 위와 같이 구성해봤습니다. 우선 2개의 리스너를 실행시키고 상태를 확인해보겠습니다.

 

 

[oracle@601d2fce71dc ~]$ lsnrctl start
[oracle@601d2fce71dc ~]$ lsnrctl start listener1

각각 리스너를 실행합니다. start 명령 뒤에 리스너 명을 입력하지 않으면 LISTENER라는 default 명칭의 리스너를 실행해줍니다.

 

[oracle@601d2fce71dc ~]$ lsnrctl ser
오라클 리스너 상태 - olakeul liseuneo sangtae

LISTENER 리스너의 서비스를 확인해줍니다. 각각 서비스의 상태가 READY로 보여집니다.

 

[oracle@601d2fce71dc ~]$ lsnrctl ser listener1
오라클 리스너 상태 - olakeul liseuneo sangtae

LISTENER1 리스너의 서비스를 확인해줍니다. 이번에는 UNKNOWN이라는 상태값이 보여집니다. 어떤 차이를 갖고 있는지 알아보겠습니다.

 

 

UNKNOWN VS READY

우선 listener.ora파일에 등록되어 있는 정보를 확인해보면 LISTENER 리스너는 LISTENER1 리스너와 다르게 서비스를 등록하지도 않았는데 서버스의 상태가 보여지는 것을 확인할 수 있습니다. 바로 동적 등록과 정적 등록의 표시를 UNKNOWN과 READY로 한것 뿐입니다. UNKNOWN이라고해서 작동이 안하거나 그런 것이 아니고 단지 구분을 위한 표시일 뿐입니다.

 

 

동적등록

그럼 동적 등록이 어떻게 구성되는 것인지 확인해보겠습니다.

오라클 리스너 상태 - olakeul liseuneo sangtae

 

동적 등록은 PMON이라는 프로세스가 LREG라는 프로세스를 통해 자동으로 리스너에 서비스를 등록해줍니다. 서비스를 어떤 리스너에 등록해줘야할지는 local_listener 파라미터를 통해 관리가 되어집니다.

 

local_listener parameter

SYS@newdb> show parameter local_listener
오라클 리스너 상태 - olakeul liseuneo sangtae

local_listener의 default 값은 "" 입니다. 이럴때는 "LISTENER"이라는 명칭의 리스너에 동적 등록하겠다는 뜻입니다. newdb말고 PROD SID를 사용하는 데이터베이스도 기본 local_listener값을 사용하고 있어 LISTENER 리스너의 서비스 상태를 봤을때 listener.ora파일에 서비스를 등록하지 않았어도 동적 서비스 정보가 있었고 READY로 표시되어 있었습니다.

 

반면, LISTENER1의 경우 직접 listener.ora 파일에 SID_LIST에 기재하여 정적 등록되어 있었던 것입니다. 그럼 local_listener의 파라미터를 변경해서 LISTENER1에 동적 등록작업을 해보겠습니다.

 

LISTENER1에 newdb 동적 등록

SYS@newdb> alter system set local_listener='(description=(address=(protocol=tcp)(host=601d2fce71dc)(port=1522)))';

local_listener 파라미터에 직접 description정보를 입력해줍니다.

 

[oracle@601d2fce71dc ~]$ lsnrctl ser listener1
오라클 리스너 상태 - olakeul liseuneo sangtae

LISTENER1 리스너의 서비스를 확인해보니 newdb가 READY로 되어있는 서비스 하나 더 생성되었습니다. 정적등록과 동적 등록은 별개로 서비스에 모두 등록 가능합니다.

 

[oracle@601d2fce71dc ~]$ lsnrctl ser
오라클 리스너 상태 - olakeul liseuneo sangtae

반면 LISTENER의 서비스를 확인해보니 newdb로 있었던 서비스가 사라진것을 확인됩니다. local_listener 파라미터에 기본값으로 되었던 정보가 수정되었기 때문에 사라졌습니다. 복수 등록하면 여러 리스너에 동적 등록이 가능합니다.

상황 : 컴퓨터를 포맷하고 이전에 돌리던 프로젝트를 새로운 환경으로 옮겨와 돌리는데 상품보기 화면에서 ora-12505, ora-12518 등의 에러를 뿜어내며 DB에 접근하지 못했다. 에러메세지는 컨넥션풀에 대한 메세지, 네트워크 어댑터에 대한 메세지, SID 에 대한 메세지 등이 있었다. 이에 네이버에서 검색을 거듭한 결과 해결하게 되었다.
(글쓰신 분들, 출처를 까먹어서 죄송합니다 ㅜ.ㅜ....)

# 오라클의 리스너 환경설정 부분을 확인해야 한다.

    (1) ORACLE_HOME/network/ADMIN 의 listener.ora(서버) 파일과 tnsnames.ora(클라이언트) 
        파일을 열고 IP혹은 도메인네임 설정이 올바로 되어 있는가 확인해 본다.
        (내 경우에는 오라클 설치시 네트워크를 사용했던 학원의 IP가 등록되어 있었다.)

   (2) IP를 제대로 입력하고 리스너를 리셋시켰음에도 불구하고 리스너에 대한 네트워크 에러가 난다면,
        오라클이 클라이언트가 필요로 하는 SID 로 리스너를 서비스하고 있는지 살펴봐야 한다.

       <따라하기>
          (a) c:\lsnrctl 엔터
          (b) LSNRCTL>start    <= 리스너 시작
          (c) LSNRCTL>service     <= 실행되고 있는 서비스를 SID와 함께 확인 가능
                                                   이 부분에서 원하는 SID가 보이지 않는다면 listener.ora 파일을
                                                   편집해서 다음의 부분을 추가해 주어야 한다.
   
   
          <listener.ora 파일 - 빨간색이 추가해 준 부분이다>

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 자신의컴퓨터이름)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
    )
  )

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = PLSExtProc)
      (ORACLE_HOME = 오라클설치경로)
      (PROGRAM = extproc)
    )
   (SID_DESC =
      (GLOBAL_DBNAME = 추가할 SID)
      (ORACLE_HOME = 오라클 설치 경로)
      (SID_NAME = 추가할 SID)
    )
)

     
         

         이상과 같이 셋팅해 준 후 리스너를 리셋하고 LSNRCTL의 service 명령을 실행해 보니, 새 SID 로
         리스너가 수행되고 있는 것을 알 수 있었고, 실제 웹 프로그램도 잘 실행이 되었다.
        (네이버형 여러분들 감사합니다. ㅠ_ㅠ...)

    ### 여기서부터는 oracleclub.com 에서 퍼온 리스너에 대한 참고자료임 ###


오라클 클라이언트에서 서버에 접속하기 위해서는 오라클 서버에 리스너(LISTENER)가 실행되어 있어야 됩니다.
 
 
◈ 리스너(Listener)란?
 
 - 오라클 리스너는 네트워크를 이용하여 클라이언트에서 오라클 서버로 연결하기 위한 
   오라클 네트워크 관리자 입니다.
 
 - 오라클에서 네트워크를 통한 연결은 모두 리스너가 담당하며 리스너와 연결되기
   위해서는 클라이언트에 오라클 NET8이 설치되어 있고 이를 통해 오라클 서비스명이라는 것을
   만들어 접속해야 합니다.
 
 - 오라클 서버에서 리스너를 시작시켜줘야 클라이언트들이 접속할 수 있습니다.
 
 - lsnrctl명령어로 리스너를 관리 할 수 있습니다.
-- 리스너 시작하기
C:\>lsnrctl

LSNRCTL for 32-bit Windows: Version 8.1.6.0.0 - Production on 01-MAY-2002 23:34:57

(c) Copyright 1998, 1999, Oracle Corporation.  All rights reserved.

LSNRCTL에 오신 것을 환영합니다. 정보를 보시려면 "help" 를 입력하십시오.

 -- start를 입력하면 리스너가 시작됩니다
LSNRCTL>start.

-- 리스너 관련 명령어들
시작시 : LSNRCTL> start
 
멈출 때 : LSNRCTL> stop
 
재시작시 : LSNRCTL> reload
 
서비스 상태보기: LSNRCTL> status
 
명령어 보기 : LSNRCTL> help

오라클 서버/클라이언트간의 네트워크 설정을 하기위해서는 서버에서는 listener.ora파일을 그리고
클라이언트에서는 tnsnames.ora파일을 설정해 주어야 합니다.
 
 
◈ listener.ora
 
 - 오라클 서버에서 클라이언트의 요청을 듣고, 클라이언트와의 통신을 환경을 설정하는 파일입니다.

 - 오라클 서버에 존재하며, 오라클 클라이언트에서 서버로 접속할 때 필요한 프로토콜 및 포트정보등을 설정하는 파일 입니다.

 - 프로토콜은 주로 TCP/IP가 많이 사용됩니다.
 
 
◈ tnsnames.ora

 - 오라클 Client측에서 오라클 서버로 접속할때 필요한 프로토콜 및 포트번호, 서버주소, 인스턴스등을 설정해주는  파일로서 클라이언트에 위치 합니다.
 
 
*  참고
 - listener.ora와 tnsnames.ora파일의 위치는 ORACLE_HOME/network/ADMIN/에 존재 합니다.
 - linstener.ora와 tnsnames.ora는 둘다 오라클 설치시 Net8 configuration 작업을 해주면 생성이 됩니다.

  참고 사이트

  ================================================
    * 오라클 정보공유 커뮤니티 oracleclub.com
    * http://www.oracleclub.com
    * http://www.oramaster.net
    * 강좌 작성자 : 김정식 (oramaster _at_ naver.com)
  ================================================