[Oracle] local_listener 이해하기

HYEOB KIM·2023년 8월 11일
0

Oracle

목록 보기
51/58
post-custom-banner

local_listener란

local_listener에 등록된 Listener는 Oracle이 서비스(인스턴스)를 자동으로 등록해줍니다.

참고
'서비스를 등록한다'는 뜻은 '인스턴스를 등록한다'는 의미로 받아들이면 될 것 같습니다.

Listener에 인스턴스를 등록하는 방법은 2가지가 있습니다.

  • 정적등록 : listener.ora 파일에 SID_LIST_...를 통해 인스턴스(SID_NAME)를 명시해주는 방법입니다. status가 UNKNOWN으로 나타납니다.
  • 동적등록 : LREG 프로세스가 Listener에 등록 가능한 인스턴스(SID_NAME)를 자동으로 등록해주는 방법입니다. status가 READY로 나타납니다.

만약 listener.ora 파일에 아래와 같이 작성한 후 LISTENER_ORACLE를 시작하면 서비스가 없다는 문구가 나타납니다.

-- listener.ora
LISTENER_ORACLE =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS_LIST =
        (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1522))
      )
    )
  )

-- listener 시작
$ lsnrctl start LISTENER_ORACLE

LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 11-AUG-2023 16:16:59

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

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1522)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER_ORACLE
Version                   TNSLSNR for Linux: Version 19.0.0.0.0 - Production
Start Date                11-AUG-2023 16:15:45
Uptime                    0 days 0 hr. 1 min. 14 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /ORACLE/app/oracle/product/19.0.0/db_1/network/admin/listener.ora
Listener Log File         /ORACLE/app/oracle/diag/tnslsnr/khyup/listener_oracle/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=127.0.0.1)(PORT=1522)))
The listener supports no services
The command completed successfully

local_listener를 확인합니다.

  • 빈 칸일 경우 default listener(LISTENER, 1521)을 가리킵니다
show parameter local

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
local_listener                       string      
parallel_force_local                 boolean     FALSE

local_listener에 Listener를 등록하면 Oracle이 서비스(SID_NAME)를 자동으로 등록해줍니다.
local_listener 값을 LISTENER_ORACLEHOSTPORT로 변경합니다.

alter system set local_listener='(description=(address=(protocol=tcp)(host=localhost)(port=1522)))';

show parameter local_listener

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
local_listener                       string      (description=(address=(protocol=tcp)(host=localhost)(port=1522)))

다시 한번 LISTENER_ORACLE의 상태를 보면 READY 상태로 서비스가 등록된 것을 확인할 수 있습니다.

참고

  • status READY : 동적등록
  • status UNKNOWN : 정적등록
$ lsnrctl stat LISTENER_ORACLE

LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 11-AUG-2023 16:17:36

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

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1522)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER_ORACLE
Version                   TNSLSNR for Linux: Version 19.0.0.0.0 - Production
Start Date                11-AUG-2023 16:15:45
Uptime                    0 days 0 hr. 1 min. 50 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /ORACLE/app/oracle/product/19.0.0/db_1/network/admin/listener.ora
Listener Log File         /ORACLE/app/oracle/diag/tnslsnr/khyup/listener_oracle/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=127.0.0.1)(PORT=1522)))
Services Summary...
Service "oracle" has 1 instance(s).
  Instance "oracle", status READY, has 1 handler(s) for this service...
Service "oracleXDB" has 1 instance(s).
  Instance "oracle", status READY, has 1 handler(s) for this service...
The command completed successfully

tnsname을 이용해 local_listener 등록

한편, tnsnames.ora에 tnsname을 등록할 경우 local_listener의 값에는 tnsname을 적어줘도 됩니다.

-- tnsnames.ora
LISTENER_ORACLE =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1522))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = oracle)
    )
  )

-- local_listener 등록
alter system set local_listener=LISTENER_ORACLE;

show parameter local_listener

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
local_listener                       string      LISTENER_ORACLE

local_listener에 여러 Listener 등록

local_listener에는 여러 Listener를 등록할 수 있습니다.

-- local_listener에 리스너 2개 등록
alter system set local_listener=LISTENER_ORACLE, '(description=(address=(protocol=tcp)(host=localhost)(port=1523)))';

show parameter local_listener

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
local_listener                       string      LISTENER_ORACLE, (description=(address=(protocol=tcp)(host=localhost)(port=1523)))
profile
Devops Engineer
post-custom-banner

0개의 댓글