专有模式:当一个用户请求连接到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_servers:ORACLE在同一个时刻最大能够使用的 shared server process.不要将这个参数设置小于 shared_servers,如果动态修改shared_servers大于max_shared_servers,ORACLE会覆盖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_servers为1.
在数据库启动的时候,没有设置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;
关闭共享模式:
s将shared_servers参数置为0,那么所有以共享方式连接到数据库都不能成功,但是未释放的共享连接会继续 保持连接,直到断开。如果将shared_servers 和max_shared_servers都设为0,那么共享连接将被终结。所有的共享方式连接都断开了的话,就可以使用alter system set dispatcher=’’;将dispatcher清除,防止下次启动数据库又打开了共享连接方式。