- dedicated server 구조
- shared server 구조
dedicated server 구조는 유져 프로세서 하나당 서버프로세서 하나 할당

💡 shared server 구조는 유져 프로세서와 서버프로세서 사이에 디스패쳐가 있어서 디스패쳐를 통해서 일거리를 부여하는 구조

■ shared server process 구조를 구성하는 방법
1. dispatcher 를 띄울수 있도록 파라미터 설정
SQL> show parameter dispatcher
SQL> alter system set dispatchers='(protocol=tcp)(dispatchers=1)';
2. shared server process의 갯수를 결정하는 파라미터를 설정
SQL> show parameter shared_servers
SQL> alter system set shared_servers=2;
db를 startup 하면 최초로 띄울 shared server process 의 갯수
SQL> show parameter max_shared_servers
SQL> alter system set max_shared_servers= 10;
workload 가 busy 한 상태가 되었을때 최대 shared server
process 를 몇개까지 띄울수 있는지를 결정하는 파라미터
3. 오라클에 접속하고자 하는 전체 세션의 갯수 파라미터와
그중에서 shared server process 를 사용할 세션의 갯수를 결정하는
파라미터를 설정
SQL> show parameter sessions
100개
SQL> alter system set sessions=100 scope=spfile;
오라클에 접속하는 세션의 갯수를 100개로 하겠다.
SQL> show parameter shared_server_sessions
95개
SQL> alter system set shared_server_sessions=95;
100개중에서 shared server process 를 이용할 세션 갯수를 95개로 지정하겠다.
SQL> alter system set max_dispatchers=3;
* database 의 특별한 작업을 하는 세션들을 위해서
dedicated server process 를 예비해둬야한다.
SQL> shutdown immediate
SQL> startup
* 현재 떠있는 디스패쳐의 갯수
select name ,status from v$dispatcher;
* 현재 떠있는 shared server 프로세서의 갯수
select name ,status from v$shared_server;
위와 같이 설정했으면 shared server 구조를 구성한 것입니다.
orakbm2 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.13.69)(PORT = 21533))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = ORA19)
)
)
orakbm2_shared =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.13.69)(PORT = 21533))
(CONNECT_DATA =
(SERVER = shared)
(SERVICE_NAME = ORA19)
)
)

SYS @ ORA19 > select * from v$dispatcher;
NAME
----
NETWORK
------------------------------------------------------------------
PADDR STATUS ACC MESSAGES BYTES BR
---------------- ---------------- --- ---------- ---------- ------
OWNED CREATED IDLE BUSY CPU LISTENER
---------- ---------- ---------- ---------- ---------- ----------
CON_ID
----------
D000
(ADDRESS=(PROTOCOL=tcp)(HOST=ora19c)(PORT=13387))
000000007B4496F8 WAIT YES 0 0
NAME
----
NETWORK
------------------------------------------------------------------
PADDR STATUS ACC MESSAGES BYTES BR
---------------- ---------------- --- ---------- ---------- ------
OWNED CREATED IDLE BUSY CPU LISTENER
---------- ---------- ---------- ---------- ---------- ----------
CON_ID
----------
0 0 183312 0 42547 0
0
SYS @ ORA19 > exit;
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0에서 분리되었습니다.
orakbm2_shared =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.13.69)(PORT = 13387))
(CONNECT_DATA =
(SERVER = shared)
(SERVICE_NAME = ORA19)
)
)
[oracle@ora19c admin]$ su -
암호:
마지막 로그인: 금 8월 29 10:29:02 KST 2025 일시 pts/0
[root@ora19c ~]# firewall-cmd --permanent --add-port=16591/tcp
success
[root@ora19c ~]# firewall-cmd --reload
success
[root@ora19c ~]# firewall-cmd --list-ports
1521/tcp 5500/tcp 5501/tcp 21553/tcp 21533/tcp 16591/tcp 13387/tcp
[root@ora19c ~]#

- listener.ora 파일안에 shared server 구조를 인식할 수 있게하는 셋팅해줘야하고
- 서버의 tnsnames.ora 파일안에 shared server 프로세서 접속하기위한 tns 정보를 넣어줘야하고
- 파라미터 파일에 local_listener 라는 파라미터에 tnsnames.ora 설정한 shared server tns정보를 값으로 셋팅해줘야합니다.
alter system register;명령어로 리스너에게 동적으로 서비스를 등록해줍니다.
# Generated by Oracle configuration tools.
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.13.69)(PORT = 21533))
(ADDRESS = (PROTOCOL = IPC)(KEY =EXTPROC21533))
)
)
SID_LIST_LISTENER=
(SID_LIST =
(SID_DESC =
(ORACLE_HOME=/u01/app/oracle/product/19.3.0/dbhome_1)
(SID_NAME= ORA19)
(SERVER=SHARED)
)
)
orakbm2_shared =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.13.69)(PORT = 21533 ))
(CONNECT_DATA =
(SERVER = shared)
(SERVICE_NAME = ORA19)
)
)
SYS @ ORA19 > alter system set local_listener='orakbm2_shared' scope=both;
시스템이 변경되었습니다.
SYS @ ORA19 > alter system register;
시스템이 변경되었습니다.
SYS @ ORA19 >exit;
[oracle@ora19c admin]$ lsnrctl services
LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 29-8월 -2025 12:03:04
Copyright (c) 1991, 2019, Oracle. All rights reserved.
(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.13.69)(PORT=21533)))에 연결되었습니다
서비스 요약...
"ORA19" 서비스는 2개의 인스턴스를 가집니다.
"ORA19" 인스턴스(UNKNOWN 상태)는 이 서비스에 대해 1 처리기를 가집니다.
처리기:
"DEDICATED" 설정: 0 거부: 0
LOCAL SERVER
"ORA19" 인스턴스(READY 상태)는 이 서비스에 대해 3 처리기를 가집니다.
처리기:
"D001" 설정: 0 거부: 0 현재: 0 최대: 1022 상태: ready
DISPATCHER <machine: ora19c, pid: 13519>
(ADDRESS=(PROTOCOL=tcp)(HOST=ora19c)(PORT=32123))
"D000" 설정: 1 거부: 0 현재: 0 최대: 1022 상태: ready
DISPATCHER <machine: ora19c, pid: 13517>
(ADDRESS=(PROTOCOL=tcp)(HOST=ora19c)(PORT=12965))
"DEDICATED" 설정:0 거부:0 상태:ready
LOCAL SERVER
명령이 성공적으로 수행되었습니다
[oracle@ora19c admin]$
``sql
[oracle@ora19c admin]$ sqlplus scott/tiger@orakbm2_shared
SQL*Plus: Release 19.0.0.0.0 - Production on 금 8월 29 12:03:41 2025
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle. All rights reserved.
마지막 성공한 로그인 시간: 금 8월 29 2025 11:55:45 +09:00
다음에 접속됨:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
SCOTT @ orakbm2_shared >
<br>
#### 윈도우의 tnsnames.ora는 다음과 같이 구성되어야합니다.
```sql
orakbm2_shared =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.13.69)(PORT = 21533))
(CONNECT_DATA =
(SERVER = shared)
(SERVICE_NAME = ORA19)
)
)

SELECT SERVER, COUNT(*) AS CNT
FROM V$SESSION
GROUP BY SERVER;
SERVER CNT
--------- ----------
DEDICATED 50
■ shared server process 구조를 구성하는 방법
1. dispatcher 를 띄울수 있도록 파라미터 설정
SQL> show parameter dispatcher
SQL> alter system set dispatchers='(protocol=tcp)(dispatchers=1)';
2. shared server process 의 갯수를 결정하는 파라미터를 설정
SQL> show parameter shared_servers
SQL> alter system set shared_servers=2;
db 를 startup 하면 최초로 띄울 shared server process 의 갯수
SQL> show parameter max_shared_servers
SQL> alter system set max_shared_servers= 10;
workload 가 busy 한 상태가 되었을때 최대 shared server
process 를 몇개까지 띄울수 있는지를 결정하는 파라미터
3. 오라클에 접속하고자 하는 전체 세션의 갯수 파라미터
와 그중에서 shared server process 를 사용할 세션의 갯수를 결정하는
파라미터를 설정
SQL> show parameter sessions
100개
SQL> alter system set sessions=100 scope=spfile;
오라클에 접속하는 세션의 갯수를 100개로 하겠다.
SQL> show parameter shared_server_sessions
95개
SQL> alter system set shared_server_sessions=95;
100개중에서 shared server process 를 이용할 세션 갯수를 95개로 지정하겠다.
SQL> alter system set max_dispatchers=3;
* database 의 특별한 작업을 하는 세션들을 위해서
dedicated server process 를 예비해둬야한다.
SQL> shutdown immediate
SQL> startup
* 현재 떠있는 디스패쳐의 갯수
select name ,status from v$dispatcher;
* 현재 떠있는 shared server 프로세서의 갯수
select name ,status from v$shared_server;
위와 같이 설정했으면 shared server 구조를 구성한것입니다.
# Generated by Oracle configuration tools.
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.13.69)(PORT = 21533))
(ADDRESS = (PROTOCOL = IPC)(KEY =EXTPROC21533))
)
)
SID_LIST_LISTENER=
(SID_LIST =
(SID_DESC =
(ORACLE_HOME=/u01/app/oracle/product/19.3.0/dbhome_1)
(SID_NAME= ora19dw)
(SERVER=SHARED)
)
)
orakbm2_shared_dw =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.13.69)(PORT = 21533 ))
(CONNECT_DATA =
(SERVER = shared)
(SERVICE_NAME = ora19dw)
)
)
SYS @ ora19dw > alter system set local_listener='orakbm2_shared_dw' scope=both;
시스템이 변경되었습니다.
SYS @ ora19dw > alter system register;
시스템이 변경되었습니다.
SYS @ ora19dw > exit;
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0에서 분리되었습니다.
[oracle@ora19c admin]$ lsnrctl services
LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 29-8월 -2025 14:07:05
Copyright (c) 1991, 2019, Oracle. All rights reserved.
(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.13.69)(PORT=21533)))에 연결되었습니다
서비스 요약...
"ORA19" 서비스는 1개의 인스턴스를 가집니다.
"ORA19" 인스턴스(UNKNOWN 상태)는 이 서비스에 대해 1 처리기를 가집니다.
처리기:
"DEDICATED" 설정: 0 거부: 0
LOCAL SERVER
"ora19dw" 서비스는 1개의 인스턴스를 가집니다.
"ora19dw" 인스턴스(READY 상태)는 이 서비스에 대해 2 처리기를 가집니다.
처리기:
"D000" 설정: 0 거부: 0 현재: 0 최대: 1022 상태: ready
DISPATCHER <machine: ora19c, pid: 18025>
(ADDRESS=(PROTOCOL=tcp)(HOST=ora19c)(PORT=36063))
"DEDICATED" 설정:0 거부:0 상태:ready
LOCAL SERVER
명령이 성공적으로 수행되었습니다
[oracle@ora19c admin]$ sqlplus scott/tiger@orakbm2_shared_dw
SQL*Plus: Release 19.0.0.0.0 - Production on 금 8월 29 14:07:27 2025
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle. All rights reserved.
마지막 성공한 로그인 시간: 수 8월 27 2025 15:58:50 +09:00
다음에 접속됨:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
SCOTT @ orakbm2_shared_dw >
[oracle@ora19c admin]$ sqlplus scott/tiger@orakbm2_shared_dw
SQL*Plus: Release 19.0.0.0.0 - Production on 금 8월 29 12:03:41 2025
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle. All rights reserved.
마지막 성공한 로그인 시간: 금 8월 29 2025 11:55:45 +09:00
다음에 접속됨:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
SCOTT @ orakbm2_shared >
orakbm2_shared_dw =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.13.69)(PORT = 21533 ))
(CONNECT_DATA =
(SERVER = shared)
(SERVICE_NAME = ora19dw)
)
)

[oracle@ora19c admin]$ lsnrctl stop
[oracle@ora19c admin]$
[oracle@ora19c admin]$ cat listener.ora
# listener.ora Network Configuration File: /u01/app/oracle/product/19.3.0/dbhome_1/network/admin/listener.ora
# Generated by Oracle configuration tools.
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.13.69)(PORT = 21533))
(ADDRESS = (PROTOCOL = IPC)(KEY =EXTPROC21533))
)
)
#SID_LIST_LISTENER=
# (SID_LIST =
# (SID_DESC =
# (ORACLE_HOME=/u01/app/oracle/product/19.3.0/dbhome_1)
# (SID_NAME= ora19dw)
# (SERVER=SHARED)
# )
# )
[oracle@ora19c admin]$ lsnrctl start