[Oracle] 오라클 접속유저가 많을 때 - shared server 구조로 구성

·2025년 8월 29일

오라클 관리

목록 보기
63/163

이론1. 서버 프로세서의 구조 2가지는?

  1. dedicated server 구조
  2. shared server 구조

이론2. dedicated server 구조란 무엇인가요?

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


이론3. shared server 구조란 무엇인가요?

💡 shared 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  
                        100SQL> alter system set sessions=100 scope=spfile;
  
   오라클에 접속하는 세션의 갯수를 100개로 하겠다.

SQL> show parameter shared_server_sessions 
                         95SQL> 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 구조를 구성한 것입니다.

실습2. 오렌지로 scott 으로 접속을 하는데 shared server 프로세서를 할당 받을 수 있도록 tnsnames.ora 를 설정하고 접속하시오

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)
    )
  )


실습3. 위와 같이하면 접속이 안됩니다. 그래서 다음과 같이 디스패쳐 포트를 확인해서 tnsnames.ora 를 변경하고 방화벽도 열어줍니다.

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에서 분리되었습니다.

위에서 보이는 16591 포트를 tnsnames.ora에 다음과 같이 설정합니다.

orakbm2_shared =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.13.69)(PORT = 13387))
    (CONNECT_DATA =
      (SERVER = shared)
      (SERVICE_NAME = ORA19)
    )
  )

13387 방화벽을 열어줍니다.

[oracle@ora19c admin]$ su -
암호:
마지막 로그인: 금  829 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 ~]#

그리고 윈도우(cmd 창)에서 접속해봅니다.


실습4. 다시 완전하게 제대로 되게하려면 다음과 같이 해야합니다.

  1. listener.ora 파일안에 shared server 구조를 인식할 수 있게하는 셋팅해줘야하고
  2. 서버의 tnsnames.ora 파일안에 shared server 프로세서 접속하기위한 tns 정보를 넣어줘야하고
  3. 파라미터 파일에 local_listener 라는 파라미터에 tnsnames.ora 설정한 shared server tns정보를 값으로 셋팅해줘야합니다.
  4. alter system register; 명령어로 리스너에게 동적으로 서비스를 등록해줍니다.

[실습1] listener.ora 파일안에 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= ORA19)
      (SERVER=SHARED)
     )
   )

[실습2] 서버의 tnsnames.ora 파일안에 shared server 프로세서 접속하기위한 tns 정보를 넣어줘야하고

orakbm2_shared =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.13.69)(PORT = 21533 ))
    (CONNECT_DATA =
      (SERVER = shared)
      (SERVICE_NAME = ORA19)
    )
  )

[실습3] 파라미터 파일에 local_listener 라는 파라미터에 tnsnames.ora 설정한 shared server tns정보를 값으로 셋팅해줘야합니다.

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]$

[실습4] 접속해봅니다.

``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)
    )
  )


문제1. ora19 db 를 shutdown immediate 로 내리고 ora19dw 를 올리시오


문제2. ora19dw 를 dedicated server 구조에서 shared server 구조로 변경하시오

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  
                        100SQL> alter system set sessions=100 scope=spfile;
  
   오라클에 접속하는 세션의 갯수를 100개로 하겠다.

SQL> show parameter shared_server_sessions 
                         95SQL> 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 구조를 구성한것입니다.

실습1. listener.ora 파일안에 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)
     )
   )

실습2. 서버의 tnsnames.ora 파일안에 shared server 프로세서 접속하기위한 tns 정보를 넣어줘야하고

orakbm2_shared_dw =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.13.69)(PORT = 21533 ))
    (CONNECT_DATA =
      (SERVER = shared)
      (SERVICE_NAME = ora19dw)
    )
  )

실습3. 파라미터 파일에 local_listener 라는 파라미터에 tnsnames.ora 설정한 shared server tns정보를 값으로 셋팅해줘야합니다.

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 on829 14:07:27 2025
Version 19.3.0.0.0

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

마지막 성공한 로그인 시간: 수 827 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 >

실습4. 접속해봅니다.

	[oracle@ora19c admin]$ sqlplus scott/tiger@orakbm2_shared_dw

SQL*Plus: Release 19.0.0.0.0 - Production on829 12:03:41 2025
Version 19.3.0.0.0

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

마지막 성공한 로그인 시간: 금 829 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 >

윈도우의 tnsnames.ora는 다음과 같이 구성되어야합니다.


orakbm2_shared_dw =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.13.69)(PORT = 21533 ))
    (CONNECT_DATA =
      (SERVER = shared)
      (SERVICE_NAME = ora19dw)
    )
  )


문제3. 동적 서비스 등록으로 리스너를 구성하면서 shared server 구조로 구성하기를 ora19dw 에 구성하시오

  1. 일단 listener.ora 를 동적으로 구성합니다.
[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

0개의 댓글