oracle的2种连接进程方式
1.专有服务器进程
2.共享服务器进程
他们做共同的工作:不仅维持连接,而且处理所有的SQL请求,负载非常大。
专有服务器进程是与客户端进程是一对一映射,即时生成,即时消失。用户会话数据和游标状态放在PGA里
共享服务器进程是已经存在的,分为2部分,一种是dispatch进程,一种是共享服务器进程。
dispatch进程与user进程建立连接,把用户请求放入SGA的请求队列里,共享进程取出请求进行处理,处理完后放入SGA响应队列,dispatch进程取出处理结果给用户进程。一个dispatch可以和250或300个客户端进程进行连接。一个请求队列,多个响应队列。用户会话数据和游标状态放在SGA里。
配置共享服务器:
设置初始化参数dispatchers和shared_servers;
dispatchers 设置初始化不同协议dispatcher的数量,不可动态增加(为空时不能直接修改,必须改spfile;不为空时可通过alter system set dispatchers='(protocol=tcp)(dispatchers=1)'修改)
create pfile from spfile;
在pfile中增加一行 *.dispatchers='(protocol=tcp)(dispatchers=1)'
create spfile from pfile;
shared_servers 共享服务器初始化个数,最少启动个数
可选参数:
max_shared_servers 共享服务器最大的个数,
max_dispatchers 限制dispatchers参数的最大的dispatchers的个数
circuits 整个oracle进站和出站的请求包的数目
shared_server_sessions 所有的共享服务器所能处理的会话总数
large_pool_size SGA里large pool大小(注:用户会话数据和游标状态放在SGA里shared pool或者large pool里)
查看是否启动shared server
lsnrctl services
在客户端指定连接方式
1.增加一行在tnsnames.ora文件 (SERVER = DEDICATED)或者 (SERVER = SHARED)
XWX =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)或者(SERVER = SHARED)
(SERVICE_NAME = orcl)
)
)
2.在sqlnet.ora中增加一行 USE_DEDICATED_SERVER=ON;
如何选择使用dedicated server还是shared server
下面3种情况你需选用dedicated server
1.批处理操作
2.作为数据库管理员进行启动停止恢复数据库(shared server不能shutdown)
3.3层架构
2种指定dispatcher进程要连接的listener
1.在tnsnames.ora配置一个listener的连接识别码,在spfile里dispatchers加入参数listener=连接识别码。
2.设置参数local_listener为连接识别码。
相关的动态视图
v$circuit
v$shared_server
v$dispatcher
v$shared_server_monitor
v$queue
v$session