- 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.
- Environment:
- 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:
All the above parameters can be modified dynamically without bouncing the database instance.
| Hostname | orcl.oraeasy.com |
|---|---|
| Database Name | orcldb |
| Database Version | 19.27 |
| Existing Listener | LISTENER (1521) |
| Shared Listener | LISTENER_SHARED (1526) |
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

Comments
Post a Comment