专有模式&共享模式

专有模式:当一个用户请求连接到ORACLE的时候,ORACLE会专门的为这个user process 分配一个server process

共享模式:一个server process 可以服务多个user process.如果要使用这个功能,必须使用net services.也就是说必须配置tns。它适合用于高并发,事物量小,如果这个时候采用了共享模式,可以大大减少由于高度并发对于ORACLE服务器的资源消耗。缺点:由于它是用一个queue 来管理,所以只要有一个会话死了,那么后面的会话将等待,也就是该服务器进程上的所有用户将被阻塞,另外不能用共享模式执行批处理,大数据量的处理,不能应用与数据仓库,不能执行DBA管理任务。

配置共享服务初始化参数:

1.       设置shared_servers :指定了当instance 启动的时候 shared server process 启动的数量,不要将这个参数设置得太大,否者启动数据库instance 的时候 就会花更多时间,Oracle启动过后会根据负载来动态调整shared_servers。如果为0,表示数据库没有启动共享服务模式。 这个参数是配置shared server 必须的,而且只有这个参数是必须的。

2.       设置max_shared_serversORACLE在同一个时刻最大能够使用的 shared server process.不要将这个参数设置小于 shared_servers,如果动态修改shared_servers大于max_shared_serversORACLE会覆盖max_shared_servers的值,此时你需要修改max_shared_servers.同时也不能大于processes。这个参数是为了给占用很大资源操作而设的(批处理),为了预留一些process DBA任务(rman备份)

3.       设置 shared_server_sesions: 指定了总共允许的的shared server session 的数量。如果设置了 这个参数,那么就不要将这个值超过sessions,如果没有设置这个值,那么只要还有空闲的session,就可以被使用。设置这个值是为专有连接预留 user sessions.

4.       设置dispatchers:配置 dispatcher process .如果不设置这个参数,只要设置了shared_servers oracle 也会自动设置一个基于tcp协议的dispatcher还需要查看操作系统支持一个dispatcher能处理多少个connections

5.       设置 max_dispatchers:设置同一时刻能够同时运行的dispatchers的数量,必须大于等于 dispatchers ,小于processes这个参数也会被dispatchers覆盖,如果dispatchers大于max_dispatchers

6.       设置circuits:指定了virtual circuits 的总数量。这个不懂

在数据库启动的时候,如果没有指定shared_servers,但是设置了dispatchers,那么ORACLE就认为启动了shared server ,并且设置shared_servers1.

在数据库启动的时候,没有设置shared_servers,没有设置dispatchers,即使以后修改了dispatchers,也不能启动shared server,必须从新启动数据库。

具体步骤(由于只是测试一下,所以就简单配置):

1.       alter system set shared_servers=1;

2.       配置服务名,这里需要注意 一定要 配置SID ,不是SERVICE_NAME,如果不是配的SID会报ORA-12523: TNS 错误。

ORACLE =

  (DESCRIPTION =

    (ADDRESS_LIST =

      (ADDRESS = (PROTOCOL = TCP)(HOST = bluo7)(PORT = 1521))

      (ADDRESS = (PROTOCOL = TCP)(HOST = bluo7)(PORT = 1522))

    )

    (CONNECT_DATA =

      (SERVICE_NAME = xxx)

    )

  )

 

SHARED_SERVER =

  (DESCRIPTION =

    (ADDRESS_LIST =

      (ADDRESS = (PROTOCOL = TCP)(HOST = 16.178.115.186)(PORT = 1521))

      (ADDRESS = (PROTOCOL = TCP)(HOST = 16.178.115.186)(PORT = 1522))

    )

    (CONNECT_DATA =

      (SID = robinson)

      (SERVER = SHARED)

    )

  )

3.       使用共享的方式连接到数据库 conn sys/oracle@shared_server as sysdba,但是这个时候不能关闭数据库,也不能打开数据库,不能备份和恢复。

4.       查询是否使用的是 共享方式连接到数据库

Select username,server from v$session where username is no t null;

关闭共享模式:

sshared_servers参数置为0,那么所有以共享方式连接到数据库都不能成功,但是未释放的共享连接会继续 保持连接,直到断开。如果将shared_servers max_shared_servers都设为0,那么共享连接将被终结。所有的共享方式连接都断开了的话,就可以使用alter system set dispatcher=’’;dispatcher清除,防止下次启动数据库又打开了共享连接方式。

原文地址:https://www.cnblogs.com/hehe520/p/6330707.html