이 블로그 검색

[ORACLE] LISTENER 정적 등록과 동적 등록 (With Multitenant)

1. LISTENR 등록 방법

LISTENER에 서비스 등록을 하는 경우, 두가지 방법이 존재한다.

정적 등록 (Static)

SID_LIST_{LISTENER명}을 사용하여 정적으로 서비스 등록.

LISTENER에서 "status UNKOWN"으로 표시된다.

동적 등록 (Dynamic)

LOCAL_LISTENER 파라미터를 통해 오라클 LREG 프로세스가 동적으로 LISTENER에 서비스를 등록.

LISTENER에서 "status READY"로 표시된다.

LOCAL_LISTENER 파라미터의 default는 null로 되어있으며, null인 경우 1521 port를 사용하는 LISTENER를 자동으로 등록한다.

​따라서 local_listener 통해 동적으로 DB를 등록하여 사용하고 싶은 경우에는

- local_listener 파라미터 값으로 tnsnames.ora에 등록된 alias를 사용하거나,

- tns syntax를 그대로 적어서 사용할 수 있다.

또한, LOCAL_LISTENER 파라미터는 Multitenant 환경에서는 CDB 파라미터가 아닌 PDB 개별적으로 적용 역시 가능하다.


참고사항 1.

12c 이후로 LISTENER 관리는 PMON이 하지 않고 LREG 프로세스가 수행한다.출처 : Process Architecture (oracle.com)

참고사항 2.

LISTENER를 수동으로 생성하지 않고 LISTENER 기동을 하는 경우, ORACLE은 1521 포트를 사용하는 LISTENER를 작동 시킨다.상세 내용 참고 : [IT INDEXES: ORACLE] Listener를 생성하지 않고도 사용이 되는 이유. (it-indexes.blogspot.com)\


주의사항 1.

PDB 개별 파라미터는 "V$SYSTEM_PARAMETER" or "V$PARAMETER" 뷰에서 ISPDB_MODIFIABLE 컬럼이 TRUE인 파라미터만 PDB에서 수정 가능하다.

주의사항 2.

PDB에 적용된 파라미터는 CDB에서 pfile 생성시 출력되지 않고, PDB_SPFILE$ 테이블에 저장 된다.


2. 리스너 동적 등록

2.1. 관련 파일설정

[SERVICE_NAME 사용시]

# tnsnames.ora

CDB =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = orcl)(PORT = 11521))

(CONNECT_DATA =

(SERVER = DEDICATED)

(SERVICE_NAME = orcl)

)

)

PDB1 =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = orcl)(PORT = 11521))

(CONNECT_DATA =

(SERVER = DEDICATED)

(SERVICE_NAME = PDB1)

)

)

PDB2 =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = orcl)(PORT = 11521))

(CONNECT_DATA =

(SERVER = DEDICATED)

(SERVICE_NAME = PDB2)

)

)

※ service_name은 cdb_services에서 확인 가능

※ service_name 대신 SID 를 쓰고 싶은 경우, listener.ora에 USE_SID_AS_SERVICE_{LISTENER_NAME}=on 파라미터를 설정해 두어야 한다.

[SID 사용시]

# listener.ora​

USE_SID_AS_SERVICE_LISTENER=on

LISTENER =

(DESCRIPTION_LIST =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = orcl)(PORT = 11521))

(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC11521))

)

)

# tnsnames.ora

PDB1 =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = orcl)(PORT = 11521))

(CONNECT_DATA =

(SERVER = DEDICATED)

(SID = PDB1)

)

)

2.2. local_listener 설정 및 접속 확인

oracle@orcl:CDB$ROOT:/u01/app/oracle/product/11.2.0.4/dbhome_1 $ sqlplus / as sysdba

SQL*Plus: Release 19.0.0.0.0 - Production on Wed Jun 16 02:04:57 2021

Version 19.3.0.0.0

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

Connected to:

Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production

Version 19.3.0.0.0

SQL> alter system set local_listener=CDB scope=both ;

System altered.

SQL> show parameter local_listener

NAME TYPE VALUE

------------------------------------ ---------------------- ------------------------------

local_listener string CDB

SQL> alter session set container=PDB1 ;

Session altered.

SQL> alter system set local_listener=PDB1 scope=both ;

System altered.

SQL> show parameter local_listener

NAME TYPE VALUE

------------------------------------ ---------------------- ------------------------------

local_listener string PDB1

System altered.

SQL> alter session set container=PDB2 ;

Session altered.

SQL> alter system set local_listener=PDB2 scope=both ;

System altered.

SQL> show parameter local_listener

NAME TYPE VALUE

------------------------------------ ---------------------- ------------------------------

local_listener string PDB2

System altered.

SQL> conn C##TEST@PDB1

Enter password:

Connected.

SQL>

※ C##은 common user임을 의미함. CDB에 지정된 common_user_prefix에 의해 제어 됨.


3. 리스너 정적 등록

동적 등록을 위한 파라미터인 local_listener 설정 대신에 listener.ora에 SID_LIST 를 추가하여 정적으로 리스너에 등록하여 사용 가능하다.

3.1. 관련 파일 설정

tnsnames.ora의 설정은 동일하다.

# listener.ora

LISTENER =

(DESCRIPTION_LIST =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = orcl)(PORT = 11521))

(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC11521))

)

)

SID_LIST_LISTENER =

(SID_LIST =

# CDB

(SID_DESC =

(GLOBAL_DBNAME = orcl)

(SID_NAME = orcl)

)

# PDB1

(SID_DESC =

(GLOBAL_DBNAME = PDB1)

(SID_NAME = orcl)

)

# PDB2

(SID_DESC =

(GLOBAL_DBNAME = PDB2)

(SID_NAME = orcl)

)

)

#으로 시작되는 주석부분 생략 가능하다.

3.2. 접속 확인

oracle@orcl:CDB$ROOT:/home/oracle $ lsnrctl status

LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 16-JUN-2021 22:40:11

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

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=orcl)(PORT=11521)))

STATUS of the LISTENER

------------------------

Alias LISTENER

Version TNSLSNR for Linux: Version 19.0.0.0.0 - Production

Start Date 16-JUN-2021 22:15:19

Uptime 0 days 0 hr. 24 min. 51 sec

Trace Level off

Security ON: Local OS Authentication

SNMP OFF

Listener Parameter File /u01/app/oracle/product/11.2.0.4/dbhome_1/network/admin/listener.ora

Listener Log File /u01/app/oracle/diag/tnslsnr/localhost/listener/alert/log.xml

Listening Endpoints Summary...

(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.56.101)(PORT=11521)))

(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC11521)))

Services Summary...

Service "PDB1" has 1 instance(s).

Instance "orcl", status UNKNOWN, has 1 handler(s) for this service...

Service "PDB2" has 1 instance(s).

Instance "orcl", status UNKNOWN, has 1 handler(s) for this service...

Service "orcl" has 1 instance(s).

Instance "orcl", status UNKNOWN, has 1 handler(s) for this service...

The command completed successfully

oracle@orcl:CDB$ROOT:/home/oracle $ sqlplus C##TEST@PDB1

SQL*Plus: Release 19.0.0.0.0 - Production on Wed Jun 16 22:40:41 2021

Version 19.3.0.0.0

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

Enter password:

Last Successful login time: Wed Jun 16 2021 22:12:25 -04:00

Connected to:

Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production

Version 19.3.0.0.0

SQL>

※ 정적 등록이므로 리스너에서 status UNKOWN으로 표시 된다.

추천 게시글

[ORACLE] Data Pump가 느리거나 멈춘경우.

목록