본문 바로가기
Oracle

11g 리스너 변경

by 캡틴노랑이 2015. 7. 29.
반응형

Oracle 11g LISTENER

OS: Windows Server 2008

DB: Oracle 11g

Network: Private Network (Public IP 공유기 사용)

 

ㅁ 특정포트로 리스너를 세팅 후 Database 연결

 

* 시나리오 환경

-  전역 데이터 베이스 명으로 'dbnet.XXX.com'

- 데이터 베이스 SID : dbnet

- Private IP : 10.0.0.4

- 리스너명 :  LISTENR_DBNET

- 리스너포트: 1550 (default 1521를 사용하지 않음)

 

A. 리스너 생성

1. Oracle Net Manager 실행

2. 리스너를 선택 후 [+] 버튼으로 리스너생성

3. [수신위치] 에 탭에 호스트 및 포트 지정 

* 서비스 이름 지정의  dbnet은 Database 생성하기 전에 나타나 있지 않음

* 기존에 Database가 생성되어 있을 시 [+] 버튼을 눌러 추가 시킬 수 있음

 

B. Database 생성

1.[Database Configuration Asistant]를 실행하여 전역데이터베이스 이름, SID 등을 넣고 Database 생성

 

2. 데이버테이스 비밀번호는 대문자+소문자+숫자 의 조합으로 8자리 이상으로 구성해야 함

3.  LISTENER_DBNET 선택 (A.단계에서 생성한 리스너 명 선택)

* [모든 리스너로 해당 데이터베이스 등록] 선택하면 모든 리스너로 부터 수신가능하게됨

* 시나리오는 특정 리스너로만 데이터베이스를 수신하고자 함

 

C. 서비스 이름 지정 확인 및 리스너에 수신 DB 추가

1. 정상적으로 DB가 생성되면 Oracle Net Manager 의 서비스 이름 지정 항목에 dbnet

이 생성됨 - 주소에 해당 리스너 포트가 등록되어 있는지 확인

[서비스 이름 지정] 항목은 'tnsnames.ora' 파일에 해당

DBNET =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.0.0.4)(PORT = 1550))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = dbnet.XXX.com)
)
)

 

2. LISTENER_DBNET 을 선택 후 [데이터베이스 서비스] 에 dbnet 추가

..전역 데이터베이스 이름(dbnet.XXX.com),Oracle 홈 디렉토리, SID 등을 입력

[리스너] 항목은 'listener.ora' 파일에 해당)

ex) listener.ora

SID_LIST_LISTENER_DBNET =
(SID_DESC =
(GLOBAL_DBNAME = dbnet.XXX.com)
(ORACLE_HOME = D:\app\Administrator\product\11.2.0\dbhome_3)
(SID_NAME = dbnet)
)
)

 

 

LISTENER_DBNET =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.0.0.4)(PORT = 1550))
)
)

 

ADR_BASE_LISTENER_DBNET = D:\app\Administrator\product\11.2.0\dbhome_3\log

 

D. 서비스 및 기동여부 확인

1. [윈도우]-[관리도구]-[서비스] 에서 해당 리스너 서비스 기동 여부 확인

 .. 서비스명에 리스너 이름이 보임

 

2. tnsping / sqlplus 접속 확인 -명령프롬프트([실행]-[cmd]입력)

> tnsping [서비스명]

 

>sqlplus [유저]/[패스워드]@[서비스명]

 

E. 방화벽 및 외부접속 확인

1. [윈도우]-[제어판]-[Windows 방화벽]을 실행 후 [설정변경]에서 [예외]에

1550 포트 추가 

 

2. 외부에서 연결 할 경우 공유기등에서 포트포워드로 사설IP에 연결되도록 세팅 

 

F. Oracle Client 에서 연결

1. 해당 Port가 열려 있는지 telnet등으로 Port를 체크

   >telnet [host] [port]

  * telnet 이 실행안되는 경우는

   [제어판]-[프로그램 및 기능]-[Windows 기능 사용/사용 안함]-[기능]

   에서 [기능 추가] 중 [Telnet 클라이언트]를 선택 해주면 됨(ex.Windows2008 Server) 

2. Oracle Net Configuration Asistant 실행

3. [로컬 네트 서비스 이름 구성] 선택

4. [추가] 를 하여 서비스 이름 입력 (dbnet.XXX.com) - 전역 데이터베이스 이름 

 

5. [TCP] 선택 후 1550 포트와 호스트 입력 

 

* Listener 생성 순서는 크게 상관이 없다. 리스너를 만들고 나서 DB를 생성하고 진행할

 수도 있고 데이터베이스 생성 후 리스너를 추가하여 진행 할 수도 있고 기존 DB를 위해

 리스너를 만들고 [서비스 이름 지정]을 추가하여 작업하여도 무방하다.

 대신 리스너를 먼저 만들고 DB 생성시 지정을 해주면 [윈도우 메뉴]-[관리도구]-[서비스]

 에 자동으로 등록되어 진다. 그렇지 않은 경우에는

 >lsnrctl start LISTENER_DBNET 

 과 같이 실행해야만 [윈도우 메뉴]-[관리도구]-[서비스] 에 나타나 기동된다.

 

* Listener 를 추가로 생성할 경우 [리스너] 항목 에서는 [데이터베이스] 항목 입력과

  [서비스 이름 지정]에서는  [주소 구성] 항목에 추가된 Listener의 주소를 추가해 준다

  ex) 1600 Port 리스너(LISTENER_1600) 추가후 서비스에 해당 주소 추가 

tnsnames.ora 파일에

ADDRESS_LIST 항목이 추가되면서 1600포트에 대한 ADDRESS 부분이 추가됨

DBNET =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 10.0.0.4)(PORT = 1550))
      (ADDRESS = (PROTOCOL = TCP)(HOST = 10.0.0.4)(PORT = 1600))
    )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = dbnet.XXX.com)
    )
  )

 

 

ㅁ LSNRCTL 사용

1. 리스너 정보/상태

> lsnrctl 

LSNRCTL> set current_listener [리스너명] 

* 여러개의 Listener가 존재 할시 특정 Listener 지정

 

LSNRCTL> status

LSNRCTL> services

* >lsnrctl service [리스너명] 등 으로 사용해도 됨 

 

LSNRCTL>show

LSNRCTL>show oracle_home -- oracle 홈 디렉토리

LSNRCTL>set log_status off  -- log 정지

LSNRCTL>set log_status on  -- log 작동

 

2. 리스너 재가동

>lsnrctl stop listener_dbnet

>lsnrctl start listener_dbnet

 

ㅁ etc.

LISTENER_DBNET 리스너에 수신주소(Port 1600) 추가시 listener.ora파일 변경예

추가 전

LISTENER_DBNET =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 10.0.0.4)(PORT = 1550))
  )

추가 후

LISTENER_DBNET =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 10.0.0.4)(PORT = 1522))
    )
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 10.0.0.4)(PORT = 1600))
    )
  )

 

LISTENER_DBNET 리스너에 데이터베이스(icocoa) 추가시 listener.ora파일 변경예

추가 전

SID_LIST_LISTENER_DBNET =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = dbnet.XXX.com)
      (ORACLE_HOME = D:\app\Administrator\product\11.2.0\dbhome_3)
      (SID_NAME = dbnet)
    )
  )
추가 후

SID_LIST_LISTENER_DBNET =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = dbnet.XXX.com)
      (ORACLE_HOME = D:\app\Administrator\product\11.2.0\dbhome_3)
      (SID_NAME = dbnet)
    )

    (SID_DESC =

      (GLOBAL_DBNAME = icocoa)
      (ORACLE_HOME = D:\app\Administrator\product\11.2.0\dbhome_3)
      (SID_NAME = icocoa)
    )
  ) 

 

* 새로운 리스너를 추가하여 포트를 할당 받아 Protocol 이 틀린 사설 IP DB와 연결할

 경우 오라클 설치 시 Oracle Connection Manager도 함께 설치해서 세팅

Oracle Net Services 11.2.0.1.0 -> Oracle Connection Manager 11.2.0.1.0

 

* ORA-12170: TNS 접속 시간 초과가 발생함

>> 윈도우 방화벽 확인

>> 공유기 또는 해당 네트워크의 방화벽 세팅 확인

>> 오라클 설치 폴더의 tnsnames.ora / listener.ora 파일의 ip정보가 'localhost'(127.0.0.1') 로 되어 있을 경우 서버의 IP로 바꿔줌 (host 파일, 도메인 IP등 확인)

ex)[오라클 설치폴더]  D:\app\Administrator\product\11.2.0\dbhome_3\NETWORK\ADMIN

 

* ORA-12514: TNS 리스너가 현재 접속 기술자에 요청된 서비스를 알지 못함

오류 문제: 대부분이 tnsnames.ora/listener.ora 파일의 정보가 맞지 않아

리스너가 제대로 동작하지 못하는 현상임

 

>> tnsnames.ora / listener.ora 파일의 정보 확인 IP/ServiceName 등등

 

>>리스너에 데이터 베이스 항목이 비어있을 경우 [oracle Net Manager] 실행하여 해당

 [리스너] 선택 후 [데이터베이스] 항목을 추가한 후 리스너를 재가동

 

>> 접속에 계속 문제가 발생할 경우

서비스 이름지정에서 'Oracle8릴리스 8.0 호환 ID 사용' 을 선택하고 SID에 'DBNET'을 입력한 후

 

LISTENER_DBNET 의 전역 데이터베이스 이름을 'dbnet'으로 변경 한후 서버 및 리스너 재기동 후 테스트

* ORA-12541: TNS 리스너가 없습니다.

>> 데이터베이스를 생성 후 리스너 구성을 제대로 하지 않아 발생할수있음 - 리스너 구성 및 테스트 해줄것

>> 리스너 log(listener.log 파일)가 4기가 초과에도 발생 할 수 있음

ex) D:\app\Administrator\diag\tnslsnr\호스트\listener\trace\listener.log

LSNRCTL>set log_status off    (log 정지)

LSNRCTL>set log_status on    (log 작동)

또는

listener.ora 파일에 파라미터에 추가 후 리스너 재가동

LOGGING_LISTENER_DBNET = OFF

* LOGGING_[리스너명] = OFF

* [Oracle Net Manager] 실행 후 [리스너]에서 해당 리스너를 선택 한 후 우측

[일반 매개변수]를 선택하여 [로깅 및 추적]탭에서 [로깅이 사용으로 설정됨]을 체크해제하면 됨

 

tnsnames.ora / listener.ora 파일을 메모장 등에서 수정할 수도 있지만

[oracle Net Manager] 프로그램에서 수정 후 저장 시키면서 비교해 보면 도움 됨

반응형

'Oracle' 카테고리의 다른 글

[Query] JOIN  (0) 2015.07.29
계정만료  (0) 2015.07.29
[CMD] 명령어  (0) 2015.07.29
[윈도우 함수] ratio_to_report로 특정 비율 구하기  (0) 2015.07.29
[윈도우 함수] LAG 바로 이전 쿼리의 특정 열의 값을 가져옴  (0) 2015.07.29

댓글