| Lesson 5 | Starting Oracle Shared Server |
| Objective | Start and verify Shared Server correctly, then connect. |
What Shared Server is: an Oracle database architecture in which many client sessions share a smaller pool of server processes. It helps when you have thousands of concurrent, mostly idle or short-lived connections (e.g., many web users).
When to use it: prefer mid-tier connection pooling (UCP/ODP.NET/OCI) for app servers. Consider Shared Server when you cannot reduce session counts (many ad-hoc or tool sessions), or for specific legacy deployments. It is optional and fully supported in modern releases.
SYSDBA.lsnrctl status should show your service).You can enable it dynamically or persistently. In CDBs, run in the correct container.
-- As SYSDBA
-- Minimum pool
ALTER SYSTEM SET SHARED_SERVERS = 2 SCOPE=BOTH;
\-- Create TCP dispatchers (adjust protocol/attributes for your network)
ALTER SYSTEM SET DISPATCHERS = '(PROTOCOL=TCP)(DISPATCHERS=2)' SCOPE=BOTH;
\-- Optional: request multiple shared servers during peak periods
ALTER SYSTEM SET MAX\_SHARED\_SERVERS = 50 SCOPE=BOTH;
-- In SPFILE (persists across restarts)
ALTER SYSTEM SET SHARED_SERVERS = 2 SCOPE=SPFILE;
ALTER SYSTEM SET DISPATCHERS = '(PROTOCOL=TCP)(DISPATCHERS=2)' SCOPE=SPFILE;
ALTER SYSTEM SET MAX_SHARED_SERVERS = 50 SCOPE=SPFILE;
\-- Then restart the instance
-- Check parameters
SHOW PARAMETER shared_servers
SHOW PARAMETER dispatchers
SHOW PARAMETER max_shared_servers
\-- Sessions and queues (simple sanity checks)
SELECT NAME, VALUE FROM V\$PARAMETER
WHERE NAME IN ('shared\_servers','dispatchers','max\_shared\_servers');
SELECT \* FROM V\$SHARED\_SERVER WHERE STATUS = 'BUSY' OR STATUS = 'FREE';
SELECT \* FROM V\$DISPATCHER;
\-- Listener view (if available)
\-- lsnrctl status (run at OS prompt)
There is no special client syntax required. Use standard Easy Connect or a TNS alias.
-- OS authentication (local)
sqlplus / AS SYSDBA
\-- Or service-based (password file / remote)
sqlplus sys@//dbhost:1521/ORCLPDB1 AS SYSDBA
V$DISPATCHER.
-- Are dispatchers up?
SELECT NAME, STATUS, MESSAGES FROM V$DISPATCHER;
\-- Are shared servers spawning?
SELECT SERVER\_ID, STATUS, REQUESTS FROM V\$SHARED\_SERVER;
\-- Are requests queuing?
SELECT \* FROM V\$QUEUE WHERE TYPE IN ('COMMON','DISPATCHER');
\-- Is the listener seeing the service?
\-- lsnrctl status (look for your service and handler(s))
CONNECT INTERNAL is desupported. Use SYSDBA connections.For monitoring, automation, and fleet operations, use Enterprise Manager Cloud Control. For connectivity modernization from legacy SQL*Net/Net8 content, prefer Easy Connect Plus with service names and wallets where appropriate.
Server Manager (svrmgrl) was Oracle’s pre-9i DBA tool (CLI/GUI). It was retired and functionality moved into SQL*Plus. Any references to svrmgr, svrmgr30, or CONNECT INTERNAL are strictly historical; follow the modern equivalents above.
-- Minimal enablement
ALTER SYSTEM SET SHARED_SERVERS = 2 SCOPE=BOTH;
ALTER SYSTEM SET DISPATCHERS = '(PROTOCOL=TCP)(DISPATCHERS=2)' SCOPE=BOTH;
\-- Verify
SHOW PARAMETER shared\_servers
SHOW PARAMETER dispatchers
SELECT \* FROM V\$DISPATCHER;
SELECT \* FROM V\$SHARED\_SERVER;
\-- Connect (examples)
sqlplus / AS SYSDBA
sqlplus sys@//dbhost:1521/ORCLPDB1 AS SYSDBA