共享服务器模式完全是在服务器端进行配置的,客户端并不能区分是专用服务器模式还是共享服务器模式;
使用共享服务器模式的时候,实例会增加一些新的后台进程和内存结构,并且监听进程会更改其监听方式;
新增的后台进程为:dispatchers and shared servers
新增的内存结构为:common queue和 response queue
在共享服务器模式下可以有多个dispatcher进程,并且每个dispatch进程有一个response queue,但是他们共用一个 common request queue.
在共享服务器模式中没有使用PGA,而是使用SGA中的large pool中的UGA(user globalarea),UGA的作用相当于专用模式下的PGA,但是UGA可以是在SGA中的,可以被重复利用;
配置共享服务器模式
在配置共享服务器模式的时候,两个初始化参数是非常重要的:dispatchers and shared_servers
sql>altersystem set dispatchers='(dispatchers=2)(protocol=tcp)';
sql>altersystem set shared_servers=20;
max_shared_servers:决定在实例启动的时候需要启动多少个shared_servers,如果max_shared_servers没有设置,那么其值参考processes的设置,每8个processes对应1个shared_servers,可以计算出来;
max_dispatchers:需要启动多少个dispachers,配置该参数的时候需要注意两个问题,配置的数量和配置的协议
共享服务器模式主要用于OLTP系统,专用服务器模式主要用于OLAP,数据仓库系统
数据库管理员的工作是通过专用服务器模式来完成的;
如果数据库被更改为共享服务器模式,当需要使用专用服务器来完成批处理和管理工作的用户可以更改其客户端的tnsnames.ora文件,增加如下内容:(SERVER=DEDICATED)
--将数据库配置为共享服务器模式
alter system setdispatchers='(protocol=tcp)(dispatchers=2)' scope=memory;
alter system setshared_servers=4 scope=memory;
alter systemregister;
--将数据库重新配置为默认的专用服务器模式
alter system setlocal_listener='' scope=memory;
alter system setservice_names='' scope=memory;
alter system setdispatchers='' scope=memory;
alter system setshared_servers=0 scope=memory;
alter systemregister;