Dedicated Server
一个Session就建立一个Dedicated Server(本质上就是一个进程)与客户端的连接,直接与客户端进行交互。该Dedicated进程负责客户端SQL的接受、执行以及结果响应。
Shared Server
本质上就是一个共享连接进程池。在共享服务器连接模型下,当数据库启动时候,共享池同时建立。共享连接进程不会像Dedicated方式一样直接和客户端交互。客户端首先和Dispatcher 进程交互,提交SQL给Dispatcher,然后Dispatcher把SQL请求放入位于SGA的请求队列 中,当共享池 中有空闲的进程 ,就会由该进程执行SQL,执行完成后,把结果放入响应队列 ,Dispatcher进程看到结果后,会把响应结果返回给客户。
TNS Listener
客户请求连接到Oracle,必定有一个TNS string的配置,该配置指定了连接的IP,PORT,SID以及连接类型(Dedicated和Shared)
连接细节描述如下:
客户提交TCP连接到指定的IP和端口,在服务器端,TNS Listener在请求端口上侦听客户请求,如果是Dedicated方式,那么创建一个Dedicated的进程,然后把与该客户端的连接转接给新创建的这个dedicated进程;如果是Shared方式,那么TNS Listener会从Dispatcher池中选择一个可用的Dispatcher,然后Listener吧该Dispatcher的端口号返回给客户端,客户端在发起到Dispatcher的连接请求然后建立连接。其实,Listener选到Dispatcher后,如果操作系统和数据库支持的话,会直接把连接转接给Dispatcher,只有当直接转接无法完成时,才会返回Dispatcher端口然后又客户端在连接这个过程。