oracle server = shared,Oracle 共享服务器(Shared Server/MTS)的配置简析

Oracle 9i 下的共享服务器 Shared Server(8i 中的多线程服务器 MTS )主要用在 OLTP 业务中,服务器进程每次处理业务只需很短的

Oracle 9i 下的共享服务器 Shared Server(8i 中的多线程服务器 MTS )主要用在 OLTP 业务中,服务器进程每次处理业务只需很短的时间,大多在空闲状态,在这种情况下,可以用较少的资源,处理较多的用户请求。

共享服务器的配置

1.设置 DISPATCHERS 参数:

在 pfile 中添加:

*.DISPATCHERS='(PROTOCOL=TCP)(SERVICE=SKYSH)(DISPATCHERS=2)(PROTOCOL=IPC)(DISPATCHERS=1)'

以上方法启动之后,DISPATCHER 的端口是随机分配的,如果要固定每个 DISPATCHER 的端口,可以用一下方法:

使用不同端口:

*.DISPATCHERS='(ADDRESS=(PROTOCOL=TCP)(PORT=5000))(DISPATCHERS=1)','(ADDRESS=(PROTOCOL=TCP)(PORT=5001))(DISPATCHERS=1)'

使用相同端口:

*.dispatchers='(ADDRESS=(PROTOCOL=TCP)(PORT=5130))(SERVICE=SKYSHR)(DISPATCHERS=1)'

如果是 spfile 启动,先用 create pfile from spfile 创建 pfile,修改好之后,再用 create spfile from pfile 创建 spfile。

注:虽然 DISPATCHERS 是动态参数,但只能用 alter system set DISPATCHERS 来临时添加删除 dispatcher,重启之后又恢复原值,且不能使用 scope 参数。

其中,SERVICE=SKYSH 参数可以不指定,如果不指定,则需要指定 service_names 和 instance_name 初始参数,当 instance 启动时,PMON 会动态将 SERVICE 或者 service_names 指定的值邦定到 LISTENER,并生成 dispatchers。

DISPATCHERS=2 如果不指定,那么默认值是 1。

PROTOCOL:当使用 Shared Server 连接时,必须通过 Oracle Net Services,即使客户端和数据库在同一台机子上,如果在 Windows NT 上,dispatchers 只能使用 TCP/IP 协议。

2.设置客户端 tnsnames.ora 文件:

SKY3 =

(DESCRIPTION =

(ADDRESS_LIST =

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

)

(CONNECT_DATA =

(SERVICE_NAME = SKYSH.heysky.net)

(SERVER = SHARED)

)

)

其中,SERVICE_NAME = SKYSH.heysky.net 中的值必须是动态邦定的 service_name.db_domain,否则会产生 ORA-12523 错误:

ERROR:

ORA-12523: TNS:listener could not find instance appropriate for the client connection

使用共享服务器连接,必须指定 (SERVER = SHARED),如果不指定,则作为 DEDICATE 连接。

3.SHARED_SERVERS 参数:

该参数指定当 instance 启动时,初始生成的共享服务器进程数量,如果要使用共享服务器,该值必须大于 0,否则将产生 ORA-12520 错误:

ERROR:

ORA-12520: TNS:listener could not find available handler for requested type of server

通过动态改变该参数,可以增加减少默认的共享服务器进程数量,或者在不停止数据库的情况下禁止共享服务器。当动态将其设置为 0 时,共享服务器进程在完成所有工作,并空闲一段时间之后终止,可以通过查看 v$shared_server 动态视图来查看共享服务器的状态。

4.其他一些相关参数:

MAX_DISPATCHERS:最大 DISPATCHER 数量,默认值是 5,如果 DISPATCHERS 中设置的所有 DISPATCHER 数量之和大于 5,那么 MAX_DISPATCHERS 等于这个和数。

MAX_SHARED_SERVERS:最大共享服务器进程,当初始分配的 SHARED_SERVERS 不够时,Oracle 会继续生成共享服务器,直到这个最大值,当空闲时,Oracle 会终止空闲的进程,直到 SHARED_SERVERS 中指定的值为止。

CIRCUITS:改值一般等于 SESSIONS 的数量。

SHARED_SERVER_SESSIONS:共享服务器连接所能用的最大 SESSION 值,一般可以设置为小于 CIRCUITS and SESSIONS -5 的值,以便给 DEDICATE 连接留下一定的 SESSION 数。

5.一些注意事项:

当 sysdba 已 shared server 连接时,不能执行 start up、shut down 或者 recovery 命令,否则可能出现如下错误:

ORA-00106: cannot startup/shutdown database when connected to a dispatcher

当使用共享服务器的时候,需要设置 LARGE_POOL_SIZE 参数,并且要足够,因为,当使用共享服务器的时候,本来在 PGA 中的 cursor state、User session data 信息会放到 LARGE POOL 中,如果 LARGE_POOL_SIZE 没有设置,就会放到 SHARE POOL 这将会使 SHARE POOL 产生碎片,影响性能。

6.一些相关动态视图:

V$CIRCUIT

V$SHARED_SERVER

V$DISPATCHER

V$SHARED_SERVER_MONITOR

V$QUEUE

V$SESSION

例子:查看使用哪种方式连接数据库

SQL> select sid from v$mystat where rownum=1;

SID

----------

9

SQL> select server from v$session

2 where sid=9;

SERVER

---------

SHARED

7.查看 listener 信息:

使用 Shared Server 时,当 Instance 启动时,PMON 会动态将 service_names 参数,或 DISPATCHERS 中的 SERVICE 参数设定的值邦定到 LISTENER,并为该 SERVICE 分配相应的 DISPATCHER,这些信息可以通过 LSNRCTL 命令来获得:

C:\Documents and Settings\Administrator>lsnrctl

LSNRCTL for 32-bit Windows: Version 9.2.0.3.0 - Production on 17-MAY-2006 23:22:58

Copyright (c) 1991, 2002, Oracle Corporation. All rights reserved.

Welcome to LSNRCTL, type "help" for information.

LSNRCTL> status

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=heysky)(PORT=1521)))

STATUS of the LISTENER

------------------------

Alias LISTENER

Version TNSLSNR for 32-bit Windows: Version 9.2.0.3.0 - Produc

tion

Start Date 17-MAY-2006 21:41:12

Uptime 0 days 1 hr. 46 min. 13 sec

Trace Level off

Security OFF

SNMP OFF

Listener Parameter File E:\oracle\ora92\network\admin\listener.ora

Listener Log File E:\oracle\ora92\network\log\listener.log

Listening Endpoints Summary...

(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=heysky)(PORT=1521)))

(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC0ipc)))

Services Summary...

Service "PLSExtProc" has 1 instance(s).

Instance "PLSExtProc", status UNKNOWN, has 1 handler(s) for this service...

Service "SKYSHARED.heysky.net" has 1 instance(s).

Instance "sky", status READY, has 4 handler(s) for this service...

Service "SKYTEST" has 1 instance(s).

Instance "SKY", status UNKNOWN, has 1 handler(s) for this service...

The command completed successfully

LSNRCTL> service

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=heysky)(PORT=1521)))

Services Summary...

Service "PLSExtProc" has 1 instance(s).

Instance "PLSExtProc", status UNKNOWN, has 1 handler(s) for this service...

Handler(s):

"DEDICATED" established:0 refused:0

LOCAL SERVER

Service "SKYSHARED.heysky.net" has 1 instance(s).

Instance "sky", status READY, has 4 handler(s) for this service...

Handler(s):

"DEDICATED" established:0 refused:0 state:ready

LOCAL SERVER

"D002" established:0 refused:0 current:0 max:1002 state:ready

DISPATCHER (ADDRESS=(PROTOCOL=tcp)(HOST=heysky)(PORT=2312))

"D001" established:0 refused:0 current:0 max:1002 state:ready

DISPATCHER (ADDRESS=(PROTOCOL=tcp)(HOST=heysky)(PORT=2311))

"D000" established:0 refused:0 current:0 max:1002 state:ready

DISPATCHER (ADDRESS=(PROTOCOL=tcp)(HOST=heysky)(PORT=2309))

Service "SKYTEST" has 1 instance(s).

Instance "SKY", status UNKNOWN, has 1 handler(s) for this service...

Handler(s):

"DEDICATED" established:0 refused:0

LOCAL SERVER

The command completed successfully

如果 LISTENER 启动,,数据库的任何动态改变,比如,DISPATCHERS、SERVICE_NAMES 都会动态邦定到 LISTENER,从 LSNRCTL 可以看到这些改变,如果 LISTENER 没有启动,改变之后,再启动 LISTENER,那么这些改变不会邦定到 LISTENER 上。所以一般建议,先启动 LISTENER,再启动数据库,以便能够动态邦定。

logo.gif

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值