Skip to main content

Configure Shared Listener in Oracle Database


  • Introduction: In this article, we will see how to configure Shared Listener in Oracle database. It is especially beneficial in environments with many light or intermittent user connections, such as web or application servers.

  • Type of Server:
    • Dedicated Server: It provides one server process per session, offering maximum performance and isolation but using more memory.
    • Shared Server: It allows multiple clients to share a pool of server processes, providing scalability and memory savings but introducing some queue-related latency.

  • Parameters: Below parameters are need to configure for Shared Listener.
    • DISPATCHERS: It specifies one or more dispatcher processes that handle incoming client connections in a Shared Server configuration.
    • LOCAL_LISTENER: It specifies the database how to locate the listener running on the local machine. It ensures the instance registers properly with the listener so clients can connect using shared server, dedicated server, or both.
    • SHARED_SERVERS: It specifies the minimum number of shared server processes that database instance should maintain.
    • MAX_SHARED_SERVERS: It specifies maximum number of shared server processes that database instance is allowed to spawn dynamically based on load.

  • All the above parameters can be modified dynamically without bouncing the database instance.

  • Environment:
  • Hostname orcl.oraeasy.com
    Database Name orcldb
    Database Version 19.27
    Existing Listener LISTENER (1521)
    Shared Listener LISTENER_SHARED (1526)

  • Prerequisites:
    • Use a new port for Shared Listener and also it should be enabled on server or disable the firewall.
    • No downtime required, but a 15-minute buffer is suggested for safety.

  • Now let's start the Shared Listener configuration step by step:
1. First take the backup of listener.ora,tnsnames.ora and create a pfile. Also check current listener status:

Create pfile.
SQL> def
DEFINE _DATE           = "07-DEC-25" (CHAR)
DEFINE _CONNECT_IDENTIFIER = "orcldc" (CHAR)
DEFINE _USER           = "SYS" (CHAR)
DEFINE _PRIVILEGE      = "AS SYSDBA" (CHAR)
DEFINE _SQLPLUS_RELEASE = "1927000000" (CHAR)
DEFINE _EDITOR         = "vi" (CHAR)
DEFINE _O_VERSION      = "Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.27.0.0.0" (CHAR)
DEFINE _O_RELEASE      = "1927000000" (CHAR)
SQL>
SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 ORCLPDB                        READ WRITE NO
SQL>

SQL> CREATE PFILE='/home/oracle/pfileorcl.ora' FROM SPFILE;

File created.

Listener status & file backup.
[oracle@orcl ~]$ lsnrctl status LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 07-DEC-2025 15:30:47 Copyright (c) 1991, 2025, Oracle. All rights reserved. Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=orcl.oraeasy.com)(PORT=1521))) STATUS of the LISTENER ------------------------ Alias LISTENER Version TNSLSNR for Linux: Version 19.0.0.0.0 - Production Start Date 07-DEC-2025 11:32:03 Uptime 0 days 3 hr. 58 min. 45 sec Trace Level off Security ON: Local OS Authentication SNMP OFF Listener Parameter File /u01/app/oracle/product/19.0.0/dbhome_1/network/admin/listener.ora Listener Log File /u01/app/oracle/diag/tnslsnr/orcl/listener/alert/log.xml Listening Endpoints Summary... (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=orcl.oraeasy.com)(PORT=1521))) (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521))) Services Summary... Service "2c3d6bacf692345be0633350a8c050ed" has 1 instance(s). Instance "orcldc", status READY, has 1 handler(s) for this service... Service "ORCLDC" has 1 instance(s). Instance "orcldc", status READY, has 1 handler(s) for this service... Service "orcldcXDB" has 1 instance(s). Instance "orcldc", status READY, has 1 handler(s) for this service... Service "orclpdb" has 1 instance(s). Instance "orcldc", status READY, has 1 handler(s) for this service... The command completed successfully [oracle@orcl ~]$ [oracle@orcl ~]$ ps -ef|grep tns root 6 2 0 11:30 ? 00:00:00 [netns] oracle 3618 1 0 11:32 ? 00:00:00 /u01/app/oracle/product/19.0.0/dbhome_1/bin/tnslsnr LISTENER -inherit oracle 14881 7297 0 15:31 pts/1 00:00:00 grep --color=auto tns [oracle@orcl ~]$ [oracle@orcl ~]$ cd $ORACLE_HOME/network/admin [oracle@orcl admin]$ [oracle@orcl admin]$ ls listener.ora samples shrept.lst sqlnet25012210AM4609.bak sqlnet.ora tnsnames.ora [oracle@orcl admin]$ cp listener.ora listener_bkp.ora [oracle@orcl admin]$ cp tnsnames.ora tnsnames_bkp.ora
2. Now edit the Listener and TNS file for Shared Listener like below:

[oracle@orcl admin]$ cat listener.ora
# listener.ora Network Configuration File: /u01/app/oracle/product/19.0.0/dbhome_1/network/admin/listener.ora
# Generated by Oracle configuration tools.

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = orcl.oraeasy.com)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
  )

##### Shared Listener #####
LISTENER_SHARED = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = orcl.oraeasy.com)(PORT = 1526)) ) ) [oracle@orcl admin]$ [oracle@orcl admin]$ cat tnsnames.ora # tnsnames.ora Network Configuration File: /u01/app/oracle/product/19.0.0/dbhome_1/network/admin/tnsnames.ora # Generated by Oracle configuration tools. ORCLPDB = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = orcl.oraeasy.com)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = orclpdb) ) ) ORCLDC = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = orcl.oraeasy.com)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = orcldc) ) ) ##### Shared Listener #####
ORCLDCSH = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = orcl.oraeasy.com)(PORT = 1526)) ) (CONNECT_DATA = (SERVER = SHARED) (SERVICE_NAME = orcldc) ) ) ORCLPDBSH = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = orcl.oraeasy.com)(PORT = 1526)) ) (CONNECT_DATA = (SERVER = SHARED) (SERVICE_NAME = orclpdb) ) ) [oracle@orcl admin]$
3. Now start Shared Listener:

[oracle@orcl admin]$ lsnrctl start LISTENER_SHARED

LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 07-DEC-2025 15:59:26

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

Starting /u01/app/oracle/product/19.0.0/dbhome_1/bin/tnslsnr: please wait...

TNSLSNR for Linux: Version 19.0.0.0.0 - Production
System parameter file is /u01/app/oracle/product/19.0.0/dbhome_1/network/admin/listener.ora
Log messages written to /u01/app/oracle/diag/tnslsnr/orcl/listener_shared/alert/log.xml
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=orcl.oraeasy.com)(PORT=1526)))

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=orcl.oraeasy.com)(PORT=1526)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER_SHARED
Version                   TNSLSNR for Linux: Version 19.0.0.0.0 - Production
Start Date                07-DEC-2025 15:59:27
Uptime                    0 days 0 hr. 0 min. 1 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /u01/app/oracle/product/19.0.0/dbhome_1/network/admin/listener.ora
Listener Log File         /u01/app/oracle/diag/tnslsnr/orcl/listener_shared/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=orcl.oraeasy.com)(PORT=1526)))
The listener supports no services
The command completed successfully

[oracle@orcl admin]$ ps -ef|grep tns
root           6       2  0 11:30 ?        00:00:00 [netns]
oracle      3618       1  0 11:32 ?        00:00:00 /u01/app/oracle/product/19.0.0/dbhome_1/bin/tnslsnr LISTENER -inherit
oracle     15794       1  0 15:59 ?        00:00:00 /u01/app/oracle/product/19.0.0/dbhome_1/bin/tnslsnr LISTENER_SHARED -inherit
oracle     15802    7297  0 16:00 pts/1    00:00:00 grep --color=auto tns
[oracle@orcl admin]$

4. Now edit the Local Listener, Dispatcher & Shared Server parameters:


SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 ORCLPDB                        READ WRITE NO
SQL>
SQL> show parameter local

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
local_listener                       string
parallel_force_local                 boolean     FALSE
SQL>
SQL> alter system set local_listener='(address=(protocol=tcp)(host=orcl.oraeasy.com)(port=1526))','(address=(protocol=tcp)(host=orcl.oraeasy.com)(port=1521))';

System altered.

SQL> show parameter local

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
local_listener                       string      (address=(protocol=tcp)(host=o
                                                 rcl.oraeasy.com)(port=1526)),
                                                 (address=(protocol=tcp)(host=o
                                                 rcl.oraeasy.com)(port=1521))
parallel_force_local                 boolean     FALSE
SQL>

SQL> show parameter shared_servers

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
max_shared_servers                   integer
shared_servers                       integer     1
SQL>
SQL> show parameter max_shared_servers

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
max_shared_servers                   integer

SQL> show parameter DISPATCHERS

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
dispatchers                          string      (PROTOCOL=TCP) (SERVICE=orcldc
                                                 XDB)
max_dispatchers                      integer
SQL>
SQL> ALTER SYSTEM SET DISPATCHERS='(ADDRESS=(PROTOCOL=TCP)(DISPATCHERS=25))';

System altered.

SQL> ALTER SYSTEM SET SHARED_SERVERS = 50;

System altered.

SQL> alter system set max_shared_servers=100;

System altered.

SQL> show parameter shared_servers

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
max_shared_servers                   integer
shared_servers                       integer     50
SQL>
SQL>  show parameter DISPATCHERS

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
dispatchers                          string      (PROTOCOL=TCP) (SERVICE=orcldc
                                                 XDB), (ADDRESS=(PROTOCOL=TCP)(
                                                 DISPATCHERS=25))
max_dispatchers                      integer
SQL>
SQL> show parameter max_shared_servers

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
max_shared_servers                   integer     100

SQL> alter session set container=ORCLPDB;

Session altered.

SQL> show parameter local

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
local_listener                       string      (address=(protocol=tcp)(host=o
                                                 rcl.oraeasy.com)(port=1526)),
                                                 (address=(protocol=tcp)(host=o
                                                 rcl.oraeasy.com)(port=1521))
parallel_force_local                 boolean     FALSE
SQL>
SQL>  show parameter shared_servers

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
max_shared_servers                   integer
shared_servers                       integer     50
SQL>
SQL> show parameter DISPATCHERS

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
dispatchers                          string      (PROTOCOL=TCP) (SERVICE=orcldc
                                                 XDB), (ADDRESS=(PROTOCOL=TCP)(
                                                 DISPATCHERS=25))
max_dispatchers                      integer
SQL>
SQL> show parameter max_shared_servers

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
max_shared_servers                   integer     100

5. Now check the Listener status and test TNSPING:

[oracle@orcl admin]$ lsnrctl status LISTENER_SHARED

LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 07-DEC-2025 16:14:27

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

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=orcl.oraeasy.com)(PORT=1526)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER_SHARED
Version                   TNSLSNR for Linux: Version 19.0.0.0.0 - Production
Start Date                07-DEC-2025 15:59:27
Uptime                    0 days 0 hr. 15 min. 0 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /u01/app/oracle/product/19.0.0/dbhome_1/network/admin/listener.ora
Listener Log File         /u01/app/oracle/diag/tnslsnr/orcl/listener_shared/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=orcl.oraeasy.com)(PORT=1526)))
Services Summary...
Service "2c3d6bacf692345be0633350a8c050ed" has 1 instance(s).
  Instance "orcldc", status READY, has 1 handler(s) for this service...
Service "ORCLDC" has 1 instance(s).
  Instance "orcldc", status READY, has 1 handler(s) for this service...
Service "orcldcXDB" has 1 instance(s).
  Instance "orcldc", status READY, has 1 handler(s) for this service...
Service "orclpdb" has 1 instance(s).
  Instance "orcldc", status READY, has 1 handler(s) for this service...
The command completed successfully
[oracle@orcl admin]$
[oracle@orcl admin]$ lsnrctl status LISTENER

LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 07-DEC-2025 16:14:33

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

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=orcl.oraeasy.com)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 19.0.0.0.0 - Production
Start Date                07-DEC-2025 11:32:03
Uptime                    0 days 4 hr. 42 min. 30 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /u01/app/oracle/product/19.0.0/dbhome_1/network/admin/listener.ora
Listener Log File         /u01/app/oracle/diag/tnslsnr/orcl/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=orcl.oraeasy.com)(PORT=1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
Services Summary...
Service "2c3d6bacf692345be0633350a8c050ed" has 1 instance(s).
  Instance "orcldc", status READY, has 1 handler(s) for this service...
Service "ORCLDC" has 1 instance(s).
  Instance "orcldc", status READY, has 1 handler(s) for this service...
Service "orcldcXDB" has 1 instance(s).
  Instance "orcldc", status READY, has 1 handler(s) for this service...
Service "orclpdb" has 1 instance(s).
  Instance "orcldc", status READY, has 1 handler(s) for this service...
The command completed successfully
[oracle@orcl admin]$
[oracle@orcl admin]$ tnsping ORCLDCSH

TNS Ping Utility for Linux: Version 19.0.0.0.0 - Production on 07-DEC-2025 16:04:12

Copyright (c) 1997, 2025, Oracle.  All rights reserved.

Used parameter files:
/u01/app/oracle/product/19.0.0/dbhome_1/network/admin/sqlnet.ora


Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = orcl.oraeasy.com)(PORT = 1526))) (CONNECT_DATA = (SERVER = SHARED) (SERVICE_NAME = orcldc)))
OK (10 msec)
[oracle@orcl admin]$
[oracle@orcl admin]$ tnsping ORCLPDBSH

TNS Ping Utility for Linux: Version 19.0.0.0.0 - Production on 07-DEC-2025 16:04:21

Copyright (c) 1997, 2025, Oracle.  All rights reserved.

Used parameter files:
/u01/app/oracle/product/19.0.0/dbhome_1/network/admin/sqlnet.ora


Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = orcl.oraeasy.com)(PORT = 1526))) (CONNECT_DATA = (SERVER = SHARED) (SERVICE_NAME = orclpdb)))
OK (0 msec)
[oracle@orcl admin]$


6. Now open different terminals and make connections with Shared TNS as well as with Dedicated TNS:

[oracle@orcl ~]$ sqlplus sys@ORCLDC as sysdba

SQL*Plus: Release 19.0.0.0.0 - Production on Sun Dec 7 16:15:08 2025
Version 19.27.0.0.0

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

Enter password:

Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.27.0.0.0


[oracle@orcl ~]$ sqlplus sys@ORCLPDB as sysdba

SQL*Plus: Release 19.0.0.0.0 - Production on Sun Dec 7 16:15:30 2025
Version 19.27.0.0.0

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

Enter password:

Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.27.0.0.0

[oracle@orcl ~]$ sqlplus sys@ORCLDCSH as sysdba

SQL*Plus: Release 19.0.0.0.0 - Production on Sun Dec 7 16:30:20 2025
Version 19.27.0.0.0

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

Enter password:

Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.27.0.0.0

[oracle@orcl ~]$ sqlplus sys@ORCLPDBSH as sysdba

SQL*Plus: Release 19.0.0.0.0 - Production on Sun Dec 7 16:30:27 2025
Version 19.27.0.0.0

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

Enter password:

Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.27.0.0.0


7. Now use below query to check whether the connection coming from Shared or Dedicated server:

SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 ORCLPDB                        READ WRITE NO

SQL> col username for a5
SQL> col SERVICE_NAME for a15
SQL> select username,sid,PROGRAM, SERVICE_NAME, SERVER FROM V$SESSION where username is not null;

USERN        SID PROGRAM                                          SERVICE_NAME    SERVER
----- ---------- ------------------------------------------------ --------------- ---------
SYS            6 oracle@orcl.oraeasy.com (OFSD)                   SYS$BACKGROUND  DEDICATED
SYS           62 sqlplus@orcl.oraeasy.com (TNS V1-V3)             ORCLDC          SHARED
SYS           68 sqlplus@orcl.oraeasy.com (TNS V1-V3)             orclpdb         SHARED
SYS           78 sqlplus@orcl.oraeasy.com (TNS V1-V3)             orclpdb         DEDICATED
SYS          288 sqlplus@orcl.oraeasy.com (TNS V1-V3)             SYS$USERS       DEDICATED
SYS          309 sqlplus@orcl.oraeasy.com (TNS V1-V3)             ORCLDC          DEDICATED



Thank you for reading!

I hope this content has been helpful to you. Your feedback and suggestions are always welcome — feel free to leave a comment or reach out with any queries.

Abhishek Shrivastava

📧 Email: oraeasyy@gmail.com
🌐 Website: www.oraeasy.com

Follow Us

Comments