오라클 리스너 설치 - olakeul liseuneo seolchi

상황 : 컴퓨터를 포맷하고 이전에 돌리던 프로젝트를 새로운 환경으로 옮겨와 돌리는데 상품보기 화면에서 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)
  ================================================

Oracle 네트워크 통신 방법

오라클 리스너 설치 - olakeul liseuneo seolchi

 외부에서 Oracle서버를 통신하기 위해서는 Listener를 통해 통신을 하게됩니다. Listener가 해주는 작업은 Connection을 만들어주는 것 입니다. 서버 구성 방식에따라 조금 다르지만 기본 Dedicated Server에서 Connection이란 User Process와 Server Process를 연결해주는 것입니다. 즉, 한번 인증 된 외부사용자가 Oracle Database에서의 작업을 지정된 Server Process를 통해 할 수 있도록 연결해줍니다. 최초의 한번 Connection작업을 통해 세션을 생셩해줍니다.

 

 

오라클 리스너 설치 - olakeul liseuneo seolchi

Database와의 통신 구조를 봤을때 직접 데이터베이스로 통신하는 2 Tier 방식이 있고, 대부분 사용되는 방식으로 App를 한번 걸쳐 통신하는 방식인 3 Tier가 있습니다.

2 Tier

직접 Database에 붙는 구조 입니다. 쉽게 이해하자면 Sqlplus를 이용해서 터미널에 명령을 직접 작업하는 것입니다.

 

3 Tier

명령을 직접 사용하지 않고 쉽게 사용하기 위한 Application을 통해 Database와 통신합니다. 우리가 웹사이트에서 회원가입을 하고 가입 버튼을 눌렀을때 해당 정보가 Database에 저장되듯이 명령을 모르더라도 Application이 Database와 통신작업을 해줍니다.

 

 

Listener 구성

Oracle은 이러한 외부 통신을 Listener를 통해서 진행하고 $ORACLE_HOME/network/admin/listener.ora라는 파일을 통해 관리가 됩니다. Listener를 구성하기 전에 먼저 기존에 있는 Listener 정보를 삭제하고 listner의 상태를 확인해보겠습니다.

 

실습 준비

OS : OEL 5.4
DB : Oracle 12.1.0.2
SID: newdb, PROD(1개 서버안 2개 데이터베이스)
hostname : host01
[newdb@host01 ~]$ cd $ORACLE_HOME/network/admin
[newdb@host01 admin]$ ls
listener.ora  samples  shrept.lst  sqlnet.ora  tnsnames.ora
[newdb@host01 admin]$ rm *
rm: cannot remove `samples': Is a directory
[newdb@host01 admin]$ ls
samples
[newdb@host01 admin]$ lsnrctl status

LSNRCTL for Linux: Version 12.1.0.2.0 - Production on 09-JUL-2020 14:52:19

Copyright (c) 1991, 2014, Oracle.  All rights reserved.

Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
TNS-12541: TNS:no listener
 TNS-12560: TNS:protocol adapter error
  TNS-00511: No listener
   Linux Error: 111: Connection refused

listener.ora 파일만 지워도 되지만 앞으로의 실습을 위해 해당 경로의 모든 파일을 지우고 진행했습니다. lsnrctl 명령을 사용해서 listener정보가 없다면 실습 준비는 완료된 것 입니다.

 

1. Oracle Net Manager 사용

목표
-LISTENER1 이름의 리스너를 구축
-newdb 등록
-PROD 등록
-13000 포트 사용
[newdb@host01 admin]$ netmgr

netmgr 명령을 사용해서 Oracle Net Manager 실행합니다.

오라클 리스너 설치 - olakeul liseuneo seolchi

GUI 모드에서 실행가능합니다. Local에 "+" 기호를 클릭합니다.

 

오라클 리스너 설치 - olakeul liseuneo seolchi

리스너의 이름을 LISTENER1으로 지정합니다.

 

 

오라클 리스너 설치 - olakeul liseuneo seolchi

상단에 Select box에서 Listening Location을 선택하고 정보를 입력합니다. 포트는 13000으로 지정하고 Host에 IP 혹은 OS에 등록된 host명 혹은 도메인명으로도 입력 가능합니다.

 

newdb@host01 admin]$ vi /etc/hosts
오라클 리스너 설치 - olakeul liseuneo seolchi

Host명과 관련된 내용은 위 경로에서 확인 가능합니다. 해당 서버는 host01이라는 host명칭으로 지정되어 있습니다.

 

 

오라클 리스너 설치 - olakeul liseuneo seolchi

상단 Selectbox에서 Database Services로 변경합니다. 해당 정보들을 확인하고 입력하고 newdb의 정보를 입력해줍니다. Oracle Home Directory는 이미 환경변수로 지정되어 있어 경로에 대한 정보가 미리 입력되어져 있습니다.

 

오라클 리스너 설치 - olakeul liseuneo seolchi

Add Database 버튼을 클릭하여 이번에는 PROD에 대한 정보를 입력해줍니다. 이제 필요한 정보를 모두 입력했으니 좌측 상단에 File - Save Network Configuration을 클릭 하여 저장해줍니다.

 

[newdb@host01 ~]$ cd $ORACLE_HOME/network/admin
[newdb@host01 admin]$ ls
listener.ora  samples
[newdb@host01 admin]$ vi listener.ora
오라클 리스너 설치 - olakeul liseuneo seolchi

설정 작업을 끝났으니 listener.ora파일을 확인하여 입력한 정보가 있는지 확인해주고 listener를 실행해보겠습니다.

 

[newdb@host01 ~]$ lsnrctl start listener1

리스너 실행 명령은 lsnrctl start <리스너명> 형식으로 실행가능합니다. 리스너명을 제외하면 default 리스너인 LISTENER라는 명칭의 리스너를 실행하게 됩니다. default 리스너에 대한 설명은 추후 다른 글에서 진행하겠습니다.

오라클 리스너 설치 - olakeul liseuneo seolchi

실습대로 listener1이라는 이름으로 포트 13000번 PROD와 newdb에 대한 instance정보가 등록되었습니다. 해당 status가 UNKNOWN으로 뜨는 것은 정적등록을 했기 때문입니다. 추후 다른 글에서 다루겠습니다.

 

 

2.  Oracle Net Configuration Assistant 사용

Oracle Net Manager과는 다르게 Instance등록을 할 수 없습니다.

목표
-LISTENER2 이름의 리스너를 구축
-13010 포트 사용
[oracle@host01 ~]$ netca
오라클 리스너 설치 - olakeul liseuneo seolchi

Listener configuration 체크합니다.

 

오라클 리스너 설치 - olakeul liseuneo seolchi

리스너 추가 작업을 위해 Add 체크

 

오라클 리스너 설치 - olakeul liseuneo seolchi

LISTENER2라는 명칭으로 리스너를 생성합니다.

 

오라클 리스너 설치 - olakeul liseuneo seolchi

TCP 프로토콜을 사용합니다.

 

오라클 리스너 설치 - olakeul liseuneo seolchi

포트는 13010번으로 지정합니다.

 

오라클 리스너 설치 - olakeul liseuneo seolchi

리스너는 더이상 추가하지 않을 것 이기 때문에 NO.

 

오라클 리스너 설치 - olakeul liseuneo seolchi

LISTENER2를 바로 실행합니다.

 

오라클 리스너 설치 - olakeul liseuneo seolchi

설정이 완료되었습니다. 이제 listener.ora 파일을 확인해보겠습니다.

 

[newdb@host01 ~]$ cd $ORACLE_HOME/network/admin
[newdb@host01 admin]$ vi listener.ora
오라클 리스너 설치 - olakeul liseuneo seolchi

 LISTENER2에 대한 정보가 등록된 것을 확인할 수 있습니다. SID_LIST_LISTENER1의 정보처럼 리스너에 등록하는 서비스를 기재해주는 것이 정적 등록입니다.

 

[newdb@host01 admin]$ lsnrctl status listener2
오라클 리스너 설치 - olakeul liseuneo seolchi

리스너에 대한 상태를 확인해보지만 등록된 서비스가 없기 때문에 서비스에 대한 정보는 나오지 않습니다. 아무런 서비스도 등록하지 않고 리스너만 생성된다면 아무런 필요가 없는 리스너가 됩니다. 하지만, 이렇게 서비스를 등록하지 않은 리스너에게도 서비스를 자동으로 등록하는 동적 등록 방법이 있습니다. 동적 등록은 아래 링크를 통해 진행하겠습니다.

 

[Oracle] Listener 동적 등록. UNKNOWN과 READY의 차이

Oracle Listener 동적 등록 실습환경 OS : Red Hat Enterprise Linux Server release 6.10 DB : Oracle 11.2.0.1 SID: newdb, PROD(1개 서버안 2개 데이터베이스) hostname : 601d2fce71dc Oracle Listener를 등..