행위

오라클 Listener (리스너)

DB CAFE

thumb_up 추천메뉴 바로가기


목차

1 Listener 리스너[편집]

1.1 오라클 리스너 (Listener) 란?[편집]

android * 네트워크를 이용하여 클라이언트에서 오라클 서버로 연결하기 위한 오라클 네트워크 관리자

  • 오라클에서 네트워크를 통한 모든 연결은 리스너가 담당
  • 클라이언트에 오라클 NET8 이 설치되어 있고 이를 통해 오라클 서비스명(TNS)을 만들어 접속
  • 오라클 서버에 리스너가 실행되고 있어야 클라이언트들이 접속할 수 있음.
  • RAC 환경에서의 리스너는 환경이 다르므로 아래의 RAC 리스너 항목을 보기 바란다.


1.2 리스너 아키텍처[편집]

img.gif

  • 리스너 설정 파일 위치 :
$ORACLE_HOME/network/admin/listener.ora

1.2.1 리스너 시작 lsnrctl start[편집]

$ lsnrctl start [리스너명]
  • 주의) 리스너명 제외시 default 리스너인 LISTENER라는 명칭의 리스너 실행 됨.

1.2.2 리스너 정지 lsnrctl stop[편집]

# 리스너명 확인 하려면 ps -ef|grep LIST 명령어로 찾기
$ lsnrctl stop [리스너명]


1.2.3 리스너 reload[편집]

$ lsnrctl reload  [리스너명]

1.2.4 리스너 상태 lsnrctl status[편집]

$ lsnrctl status [리스너명]

1.2.5 리스너 서비스 조회 lsnrctl services[편집]

$ lsnrctl services [리스너명]

1.2.6 리스너 등록 방법[편집]

1.2.6.1 정적등록 VS 동적 등록[편집]

android 정적 등록과 동적 등록의 가장 큰 차이는 Oracle Instance가 리스너를 자동으로 인식 하느냐 못하느냐의 차이.

  1. 정적 등록은 listener.ora파일에 직접 서비스를 등록해주는 것.
  2. 동적 등록은 PMON이라는 프로세스가 LREG프로세스를 통해 리스너에 등록 가능한 서비스를 자동으로 등록해주는 것.


1. $ORACLE_HOME/network/admin/listener.ora 파일 내용 확인

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

LISTENER1 =
 (DESCRIPTION =
  (ADDRESS = (PROTOCOL = TCP)(HOST = 11.22.33.44)(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)
  )
 )

2. 2개의 리스너를 실행시키고 상태 확인.

$ lsnrctl start  #디폴트 리스너 (LISTENER) 시작 
$ lsnrctl start listener1 # listener1 리스너 시작

3.리스너 상태 확인

서비스 상태가 READY 확인됨
  • ser 은 ser[vices] 줄여서 사용가능
$lsnrctl ser

4.listener1 리스너만 확인

$ lsnrctl ser listener1
서비스 상태가 UNKNOWN 확인됨
  • UNKNOWN VS READY

우선 listener.ora파일에 등록되어 있는 정보를 확인해보면

1) LISTENER 리스너는 LISTENER1 리스너와 다르게 서비스를 등록하지도 않았는데 서버스의 상태가 보여지는 것을 확인.

2) 바로 동적 등록과 정적 등록의 표시를 UNKNOWN과 READY로 한것.

3) UNKNOWN이라고해서 작동이 안하거나 그런 것이 아니고 단지 구분을 위한 표시일 뿐.

1.2.6.1.1 동적 등록[편집]

동적 등록은 PMON 프로세스가 LREG라는 프로세스를 통해 자동으로 리스너에 서비스를 등록.

서비스를 어떤 리스너에 등록해줘야할지는 local_listener 파라미터를 통해 관리 됨.

1. 로컬 리스너 파라미터 확인

SQL> show parameter local_listener

local_listener의 default 값은 "". 즉,디폴트 "LISTENER" 라는 이름의 리스너에 동적 등록하겠다는 의미.

newdb말고 PROD SID를 사용하는 데이터베이스도 기본 local_listener값을 사용하고 있어

LISTENER 리스너의 서비스 상태를 봤을때 listener.ora 파일에 서비스를 등록하지 않았어도

동적 서비스 정보가 있었고 READY로 표시.

반면, LISTENER1의 경우 직접 listener.ora 파일에 SID_LIST에 기재하여 정적 등록.

1.2.6.2 local_listener의 파라미터를 변경해서 LISTENER1에 동적 등록[편집]

SQL> alter system set local_listener='(description=(address=(protocol=tcp)(host=11.22.33.44)(port=1522)))';
  • 확인
$ lsnrctl ser listener1

LISTENER1 리스너의 서비스를 확인해보니 newdb가 READY로 되어있는 서비스 하나 더 생성됨을 확인.

정적등록과 동적 등록은 별개로 서비스에 모두 등록 가능.

  • 여러개의 동적 등록
SQL> alter system set local_listener=
'(description=(address=(protocol=tcp)(host=11.22.33.44)(port=1522)))'
,'(description=(address=(protocol=tcp)(host=11.22.33.44)(port=1521)))';
  • 확인
$>lsnrctl ser

1.3 리스너 로그 위치[편집]

  • 10g 이하 $ORACLE_HOME/network/log 디렉토리
  • 11g 이상 $ORACLE_BASE/diag/tnslsnr/'hostname'/listener/trace

1.3.1 리스너 로그 확인[편집]

[oracle@ora ~]$ lsnrctl status
.. 중략 ...
Listener Parameter File   /app/oracle/product/12.2.0/db_1/network/admin/listener.ora
Listener Log File         /app/oracle/diag/tnslsnr/ora/listener/alert/log.xml
...
  1. lsnrctl [명령어] 실행
$ lsnrctl

-- 1.구성된 리스너명이 Listener 가 아닌 경우, 지정
lsnrctl> set current_listener <리스너명> 

-- 2.listener.log 파일에 로그 기록 정지 
lsnrctl> set log_status off

-- 3.삭제, 백업 작업
-- listener.log 파일에 로그 기록.
lsnrctl> set log_status on
  • set log_status off 로 변경하고, 파일 제거 또는 백업하고 listener.log 파일 생성 (생성하지 않아도 자동 생성)
  • 11g 이상에서는 $ORACLE_BASE/diag/tnslsnr/'hostname'/listener/alert 에 log_xxxx.xml파일도 생기는데

이 로그는 ADRCI 용 로그임.

1.3.2 adrci로 리스너 로그 확인[편집]

1. adrci 실행

$ adrci -- 실행

2. adrci 에서 “show alert” 실행

adrci> show alert -- alrt log 목록조회 
 
Choose the home from which to view the alert log:
 
1: diag/rdbms/orcl19/ORCL19
2: diag/rdbms/orcl19t/ORCL19T
3: diag/asm/+asm/+ASM
4: diag/crs/oracle19/crs
5: diag/clients/user_oracle/host_3087630407_110
6: diag/tnslsnr/ORACLE19/listener
7: diag/asmtool/user_oracle/host_3087630407_110
8: diag/asmcmd/user_oracle/ORACLE19
9: diag/kfod/oracle19/kfod
Q: to quit

3. 해당 숫자 선택 후 엔터

6 (위 목록에서 6: diag/tnslsnr/ORACLE19/listener )

4. 확인 후 종료는 q 입력

Please select option: q

1.3.3 로그백업 관리[편집]

  • 주기적으로 파일을 묶어서 백업해두는식으로 관리한다.


-- 1. 로그 경로로 이동
$ cd $ORACLE_BASE/diag/tnslsnr/'hostname'/listener/alert
$ ls
log_1801.xml
log_1802.xml
.... 중략 ...

-- 2. 로그 백업용 폴더 생성
$ mkdir -p log_backup

-- 3.백업용 폴더로 일부 로그 이동
$ mv log_18* log_backup

# 백업용 폴더 압축
$ tar -cvf - log_18*.* |gzip > log_18_backup.gzip

1.3.4 mtime 옵션 사용 백업[편집]

-- 1. 로그 백업용 폴더 생성
$ mkdir -p log_20180520

-- 2. 백업용 폴더로 일부 로그 이동(30일 지난 파일 이동)
$ find . -name "*.xml" -mtime +30 -exec mv {} /oracle/diag/tnslsnr/orcl/listener/alert/log_20180520/ \;

-- 3. 백업용 폴더 압축
$ tar -zcvf log_20180520 log_20180520

1.3.5 trace 로그 대용량시 처리[편집]

  • $ORACLE_BASE/diag/tnslsnr/'hostname'/listener/trace 에 로그가 용량이 커졌을 때
-- 1. 리스너 로그 이름 변경
$ cp -av listener.log listener.log.20180520

-- 2. /dev/null 을 리스너 로그에 덮어씌우기(이전로그 초기화)
cp /dev/null listener.log

-- 3. 이름 변경한 리스너 로그 압축
$ gzip listener.log.20180520

2 RAC 리스너 설정[편집]

android (중요) RAC 환경에서는 리스너를 grid가 서비스로 관리하기때문에 srvctl 명령으로 관리를 해주어야 함

  • $GRID_HOME 의 리스너를 실행 해야함 ($ORACLE_HOME의 리스너를 실행하면 에러 발생(Not All Endpoints Registered))
  • $ORACLE_HOME/network/admin/listener.ora 파일에 추가하는 방식과는 다른 방식 임.


2.1 리스너 상태 조회[편집]

  • grid 계정으로 확인 할것(oralce 계정이 아님)
srvctl status listener
-- or
lsnrctl status

2.1.1 RAC 환경에서 리스너 에러 발생시 확인 사항[편집]

  • export 명령으로 ORACLE_HOME을 $GRID_HOME으로 변경해준다.(RAC는 $GRID_HOME을 사용함을 명심할것)
export ORACLE_HOME=$GRID_HOME
  • ORACLE_HOME 의 리스너를 실행할 경우, CRS 에서 아래와 같은 상황이 생김
crsctl stat res -t

--------------------------------------------------------------------------------------------------------
NAME TARGET STATE SERVER STATE_DETAILS Local Resources --------------------------------------------------------------------------------------------------------- ora.DATA.dg
ONLINE ONLINE rac1
ONLINE ONLINE rac2 ora.FRA.dg
ONLINE ONLINE rac1
ONLINE ONLINE rac2 ora.LISTENER.lsnr
ONLINE INTERMEDIATE rac1
ONLINE ONLINE rac2 Not All Endpoints Registered.   <== 에러 발생 
.... 생략 ....

2.1.1.1 RAC 환경에서 리스너 오류시 리스너 재시작 순서[편집]

  • 위와 같이 꼬였을 경우, 아래의 순서대로 리스너를 재시작 할것.

1. $ORACLE_HOME에 설정된 기존 리스너 멈추기

$/bin/lsnrctl stop

2. $GRID_HOME에 설정된 리스너 멈추기

$/bin/srvctl stop listener -n node_name
$/bin/srvctl stop scan_listener -i scan#

3. $GRID_HOME에 있는 LISTENER 와 LISTENER_SCAN1 재시작

$/bin/srvctl start listener -n node_name $/bin/srvctl start scan_listener -i scan#

4. crsctl stat res -t 명령으로 확인 (둘다 ONLINE 인지 확인)

crsctl stat res -t

2.1.2 리스너 확인[편집]

LSNRCTL for IBM/AIX RISC System/6000: Version 12.2.0.1.0 - Production on 22-OCT-2019 17:20:27

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

Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for IBM/AIX RISC System/6000: Version 12.2.0.1.0 - Production
Start Date                09-SEP-2019 19:55:51
Uptime                    42 days 21 hr. 24 min. 36 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /oracle/12.2.0/gi_home/network/admin/listener.ora
Listener Log File         /oracle/app/grid/diag/tnslsnr/xxxx/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=11.22.33.44)(PORT=1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=11.22.33.55)(PORT=1521)))
Services Summary...
Service "+ASM" has 1 instance(s).
  Instance "+ASM2", status READY, has 1 handler(s) for this service...
Service "+ASM_CRS" has 1 instance(s).
  Instance "+ASM2", status READY, has 1 handler(s) for this service...
Service "+ASM_DATA" has 1 instance(s).
  Instance "+ASM2", status READY, has 1 handler(s) for this service...
Service "+ASM_MGMT" has 1 instance(s).
  Instance "+ASM2", status READY, has 1 handler(s) for this service...
Service "+ASM_RECO" has 1 instance(s).
  Instance "+ASM2", status READY, has 1 handler(s) for this service...
Service "XXX" has 1 instance(s).
  Instance "XXX2", status READY, has 1 handler(s) for this service...
Service "XXXDB" has 1 instance(s).
  Instance "XXX2", status READY, has 1 handler(s) for this service...
Service "AAA" has 1 instance(s).
  Instance "AAA2", status READY, has 1 handler(s) for this service...
Service "XXXX" has 1 instance(s).
  Instance "XXXX2", status READY, has 1 handler(s) for this service...
The command completed successfully

2.2 리스너 추가[편집]

  • (기존에 LISTENER 가 존재 하고 신규로 LISTENER2를 추가하는 시나리오)

2.2.1 리스너 신규 추가하기[편집]

- 리스너명은 LISTENER2, 포트는 1571로 리스너를 추가합니다.

srvctl add listener -l LISTENER2 -p 1571

2.2.2 crsctl로 상태 확인 및 시작하기[편집]

  • crsctl 명령어로 확인 하는 방법
crsctl stat res -t
--------------------------------------------------------------------------------
NAME           TARGET  STATE        SERVER                   STATE_DETAILS
--------------------------------------------------------------------------------
Local Resources
--------------------------------------------------------------------------------
ora.LISTENER.lsnr
               ONLINE  ONLINE       rac1
ora.LISTENER2.lsnr
               OFFLINE OFFLINE      rac1
  • srvctl 명령어로 확인 하는 방법
srvctl status listener


  • LISTENER2 리스너 시작하기
srvctl start listener -l LISTENER2

2.2.3 리스너 Port 확인[편집]

netstat -an | grep 1571

tcp        0      0 192.168.80.163:1571         0.0.0.0:*                   LISTEN
tcp        0      0 192.168.80.161:1571         0.0.0.0:*                   LISTEN
crsctl stat res -t
srvctl status listener
--------------------------------------------------------------------------------
NAME           TARGET  STATE        SERVER                   STATE_DETAILS
--------------------------------------------------------------------------------
Local Resources
--------------------------------------------------------------------------------
ora.LISTENER.lsnr               ONLINE  ONLINE       rac1
ora.LISTENER2.lsnr              ONLINE  ONLINE       rac1

2.2.3.1 lsnrctl로 상태 확인하기[편집]

lsnrctl status
LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 06-AUG-2015 15:30:51
Copyright (c) 1991, 2013, Oracle.  All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 11.2.0.4.0 - Production
Start Date                06-AUG-2015 14:31:57
Uptime                    0 days 0 hr. 58 min. 54 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /u01/app/grid/11.2.0/grid/network/admin/listener.ora
Listener Log File         /u01/app/grid/base/diag/tnslsnr/rac1/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.80.161)(PORT=1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.80.163)(PORT=1521)))
Services Summary...
Service "+ASM" has 1 instance(s).
  Instance "+ASM1", status READY, has 1 handler(s) for this service...
Service "racdb" has 1 instance(s).
  Instance "racdb1", status READY, has 1 handler(s) for this service...
Service "racdbXDB" has 1 instance(s).
  Instance "racdb1", status READY, has 1 handler(s) for this service...
The command completed successfully

lsnrctl status LISTENER2
LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 06-AUG-2015 15:30:59

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

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER2)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER2
Version                   TNSLSNR for Linux: Version 11.2.0.4.0 - Production
Start Date                06-AUG-2015 15:30:37
Uptime                    0 days 0 hr. 0 min. 22 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /u01/app/grid/11.2.0/grid/network/admin/listener.ora
Listener Log File         /u01/app/grid/11.2.0/grid/log/diag/tnslsnr/rac1/listener2/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER2)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.80.161)(PORT=1555)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.80.163)(PORT=1555)))
The listener supports no services
The command completed successfully

2.3 리스너 삭제[편집]

1. 리스너 삭제하기

- 리스너명 LISTENER2를 삭제합니다.

srvctl remove listener -l LISTENER2

2.4 리스너 포트 변경 방법[편집]

1. 리스너 포트 변경하기 - 리스너명 LISTENER2의 포트를 1621로 변경합니다.

1) 리스너 중지

srvctl stop listener -l LISTENER2 -n rac1

2) 리스너 포트 변경

srvctl modify listener -l LISTENER2 -p 1621

3) 리스너 시작

srvctl start listener -l LISTENER2 -n rac1

4) 상태 확인

crsctl stat res -t
--------------------------------------------------------------------------------
NAME           TARGET  STATE        SERVER                   STATE_DETAILS
--------------------------------------------------------------------------------
Local Resources
--------------------------------------------------------------------------------
ora.LISTENER.lsnr               ONLINE  ONLINE       rac1
ora.LISTENER2.lsnr              ONLINE  ONLINE       rac1
​netstat -an | grep 1621
tcp        0      0 11.22.33.44:1621         0.0.0.0:*                   LISTEN
tcp        0      0 11.22.33.55:1621         0.0.0.0:*                   LISTEN
lsnrctl status listener2
LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 06-AUG-2015 16:12:16

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

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER2)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER2
Version                   TNSLSNR for Linux: Version 11.2.0.4.0 - Production
Start Date                06-AUG-2015 16:11:40
Uptime                    0 days 0 hr. 0 min. 36 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /u01/app/grid/11.2.0/grid/network/admin/listener.ora
Listener Log File         /u01/app/grid/11.2.0/grid/log/diag/tnslsnr/rac1/listener2/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER2)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.80.161)(PORT=1621)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.80.163)(PORT=1621)))
The listener supports no services
The command completed successfully

2.5 파라미터 변경[편집]

SQL> show parameter local_listener;
SQL> alter system set local_listener='(ADDRESS=(PROTOCOL=TCP)(HOST=10.10.22.33)(PORT=2222))' scope=both;

2.6 client에서 접속하기[편집]

  • 12C RAC 환경 FAILOVER 접속용 TNS

1. tnsnames.ora 정보

IDC_XXX = 
 (DESCRIPTION =
    (LOAD_BALANCE = ON)
    (FAILOVER=ON)
    (ADDRESS_LIST = 
      (ADDRESS = (PROTOCOL = TCP)(HOST = 11.22.33.44)(PORT = 1561))
      (ADDRESS = (PROTOCOL = TCP)(HOST = 11.22.33.55)(PORT = 1561))
    )
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 11.22.33.55)(PORT = 1561))
      (ADDRESS = (PROTOCOL = TCP)(HOST = 11.22.33.44)(PORT = 1561))
    )    
    (CONNECT_DATA = 
      (SERVICE_NAME = XXX)
      (FAILOVER_MODE = (TYPE = SELECT)(METHOD = BASIC)(RETRIES = 3)(DELAY = 30))
    )
  )

2. 더 간단하게

IDC_XXX =
(description=
   (address_list= (failover=yes)(load_balance=yes)
      (ADDRESS = (PROTOCOL = TCP)(HOST = 11.22.33.44)(PORT = 1561))
      (ADDRESS = (PROTOCOL = TCP)(HOST = 11.22.33.55)(PORT = 1561))
   )
   (connect_data=
      (server=dedicated)
      (service_name=IDC)
      (failover_mode=
         (type=session)
         (method=basic)
         (retries=180)
         (delay=5)
      )
   )
)


2.6.1 tnsnames.ora 접속 오류시[편집]

  • RAC인경우 여러개의 서버가 존재 하므로 각각의 서버로 접속 하기위해서 service_name 이 아닌 sid로 접속함.
    (SERVICE_NAME = ORCL) ==> (SID = rac1) 로 변경후 접속
orcl = 
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.10.10)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = ORCL) ==>  (SID = rac1) 로 변경후 접속 
    )
  )

2.7 SCAN 리스너[편집]

android * Oracle Grid Infrastructure SCAN 리스너를 구성하는 방법(기존 리스너와 별개의 리스너)

  • HA for Oracle 데이터베이스 데이터 서비스가 Oracle Grid Infrastructure for Clusters를 사용하여
    배치된 경우 단일 인스턴스 데이터베이스의 선호 리스너는 SCAN(Single Client Access Name) 리스너를 사용합니다.
  • HA for Oracle 데이터베이스 구성에 SCAN 리스너를 사용하려면
    단일 인스턴스 데이터베이스의 local_listener 및 remote_listener 매개변수가 올바르게 설정되었는지 확인해야 합니다.
  • SCAN 리스너가 구성된 경우 Oracle 데이터베이스 리스너 리소스는 필요하지 않습니다.


2.7.1 SCAN LISTENER 상태 확인[편집]

[root@rac1 ~]# srvctl status scan_listener
SCAN 리스너 LISTENER_SCAN1이(가) 사용으로 설정되었습니다.
SCAN 리스너 LISTENER_SCAN1이(가) 실행 중이 아닙니다.
SCAN 리스너 LISTENER_SCAN2이(가) 사용으로 설정되었습니다.
SCAN 리스너 LISTENER_SCAN2이(가) 실행 중이 아닙니다.
SCAN 리스너 LISTENER_SCAN3이(가) 사용으로 설정되었습니다.
SCAN 리스너 LISTENER_SCAN3이(가) 실행 중이 아닙니다.


2.7.2 SCAN LISTENER 설정 방법[편집]

2.7.2.1 로컬 리스너 확인[편집]

  • SQL*Plus를 사용하여 데이터베이스 사용자로 Oracle 데이터베이스에 로그인
  • local_listener 매개변수에 로컬 리스너 IP 번호 및 포트 번호가 포함되어 있는지 확인
  • local_listener 매개변수 설정을 표시합니다.
SQL> show parameters local_listener
NAME                                 TYPE        VALUE
------------------------------------ -----------------------------------------
local_listener                       string      (ADDRESS=(PROTOCOL=TCP)(HOST=node-IP-number)(PORT=port-number))
  • local_listener 매개변수에 로컬 리스너 IP 번호 및 포트 번호가 포함되지 않은 경우
  • 이 매개변수를 빈 값으로 설정한 다음 Oracle 데이터베이스를 다시 시작합니다.
  • Oracle 데이터베이스가 다시 시작되면
  • Oracle Clusterware에서 동적으로 local_listener 매개변수를 설정합니다.

2.7.2.2 로컬 리스너 초기화[편집]

SQL> alter system set local_listener='' scope=both;
System altered.
  • local_listener 매개변수 설정이 올바른지 확인.
SQL> show parameters local_listener

2.7.2.3 local 리스너 다를 경우 각각 변경 함.[편집]

alter system set local_listener='(ADDRESS=(PROTOCOL=TCP)(HOST=10.10.22.33)(PORT=2222))' scope=both sid='MIG1'; -- RAC1번 
alter system set local_listener='(ADDRESS=(PROTOCOL=TCP)(HOST=10.10.22.43)(PORT=2222))' scope=both sid='MIG2'; -- RAC2번
  • remote_listener 매개변수가 SCAN 이름과 포트 번호를 참조하는지 확인
  • remote_listener 매개변수에 SCAN 이름과 포트 번호가 포함되어 있는지 여부 지정.
$ srvctl config scan
SCAN name: SCAN-name, Network: network-number
…
$ srvctl config scan_listener
SCAN Listener LISTENER_SCAN1 exists. Port: TCP:port-number
…

2.7.2.4 remote_listener 매개변수에 SCAN 이름과 포트 번호가 포함되어 있는지 여부 지정.[편집]

SQL> show parameter remote_listener
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
remote_listener                      string       SCAN-name:port-number
  • remote_listener 매개변수에 SCAN 이름과 포트 번호가 포함되어 있지 않은 경우
해당 값을 사용하여 매개변수를 설정합니다.
SQL> alter system set remote_listener='SCAN-name:port-number' scope=both sid='RAC1';
SQL> alter system set remote_listener='SCAN-name:port-number' scope=both sid='RAC2';

2.7.2.5 remote_listener 매개변수의 SCAN 설정 확인[편집]

SQL> show parameter remote_listener
  • 각 클러스터 노드에서 tnsnames.ora 파일이 Net Service Name의 SCAN 이름을 참조하는지 확인합니다.
ORCL =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = SCAN-name)(PORT = port-number))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )
  • 참고 ) 리스너 시작/종료
$GRID_HOME/bin/srvctl stop scan_listener
$GRID_HOME/bin/srvctl start scan_listener

2.8 SCAN 리스너 재구성 방법[편집]

  • RAC1,2번 노드에 DNS를 재구성 한 후 SCAN IP를 오라클에서 권장하는 3개로 변경.

2.8.1 SCAN IP / LISTENER 의 Configuration 상태 확인[편집]

#> srvctl config scan
SCAN name: rac-scan.localdomain, Network: 1/192.168.1.0/255.255.255.0/eth1
SCAN VIP name: scan1, IP: /rac-scan.localdomain/192.168.1.51

2.8.2 Local DNS에서 SCAN IP 접속 가능한지 확인[편집]

# host rac-scan
# nslookup rac-scan
rac-scan.localdomain has address 192.168.1.52
rac-scan.localdomain has address 192.168.1.53
rac-scan.localdomain has address 192.168.1.51

Server: 192.168.1.101
Address: 192.168.1.101#53
Name: rac-scan.localdomain
Address: 192.168.1.51
Name: rac-scan.localdomain
Address: 192.168.1.52
Name: rac-scan.localdomain
Address: 192.168.1.53

2.8.3 SCAN IP / LISTENER 중지[편집]

#> srvctl stop scan_listener
#> srvctl stop scan
#> crsctl stat res -t
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.LISTENER_SCAN1.lsnr
1 OFFLINE OFFLINE
ora.oc4j
1 OFFLINE OFFLINE
ora.rac1.vip
1 ONLINE ONLINE rac1
ora.rac2.vip
1 OFFLINE OFFLINE
ora.scan1.vip
1 OFFLINE OFFLINE

2.8.4 SCAN LISTENER & IP 삭제[편집]

#> srvctl remove scan_listener
Remove scan listener? (y/[n]) y
#> srvctl remove scan
Remove the scan? (y/[n]) y

2.8.5 SCAN IP 등록[편집]

#> srvctl add scan -n rac-scan
#> srvctl config scan
SCAN name: rac-scan, Network: 1/192.168.1.0/255.255.255.0/eth1
SCAN VIP name: scan1, IP: /192.168.1.53/192.168.1.53
SCAN VIP name: scan2, IP: /192.168.1.51/192.168.1.51
SCAN VIP name: scan3, IP: /192.168.1.52/192.168.1.52
  • PRCS-1016 : Failed to resolve Single Client Access Name rac-scan 에러가 발생 하면 "/etc/nsswitch.conf" 파일의 설정 확인.
  • /etc/nsswitch.conf


# Oracle RAC
hosts: dns files

2.8.6 SCAN LISTENER 등록[편집]

#> srvctl add scan_listener
#> srvctl config scan_listener

SCAN Listener LISTENER_SCAN1 exists. Port: TCP:1521
SCAN Listener LISTENER_SCAN2 exists. Port: TCP:1521
SCAN Listener LISTENER_SCAN3 exists. Port: TCP:1521

2.8.7 SCAN Listener & IP 실행[편집]

#> srvctl start scan
#> srvctl start scan_listener
#> crsctl stat res -t
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.LISTENER_SCAN1.lsnr
1 ONLINE ONLINE rac1
ora.LISTENER_SCAN2.lsnr
1 ONLINE ONLINE rac1
ora.LISTENER_SCAN3.lsnr
1 ONLINE ONLINE rac1
ora.oc4j
1 OFFLINE OFFLINE
ora.rac1.vip
1 ONLINE ONLINE rac1
ora.rac2.vip
1 OFFLINE OFFLINE
ora.scan1.vip
1 ONLINE ONLINE rac1
ora.scan2.vip
1 ONLINE ONLINE rac1
ora.scan3.vip
1 ONLINE ONLINE rac1

2.8.8 OCR 백업 경로 확인[편집]

#> ocrconfig -showbackup

rac1 2012/12/07 07:35:33 /u01/app/11.2.0/grid/cdata/rac-scan/backup00.ocr
rac1 2012/12/07 03:23:30 /u01/app/11.2.0/grid/cdata/rac-scan/backup01.ocr
rac1 2012/12/06 23:11:29 /u01/app/11.2.0/grid/cdata/rac-scan/backup02.ocr
rac1 2012/12/06 23:11:29 /u01/app/11.2.0/grid/cdata/rac-scan/day.ocr
rac1 2012/12/06 23:11:29 /u01/app/11.2.0/grid/cdata/rac-scan/week.ocr

2.8.9 OCR Manual Backup[편집]

#> ocrconfig -export /u01/app/11.2.0/grid/cdata/rac-scan/manual_bk_121207_0946.ocr
# ls -al /u01/app/11.2.0/grid/cdata/rac-scan/manual*

-rw-r--r-- 1 root root 73130 Dec 7 09:47 /u01/app/11.2.0/grid/cdata/rac-scan/manual_bk_121207_0946.ocr

2.9 (로컬) 리스너 설정(listener.ora)[편집]

2.9.1 listener.ora[편집]

android - 위치: 서버에서 $ORACLE_HOME/network/admin/listener.ora

- 오라클 서버에서 클라이언트의 요청을 듣고, 클라이언트와의 통신 환경을 설정하는 파일

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


- 설정형식:

LISTENER = 
        (DESCRIPTION_LIST = 
              (DESCRIPTION = 
                  (ADDRESS_LIST = 
                        (ADDRESS = (PROTOCOL = TCP)(HOST = 호스트ip1)(PORT = 포트번호)) 
                        (ADDRESS = (PROTOCOL = TCP)(HOST = 호스트ip2)(PORT = 포트번호))  
                  ) 
                     )
         )
 
     SID_LIST_LISTENER = 
        (SID_LIST = 
            (SID_DESC = 
                 (SID_NAME = SID_name) 
                 (ORACLE_HOME = 오라클위치) 
            ) 
        ) 

   #로컬 리스너 설정 -- DB의 local_listener 파라미터에서 사용 
   LISTENER_RTIST =
   (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 11.22.33.44)(PORT = 1521))
      (ADDRESS = (PROTOCOL = TCP)(HOST = 11.22.33.44)(PORT = 8855))
      (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
      (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 8855))
   )
  • LISTENER : 리스너 이름이며 다른 이름으로 설정 가능. SID_LIST_리스너명 항목에서 리스너명과 동일
  • ADDRESS_LIST : ADDRESS들의 모임이며 여러 개의 ADDRESS를 동시에 설정 가능
  • ADDRESS : 데이터베이스 서버의 주소이며 프로토콜, 서버명 및 사용포트로 구성된다.
  • SID_LIST_LISTENER : 리스너가 서비스하는 데이터베이스 정보를 설정하며 SID_LIST_리스너명으로 설정
  • SID_LIST : 해당 리스너 프로세스가 하나 이상의 데이터베이스를 서비스 할 경우에 해당 부분에 여러개의 SID_DESC를 등록한다.
  • SID_NAME : 리스너의 접속을 허용하는 데이터베이스의 SID 명을 지정한다.
  • 상태 확인 command :
oracle$> lsnrctl status [리스너명]
  • 12c에서 파라미터 확인
SQL> show parameter local_listener;
  • 변경
SQL> alter system set local_listener='(ADDRESS=(PROTOCOL=TCP)(HOST=서버아이피)(PORT=2222))' scope=both;
  • 리스너 시작
oracle$> lsnrctl start [리스너명]