专用服务器:一个客户端连接对应一个服务器进程
共享服务器:多个客户端连接对应一个服务器进程,服务器端存在一个进程调度器来管理。
其实这个我之前也没搞的清楚,所以像是测试机那样的我就直接用了 专用服务器 模式,因为说明上是写预期连接数较少的情况下,
而正式机上,都建了共享服务器模式。其实现在看来,真是没必要。一个是我们是使用中间件去连oracle的,中间件本身有连接池机制,
另外就是oracle的这个共享服务器方式也做的不够好了,有诸多缺点。
从网上查来,共享服务器具有以下一些缺点:
1)共享服务器的代码路径比专用服务器长,所以它天生就比专用服务器慢。
2)存在人为死锁的可能,因为它是串行的,只要一个连接阻塞,则该服务器进程上的所有用户都被阻塞,并且极可能死锁。
3)存在独占事务的可能,因为如果一个会话的事务运行时间过长,它独占共享资源,其它用户只能等待,而专用服务器,每个客户端是一个会话。
4)共享服务器模式限制了某些数据库特性,例如:不能单独启动和关闭实例,不能进行介质恢复,不能使用Log Miner,并且SQL_TRACE没有意义(因为是共享而不是当前会话的)。
MTS减少的内存实际上是专用服务器模式下每个用户连接到操作系统进程所需的内存,但它却使用SGA的Large_Pool来分配UGA,拆东墙补西墙,所减少的内存是很少的。
如果用户会话的连接和断开很频繁,数据库进程的创建和删除的开销会非常大,这种情况最好采用共享服务器模式(否则,应该使用连接池技术)。
如果客户端一次连接终身使用(会话生命周期内),使用共享服务器模式的意义不大。因为大部分时间,一个会话就连接到一个服务器进程,无法共享服务器进程。
因此,我们后面建的实例,就以oracle默认的专用服务器方式就行了,没必要使用共享服务器模式。
判断oracle是共享模式还是专用模式有以下方法:
1) show parameter shared_server; (注:8i应为:show parameter mts_servers;)
如果数值> 0 ,就是enable了共享服务器.
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
max_shared_servers integer 20
shared_server_sessions integer 330
shared_servers integer 1
2).在配置为共享服务器的情况,Client可以用共享服务器或者专用服务器来联接数据库,这个参数的控制是在tnsnames.ora里设定的。如:
DXPT =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.10.10)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = dxpt)
)
)
这样就是以DEDICATED 专用模式连接 dxpt 实例
写上 (SERVER = SHARED) 则是使用共享服务器模式,但是这时shared_server_process需要打开,要不然会出错连不上oracle
要是这段放空没写,那么系统会根据服务器模式自动调节,
不过根据实测结果,就算服务器是定义成共享服务器模式,shared_server_process没打开的情况下,在v$session中查到的连接
依然是SERVER = DEDICATED
所以基本上我们这段话我们都是可以放空着不写的,但是有时候要连上我们的共享服务器模式的数据库,
放空有可能系统认为要用共享服务器方式去连,那时就要声明 SERVER = DEDICATED采用专用服务器方式去连接。
另外,Background process ,以及通过本地连接进来的,只能是DEDICATED .比如说sqlplus user/pass形式
如果数据库没有配置共享服务器,那么客户端只能以DEDICATED方式连接数据库.
=================
oracle的 专用模式和共享模式(2008-09-24 17:43:10)转载标签:it 分类:oracle基础
来源一:
专用模式和共享模式的本质区别就是:用户进程对ORACLE服务器所在的计算机的内存区里”服务器进程“是专用还是共享。
具体表现在:
1、在共享模式下,多个用户进程共享一个服务器进程;在专用模式下,ORACLE为每一个用户进程准备一个服务器进程。
2、在实际情况中,应用系统与数据库的连接请求总是很多,导致用户进程也很多,如果你的内存和CPU是有限的,同时,用户进程对数据库的操作占用空间不多,那你就把数据库连接模式设置为共享模式,这样,ORACLE内存区的服务器进程只是有限的几个,这几个服务器进程会通过一个调度程序来应付若干用户进程的请求。
3、如果你的硬件资源比较好,就设置成专用模式,每一个用户进程都有一个服务器进程对应,这样,你的用户进程对数据的处理会非常快!
简单的说,连接客户数少,需要长时间占用数据库的,建议用专有模式,如果连接客户数众多,使用共享模式。
来源二:
共享服务器体系:客户进程最终与一个调度程序连接,PMON进程注册了调度程序的位置和负荷,使监听器能够提交到负荷最小的调度程序。一个调度程序能并发地支持多重的客户连接。
专用服务器体系:每个客户进程与专用服务器进程连接。服务器进程没被任何另外的客户共享。
另:专用服务器体系结构不支持HTTP和IIOP客户,仅支持TTC客户。
来源三:
专用是指一个用户进程对应一个服务器进程,也就是说,每个服务器进程被特定用户进程所独占。如果有50个用户进程,则会对应50个服务器进程。
共享是多个用户进程可以共享一个服务器进程,中间是通过一个调度进程实现的,由于共享,所以服务器消耗较小。具体的配置,需要配置mts参数。
来源四:
建议不要选共享的!
就是配置MTS而已
专用的安装好后也可以配置的
再说了,mts不能乱用的
来源五:
1、是否为配置为共享服务器,最主要的参数是
8i mts_servers
9i shared_server
show parameter shared_server mts_servers
如果数值 > 0 ,就是enable了共享服务器.
2、在配置为共享服务器的情况,Client可以选择用共享服务器或者专用服务器来连接到数据库,这个参数的控制是在tnsnames.ora里设定的
aaaa=
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = aaaa)(PORT = 1521))
)
(CONNECT_DATA =
(SID = aa)
(SERVER = DEDICATED)
)
)
红色部分指定了用DEDICATED方式连接DB。
另外,Background process ,以及通过本地连接进来的,只能是DEDICATED,比如说sqlplus user/pass 形式,如果DB没有配置共享服务器,那么Client只能以DEDICATED方式连接DB。
3、判断一个已经连接的session的连接方式有两种方法
A
select server from v$session
where ...
如果server = 'DEDICATED'则是DEDICATED方式
server='SHARED'则是shared方式,并且正有shared_server_process为其服务
server='NONE'的话,则是shared方式,并且当前没有shared_server_process为其服务。
B. 仅用于Unix 底下,似乎windown不行
连接v$session, v$process 看process中的program
1 select p.program,s.server from v$session s , v$process p
2* where s.paddr = p.addr
如果 program 为 。。(S0NN) 的,则是shared方式,并且正有shared_server_process为其服务。
如果 program 为 。。(D0NN) 的,则是shared方式,并且当前没有shared_server_process为其服务。
如果 program 为 其它的,则是'DEDICATED'方式。
来源六:(ORACLE用户文档)
In Dedicated Server Mode, there is a dedicated server process for each user process.
Select this option when the number of total clients is expected to be small, or when
database clients will make persistent, long-running requests to the database.
In Shared Server Mode, several client connections share a database-allocated pool of
resources. Use this mode when a large number of users need to connect to the
database. It is also useful when database memory is limited and for better
performance, since you can have more client connections to the database than in
dedicated server mode with the same memory. If you choose shared server mode, you
must also indicate the number of server processes you want to create when an instance
is started up. For more information about setting this parameter, click Help.
来源七:
在建立了instance后,如果想修改这个模式,直接通过dbassist可以修改。但现在我们的用户数一般都不是很多,所以,目前的用户表现不明显。
来源八:
要修改和查看工作模式,通过以下方式来进行。
1、修改工作模式
在init参数中设置(8i,MTS_dispatchers, 9i, dispatchers ) ,如果要起用共享模式,把mts_dispatchers = "(protocol=TCP)" 行前面的#号去掉,如果要禁止,就加一个#屏蔽这一行。当然,对这个共享模式,有很多参数,请用DBACA来修改。
2、如果查看是否起用了共享模式
如果下面的记录为空,表示没有起用共享,是专用模式。
SQL> select * from v$dispatcher;
no rows selected
SQL>
否则,就是共享模式,并有相关的值。
来源九:
ORA-12571:TNS 包写入程序失败。
这个错误与启用了MTS_dispatchers,出现错误只要按楼上的方法修改INIT参数即可。
来源十:
对于启用了共享模式后,客户端不能连接到服务器,
出现 ORA-12545 连接因对象主机或对象不存在而失败.
查看帮助:
TNS-12545 Connect failed because target host or object does not exist
Cause: The address specified is not valid, or the program being connected to does not exist.
Action: Ensure the ADDRESS parameters have been entered correctly; the most likely incorrect parameter is the node name. Ensure that the executable for the server exists (perhaps "oracle" is missing). If the protocol is TCP/IP, edit the TNSNAMES.ORA file to change the host name to a numeric IP address and try again.
根据上面的要求修改,还是不行,后来修改了HOST文件,在其中增加了服务器的主机对应IP地址,问题得以解决.
WINDOWS XP的HOST文件在c:windows\system32\drivers\etc 下面.文件名就叫HOST,没有扩展名.
我的机器以前的HOST如下:
# Copyright (c) 1993-1999 Microsoft Corp.
#
# This is a sample HOSTS file used by Microsoft TCP/IP for Windows.
#
# This file contains the mappings of IP addresses to host names. Each
# entry should be kept on an individual line. The IP address should
# be placed in the first column followed by the corresponding host name.
# The IP address and the host name should be separated by at least one
# space.
#
# Additionally, comments (such as these) may be inserted on individual
# lines or following the machine name denoted by a '#' symbol.
#
# For example:
#
# 102.54.94.97 rhino.acme.com # source server
# 38.25.63.10 x.acme.com # x client host
127.0.0.1 localhost
后在最后一行增加服务器ZLTECHCENTER的IP地址后,如下:
127.0.0.1 localhost
192.168.0.210 zltechcenter
注意,是在客户端修改HOST文件。
当然,如果客户端的TNSNAME的连接类型选为专用模式,就可以不用修改HOST,也可以使用.
注意:默认连接类型是根据服务器的连接类型来判定的.如果服务器是共享,那么默认的连接类型:缺省数
据库,就是共享,否则,就是专用。