When a user makes a connection to the Oracle instance, a process is created on the server. For Unix/Linux servers, this process is called 'oracleSID' where "SID" is the Oracle identifier. This process is dedicated to that one user's session. Should another user connect to the Oracle instance, another process is dedicated to that user's session. These dedicated server processes act as a go-between from the application to the Oracle instance and back again.
Each of these dedicated server processes consumes memory on the database server. As the number of concurrent connections increases, the amount of memory required by all dedicated server processes increases as well. The database server may not have enough physical memory (RAM) for all of the server processes to support all of the concurrent application users.
Additionally, many of the dedicated server processes may be idle. They are typically waiting for the end user to submit another request to the database. After all, human users are not as fast as computer systems. It takes time for the user to read the information presented in the application and submit another request to the database. So the dedicated server processes can use up a lot of memory for many users who are idle at a specific point in time. At another point in time, the user may be doing something, but other users are idle.
Enter shared server. With shared server (formally called Multi-Threaded Server or MTS), users share the server connections. Instead of a one-to-one ratio between server processes and end users, there is a one-to-many replationship. One shared server process is used by many connected application users. Shared server is used for scalibility ... providing the means to connect many, many users to the instance all at the same time.
This document provides more information, along with instructions on how to set this up.