Oracle 是一门博大精深的技术。玩了2年的oracle,依旧还有很多知识点不清楚。 昨天群里的朋友提到了 DEDICATED 和 SHARE 两种模式。 不清楚,默默的做点功课了。从网上搜了点知识,整理如下: 
专用服务器(DEDICATED):一个客户端连接对应一个服务器进程
共享服务器(SHARE):多个客户端连接对应一个服务器进程,服务器端存在一个进程调度器来管理。它必须使用net services.也就是说必须配置tns。它适合用于高并发,事物量小,如果这个时候采用了共享模式,可以大大减少由于高度并发对于ORACLE服务器的资源消耗。
共享服务器体系:客户进程最终与一个调度程序连接,PMON进程注册了调度程序的位置和负荷,使监听器能够提交到负荷最小的调度程序。一个调度程序能并发地支持多重的客户连接。   
专用服务器体系:每个客户进程与专用服务器进程连接。服务器进程没被任何另外的客户共享。   
    
 另:专用服务器体系结构不支持HTTP和IIOP客户,仅支持TTC客户。
一般我们以oracle默认的专用服务器方式就行了,没必要使用共享服务器模式。一个是我们是使用中间件(如:weblogic)去连oracle的,中间件本身有连接池机制,另外就是oracle的这个共享服务器方式也做的不够好了,有诸多缺点。
共享服务器具有以下一些缺点:
1)共享服务器的代码路径比专用服务器长,所以它天生就比专用服务器慢。
2)存在人为死锁的可能,因为它是串行的,只要一个连接阻塞,则该服务器进程上的所有用户都被阻塞,并且极可能死锁。
3)存在独占事务的可能,因为如果一个会话的事务运行时间过长,它独占共享资源,其它用户只能等待,而专用服务器,每个客户端是一个会话。
4)共享服务器模式限制了某些数据库特性,例如:不能单独启动和关闭实例,不能进行介质恢复,不能使用Log Miner,并且SQL_TRACE没有意义(因为是共享而不是当前会话的)。
MTS减少的内存实际上是专用服务器模式下每个用户连接到操作系统进程所需的内存,但它却使用SGA的Large_Pool来分配UGA,拆东墙补西墙,所减少的内存是很少的。如果用户会话的连接和断开很频繁,数据库进程的创建和删除的开销会非常大,这种情况最好采用共享服务器模式(否则,应该使用连接池技术)。如果客户端一次连接终身使用(会话生命周期内),使用共享服务器模式的意义不大。因为大部分时间,一个会话就连接到一个服务器进程,无法共享服务器进程。
共享服务初始化参数的一些说明:
shared_servers :指定了当instance 启动的时候 shared server process 启动的数量,不要将这个参数设置得太大,否者启动数据库instance 的时候 就会花更多时间,Oracle启动过后会根据负载来动态调整shared_servers。如果为0,表示数据库没有启动共享服务模式。 这个参数是配置shared server 必须的,而且只有这个参数是必须的。
 修改参数:  alter system set shared_servers=1;
max_shared_servers:ORACLE在同一个时刻最大能够使用的 shared server process.不要将这个参数设置小于 shared_servers,如果动态修改shared_servers大于max_shared_servers,ORACLE会覆盖max_shared_servers的值,此时你需要修改max_shared_servers.同时也不能大于processes。这个参数是为了给占用很大资源操作而设的(批处理),为了预留一些process 给DBA任务(rman备份),
shared_server_sesions: 指定了总共允许的的shared server session 的数量。如果设置了这个参数,那么就不要将这个值超过sessions,如果没有设置这个值,那么只要还有空闲的session,就可以被使用。设置这个值是为专有连接预留 user sessions.
dispatchers:配置 dispatcher process .如果不设置这个参数,只要设置了shared_servers ,oracle 也会自动设置一个基于tcp协议的dispatcher。还需要查看操作系统支持一个dispatcher能处理多少个connections
    SQL> select * from v$dispatcher;
max_dispatchers: 设置同一时刻能够同时运行的dispatchers的数量,必须大于等于 dispatchers ,小于processes。这个参数也会被dispatchers覆盖。
circuits:指定了virtual circuits 的总数量。
关闭共享模式:
将shared_servers参数置为0,那么所有以共享方式连接到数据库都不能成功,但是未释放的共享连接会继续 保持连接,直到断开。如果将shared_servers 和max_shared_servers都设为0,那么共享连接将被终结。所有的共享方式连接都断开了的话,就可以使用alter system set dispatcher=’’; 将dispatcher清除,防止下次启动数据库又打开了共享连接方式。
判断oracle是共享模式还是专用模式的方法:
 
1. show parameter shared_server; (注:8i应为:show parameter mts_servers;)
SQL> show parameter shared_server;
NAME                    TYPE        VALUE
------------------------------------ ----------- ------------------------------
max_shared_servers           integer     20
shared_server_sessions         integer     330
shared_servers                integer     1
2.  查看v$session 视图
SQL> Select username,server,program from v$session where username is not null;
USERNAME          SERVER    PROGRAM
------------------------------ --------- ---------------------------------------
SYS                  DEDICATED rman.exe
RMAN                DEDICATED rman.exe
SYS                  DEDICATED rman.exe
SYS                  DEDICATED sqlplus.exe
SYS                  DEDICATED rman.exe
DAVE                DEDICATED toad.exe
SYS                  DEDICATED toad.exe
3. 查看监听: lsnrctl service
C:\Users\Administrator.DavidDai>lsnrctl service
LSNRCTL for 32-bit Windows: Version 11.2.0.1.0 - Production on 26-6月 -2010 11:7:40 Copyright (c) 1991, 2010, Oracle.  All rights reserved.
正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
服务摘要..
服务 "orcl" 包含 1 个实例。
  实例 "orcl", 状态 READY, 包含此服务的 1 个处理程序...
    处理程序:
      "DEDICATED" 已建立:34 已拒绝:0 状态:ready
         LOCAL SERVER
服务 "orclXDB" 包含 1 个实例。
  实例 "orcl", 状态 READY, 包含此服务的 1 个处理程序...
    处理程序:
      "D000" 已建立:0 已被拒绝:0 当前: 0 最大: 1022 状态: ready
         DISPATCHER <machine: DAVIDDAI, pid: 10884>
         (ADDRESS=(PROTOCOL=tcp)(HOST=DavidDai)(PORT=58400))
命令执行成功
4.查看TNSNAMES.ora 文件。如:
ORCL =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = DavidDai)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )
这里是以DEDICATED 专用模式连接 orcl 实例。写上 (SERVER = SHARED) 则是使用共享服务器模式,但是这时shared_server_process需要打开,要不然会出错连不上oracle。要是这段放空没写,那么系统会根据服务器模式自动调节,不过根据实测结果,就算服务器是定义成共享服务器模式,shared_server_process没打开的情况下,在v$session中查到的连接依然是SERVER = DEDICATED。所以基本上我们这段话我们都是可以放空着不写的,但是有时候要连上我们的共享服务器模式的数据库,放空有可能系统认为要用共享服务器方式去连,那时就要声明 SERVER = DEDICATED采用专用服务器方式去连接。
在数据库启动的时候,如果没有指定shared_servers,但是设置了dispatchers,那么ORACLE就认为启动了shared server ,并且设置shared_servers为1. 在数据库启动的时候,没有设置shared_servers,没有设置dispatchers,即使以后修改了dispatchers,也不能启动shared server,必须从新启动数据库。
 
另外,Background process ,以及通过本地连接进来的,只能是DEDICATED .比如说sqlplus user/pass形式
如果数据库没有配置共享服务器,那么客户端只能以DEDICATED方式连接数据库.
ORA-12545 连接因对象主机或对象不存在而失败.
ORA-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,没有扩展名.
# Copyright (c) 1993-1999 Microsoft Corp.
127.0.0.1 localhost
10.85.10.80 DAVIDDAI
 
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. 
 
http://blog.itpub.net/15672129/viewspace-686318
 

Oracle 专用模式(DEDICATED) 和 共享模式(SHARE) (转)的更多相关文章

  1. 再谈AbstractQueuedSynchronizer:共享模式与基于Condition的等待/通知机制实现

    共享模式acquire实现流程 上文我们讲解了AbstractQueuedSynchronizer独占模式的acquire实现流程,本文趁热打铁继续看一下AbstractQueuedSynchroni ...

  2. Java并发系列[3]----AbstractQueuedSynchronizer源码分析之共享模式

    通过上一篇的分析,我们知道了独占模式获取锁有三种方式,分别是不响应线程中断获取,响应线程中断获取,设置超时时间获取.在共享模式下获取锁的方式也是这三种,而且基本上都是大同小异,我们搞清楚了一种就能很快 ...

  3. AbstractQueuedSynchronizer 原理分析 - 独占/共享模式

    1.简介 AbstractQueuedSynchronizer (抽象队列同步器,以下简称 AQS)出现在 JDK 1.5 中,由大师 Doug Lea 所创作.AQS 是很多同步器的基础框架,比如 ...

  4. 再谈AbstractQueuedSynchronizer2:共享模式与基于Condition的等待/通知机制实现

    共享模式acquire实现流程 上文我们讲解了AbstractQueuedSynchronizer独占模式的acquire实现流程,本文趁热打铁继续看一下AbstractQueuedSynchroni ...

  5. Java 并发编程-再谈 AbstractQueuedSynchronizer 2:共享模式与基于 Condition 的等待 / 通知机制实现

    共享模式acquire实现流程 上文我们讲解了AbstractQueuedSynchronizer独占模式的acquire实现流程,本文趁热打铁继续看一下AbstractQueuedSynchroni ...

  6. AbstractQueuedSynchronizer 原理分析 - 独占/共享模式(转)

    1.简介 AbstractQueuedSynchronizer (抽象队列同步器,以下简称 AQS)出现在 JDK 1.5 中,由大师 Doug Lea 所创作.AQS 是很多同步器的基础框架,比如 ...

  7. JUC之AbstractQueuedSynchronizer原理分析 - 独占/共享模式

    1. 简介 AbstractQueuedSynchronizer (抽象队列同步器,以下简称 AQS)出现在 JDK 1.5 中,由大师 Doug Lea 所创作.AQS 是很多同步器的基础框架. R ...

  8. Oracle 专用模式(DEDICATED) 和 共享模式(SHARE)

    Oracle 是一门博大精深的技术.玩了2年的oracle,依旧还有很多知识点不清楚. 昨天群里的朋友提到了 DEDICATED 和 SHARE 两种模式. 不清楚,默默的做点功课了.从网上搜了点知识 ...

  9. Oracle Dedicated server 和 Shared server(专用模式 和 共享模式) 说明(转)

    一.  官网说明 在DBCA 建库的时候,有提示让我们选择连接类型,这里有两种类型:专用服务器模式和共享服务器模式.默认使用专用模式.如下图: Oracle 官方文档对这两种文档的说明如下: Abou ...

随机推荐

  1. 使用Docker构建持续集成与自动部署的Docker集群

    为什么使用Docker " 从我个人使用的角度讲的话  部署来的更方便 只要构建过一次环境 推送到镜像仓库 迁移起来也是分分钟的事情 虚拟化让集群的管理和控制部署都更方便 hub.docke ...

  2. Sumsets(完全背包)

    Sumsets Time Limit: 2000MS   Memory Limit: 200000K Total Submissions: 15045   Accepted: 5997 Descrip ...

  3. Minimum Inversion Number(线段树求逆序数)

    Minimum Inversion Number Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java ...

  4. oracle 10 g 需要启动的2个服务

    开始-> run -> cmd -> services.msc OracleOraDB10g_home1TNSListener OracleServiceORCL

  5. ppt类似工具AxeFile使用心得

    一个所谓的傻瓜式过渡效果自动生成工具.定义好展示窗口大小,加入时序.所谓的闪烁效果,也是相当的滑稽. 是一个非专业的简单的快速PPT工具. 但是体现的确是扁平化的设计思路,很值得深思. ------ ...

  6. js 模板引擎 jade使用语法

    Jade是一款高性能简洁易懂的模板引擎,Jade是Haml的Javascript实现,在服务端(NodeJS)及客户端均有支持. 功能 · 客户端支持 · 超强的可读性 · 灵活易用的缩进 · 块扩展 ...

  7. 「OC」 继承

    一.基本用法 1.设计两个类Bird.Dog 1 // Bird的声明 2 @interface Bird : NSObject 3 { 4 @public 5 int weight; 6 } 7 - ...

  8. dialog组件的jquery封装实现

    (function($){ $.extend({ Dialog : function(id, options){ var option = $.extend({}, options); option. ...

  9. Active MQ C#实现

    原文链接: Active MQ C#实现 内容概要 主要以源码的形式介绍如何用C#实现同Active MQ 的通讯.本文假设你已经正确安装JDK1.6.x,了解Active MQ并有一定的编程基础. ...

  10. (Problem 36)Double-base palindromes

    The decimal number, 585 = 10010010012(binary), is palindromic in both bases. Find the sum of all num ...