1、shared server和dedicated server连接方式比较
shared server 连接方式
dedicated server 连接方式
2、shared server process
在服务器上进行ps -ef| grep shared从而得到所有的oracle后台进程如下:
oracle 4476 1 0 19:18 ? 00:00:00 ora_pmon_shared
oracle 4478 1 0 19:18 ? 00:00:00 ora_psp0_shared
oracle 4480 1 0 19:18 ? 00:00:00 ora_mman_shared
oracle 4482 1 0 19:18 ? 00:00:01 ora_dbw0_shared
oracle 4484 1 0 19:18 ? 00:00:01 ora_lgwr_shared
oracle 4486 1 0 19:18 ? 00:00:03 ora_ckpt_shared
oracle 4488 1 0 19:18 ? 00:00:02 ora_smon_shared
oracle 4490 1 0 19:18 ? 00:00:00 ora_reco_shared
oracle 4492 1 0 19:18 ? 00:00:02 ora_cjq0_shared
oracle 4494 1 0 19:18 ? 00:00:04 ora_mmon_shared
oracle 4496 1 0 19:18 ? 00:00:00 ora_mmnl_shared
oracle 4498 1 0 19:18 ? 00:00:00 ora_d000_shared
oracle 4500 1 0 19:18 ? 00:00:00 ora_s000_shared
oracle 4520 1 0 19:18 ? 00:00:00 ora_qmnc_shared
oracle 4535 1 0 19:18 ? 00:00:00 ora_q002_shared
oracle 4537 1 0 19:18 ? 00:00:00 ora_q003_shared
oracle 15255 1 0 23:36 ? 00:00:00 ora_j000_shared
在客户端连接oracle数据库时,不会分配新的进程
客户端程序先连接到监听,然后监听程序通过调度器d000将任务放倒request Queue中,然后由空闲的共享进程s000来进行处理,处理完成之后把结果放倒response Queue中,然后调度器进程d000将结果返回给客户端程序
在服务器端用sqlplus连接的进程
oracle 16046 15677 0 May19 ? 00:00:01 oracleshared (DESCRIPTION=(LOCAL=YES)(ADDRESS=
(PROTOCOL=beq)))
当在远程指定用DEDICATED方式连接时,也会分配一个单独的用户进程进行连接,如下
客户端的tnsnames.ora文件中,在connect_data中添加一行,(SERVER = DEDICATED),从而指定用DEDICATED方式进行连接,连接的进程如下
oracle 16584 1 0 00:08 ? 00:00:00 oracleshared (LOCAL=NO)
2、dedicated server process
常见进程如下:
oracle 17596 1 0 00:37 ? 00:00:00 ora_pmon_dedicated
oracle 17598 1 0 00:37 ? 00:00:00 ora_psp0_dedicated
oracle 17600 1 0 00:37 ? 00:00:00 ora_mman_dedicated
oracle 17602 1 0 00:37 ? 00:00:00 ora_dbw0_dedicated
oracle 17604 1 0 00:37 ? 00:00:00 ora_lgwr_dedicated
oracle 17606 1 0 00:37 ? 00:00:00 ora_ckpt_dedicated
oracle 17608 1 0 00:37 ? 00:00:00 ora_smon_dedicated
oracle 17610 1 0 00:37 ? 00:00:00 ora_reco_dedicated
oracle 17612 1 0 00:37 ? 00:00:00 ora_cjq0_dedicated
oracle 17614 1 0 00:37 ? 00:00:00 ora_mmon_dedicated
oracle 17616 1 0 00:37 ? 00:00:00 ora_mmnl_dedicated
oracle 17618 1 0 00:37 ? 00:00:00 ora_d000_dedicated
oracle 17620 1 0 00:37 ? 00:00:00 ora_s000_dedicated
oracle 17639 1 0 00:38 ? 00:00:00 ora_qmnc_dedicated
oracle 17661 1 0 00:38 ? 00:00:00 ora_q001_dedicated
oracle 17663 1 0 00:38 ? 00:00:00 ora_q002_dedicated
oracle 18086 1 0 00:50 ? 00:00:00 ora_j000_dedicated
客户端连接进去之后,服务器会给你分配一个新的进程,在不指定或者指定为dedicated连接方式之后,进程如下:
oracle 18194 1 1 00:52 ? 00:00:00 oraclededicated (LOCAL=NO)
服务器登陆连接进程如下:
oracle 18215 18214 1 00:53 ? 00:00:00 oraclededicated (DESCRIPTION=(LOCAL=YES)(ADDRESS=PROTOCOL=beq)))
当指定为shared方式连接dedicated server时,会出现如下错误:
C:\Users\Administrator>sqlplus system/orcl@dedicated
SQL*Plus: Release 11.2.0.1.0 Production on 星期一 5月 20 15:56:47 2013
Copyright (c) 1982, 2010, Oracle. All rights reserved.
ERROR:
ORA-12520: TNS: 监听程序无法为请求的服务器类型找到可用的处理程序
请输入用户名:
说明,如果服务连接方式为dedicated server,那么就不能使用shared server的连接方式来进行连接,但是如果是开启了shared server方式,那么还是可以使用dedicated server方式来进行连接的
小结论如下:
1. 如果是dedicated server,则客户端只能创建dedicated server connection
2. 如果是shared server,则客户端能创建dedicated server connection和shared server connection,只要在service name中指定server=dedicated or server=shared.
(1)A dedicated server process, which services only one userprocess
(2)A shared server process, which can service multiple userprocesses
SQL> show parameter dispatcher
NAME TYPE
------------------------------------ ----------------------
VALUE
------------------------------
dispatchers string
(PROTOCOL=TCP)
max_dispatchers integer
SQL> alter system set dispatchers = '' scope=both;
System altered.
SQL> show parameter shared_server
NAME TYPE
------------------------------------ ----------------------
VALUE
------------------------------
max_shared_servers integer
shared_server_sessions integer
shared_servers integer
1
SQL> alter system set shared_servers = 0 scope=both;
System altered
然后再查看数据库的进程的时候,就不会出现D000进程和S000进程了
为何创建的是专有模式的数据库,数据库却自动配置了dispatchers参数,暂时无解!!!!