Dedicated Server Process
客戶端連接只需建立一次tcp: 但根據(jù)在實(shí)際實(shí)驗(yàn)時(shí)看到的現(xiàn)象,dedicated server process并不是listener的子進(jìn)程,如下所示:
$ ps -ef | grep oracle
oracle 3242 3201 0 03:52 pts/0 00:00:00 sqlplus (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))
oracle 3956 1 0 04:07 pts/0 00:00:00 /u01/oracle/bin/tnslsnr LISTENER -inherit
oracle 5563 1 4 12:46 pts/0 00:00:00 oraclelty (LOCAL=NO)
oracle 5564 3871 0 12:46 pts/0 00:00:00 ps -ef
oracle 5565 3871 0 12:46 pts/0 00:00:00 grep oracle
Shared Server
客戶端連接須建立兩次tcp: 推薦將隊(duì)列緩存區(qū)置于larg pool里,須設(shè)置large_pool_size 參數(shù)值。 一個(gè)dispatcher最多可以支持的連接數(shù)與操作系統(tǒng)平臺(tái)有關(guān)。
Configuring Oracle Shared Server
· Required initialization parameters
– DISPATCHERS
– SHARED_SERVERS
· Optional initialization parameters
– MAX_DISPATCHERS
– MAX_SHARED_SERVERS
– CIRCUITS
– SHARED_SERVER_SESSIONS
dispatcher啟動(dòng)個(gè)數(shù)是靜態(tài)的,初始化啟動(dòng)個(gè)數(shù)由DISPATCHERS決定。通過(guò)alter system命令改變啟動(dòng)個(gè)數(shù)。而shared servers的個(gè)數(shù)可以動(dòng)態(tài)增加,初始啟動(dòng)個(gè)數(shù)由SHARED_SERVERS決定。
Tips:
在調(diào)試時(shí)如有需要,可以將MAX_SHARED_SERVERS值設(shè)為0(不能再內(nèi)存中修改),關(guān)閉shared server模式。即使將shared_servers值設(shè)為0,當(dāng)有客戶端鏈接進(jìn)來(lái)時(shí)oracle會(huì)自動(dòng)產(chǎn)生share server進(jìn)程。
dispatcher與shared server的通信鏈路稱為一條virtual circuit,分inbound和outbound。即dispatcher—--request queue----shared server是inbound虛鏈路,shared server----response queue----dispatcher為outbound虛鏈路。
CIRCUITS參數(shù)值決定了虛鏈路(包括inbound和outbound)總數(shù)。這個(gè)值也影響了整個(gè)SGA的大小。
SHARED_SERVER_SESSIONS值決定了所有shared server所能同時(shí)處理的session數(shù)。這里是對(duì)整個(gè)oracle而言的,不是對(duì)單個(gè)shared server。
初始化參數(shù)中有個(gè)參數(shù)sessions,這個(gè)值決定了oracle能同時(shí)處理的session數(shù),所以這個(gè)參數(shù)值與SHARED_SERVER_SESSIONS的值也就決定了留給dedicated servers能同時(shí)處理的session數(shù)。
注意:如果listener監(jiān)聽(tīng)端口不是默認(rèn)值1521時(shí),必須配置local_listener參數(shù)或者在dispatchers參數(shù)值中指定tnsname。
配置舉例:
SQL> show parameter dispat
NAME TYPE VALUE
------------------------- ----------- -------------------
dispatchers string (PROTOCOL=TCP) (SERVICE=ltyXDB)
max_dispatchers integer 5
SQL> alter system set dispatchers='(protocol=tcp)(dispatchers=1)';
System altered.
SQL> show parameter disp
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
dispatchers string (protocol=tcp)(dispatchers=1)
max_dispatchers integer 5
mts_dispatchers string (protocol=tcp)(dispatchers=1)
#注意:如果原來(lái)spfile中沒(méi)有配置dispatchers這個(gè)參數(shù),則有可能在oracle啟動(dòng)后修改dispatchers值。這個(gè)一旦定義就不能在spfile中被修改,如:
SQL> alter system set dispatchers='(protocol=tcp)(dispatchers=2)' scope=spfile;
alter system set dispatchers='(protocol=tcp)(dispatchers=2)' scope=spfile
*
ERROR at line 1:
ORA-02065: illegal option for ALTER SYSTEM
解決方法是,先由spfile創(chuàng)建pfile。在pfile中更改后再由pfile創(chuàng)建spfile。
另外,在修改這些值前最好先啟動(dòng)listener。否則可能出現(xiàn)修改這些值后無(wú)法同步在listener中注冊(cè)的情況。
SQL> !
[oracle@localhost ~]$ ps -ef | grep oracle
……
oracle 3360 1 0 04:01 ? 00:00:00 ora_s000_lty #shared server進(jìn)程。
oracle 3362 1 0 04:01 ? 00:00:00 ora_d000_lty #dispatcher進(jìn)程。
……
SQL> show parameter disp
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
dispatchers string (protocol=tcp)(dispatchers=1)
max_dispatchers integer 5
mts_dispatchers string (protocol=tcp)(dispatchers=1)
mts_max_dispatchers integer 5
SQL> alter system set dispatchers='(protocol=tcp)(dispatchers=4)';
System altered.
SQL> show parameter shared_ser
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
max_shared_servers integer 20
shared_server_sessions integer 165
shared_servers integer 1
SQL> alter system set shared_servers=3;
System altered.
SQL> !
[oracle@localhost ~]$ ps -ef | grep oracle
……
oracle 3360 1 0 04:01 ? 00:00:00 ora_s000_lty
oracle 3362 1 0 04:01 ? 00:00:00 ora_d000_lty
oracle 3364 1 0 04:01 ? 00:00:00 ora_arc0_lty
oracle 3366 1 0 04:01 ? 00:00:00 ora_arc1_lty
oracle 7109 1 0 17:04 ? 00:00:00 ora_d001_lty
oracle 7111 1 0 17:04 ? 00:00:00 ora_d002_lty
oracle 7113 1 0 17:04 ? 00:00:00 ora_d003_lty
……
[oracle@localhost admin]$ lsnrctl service
Connecting to (ADDRESS=(PROTOCOL=tcp)(PORT=1521))
Services Summary...
Service "lty.suny.com" has 1 instance(s).
Instance "lty", status READY, has 1 handler(s) for this service...
Handler(s):
"DEDICATED" established:0 refused:0 state:ready
LOCAL SERVER
Service "ltyXDB.suny.com" has 1 instance(s).
Instance "lty", status READY, has 1 handler(s) for this service...
Handler(s):
"D000" established:0 refused:0 current:0 max:1002 state:ready
DISPATCHER <machine: localhost.localdomain, pid: 7243>
(ADDRESS=(PROTOCOL=tcp)(HOST=localhost.localdomain)(PORT=1468))
The command completed successfully
驗(yàn)證:
使用客戶端鏈接后,
SQL> select circuit,dispatcher,status from v$circuit;
CIRCUIT DISPATCH STATUS
-------- -------- ----------------
5AEFBAF8 5A290E48 NORMAL
或者:
$ netstat -anp | more
……
tcp 0 0 192.168.1.10:1521 192.168.1.200:51013 ESTABLISHED 5151/ora_d001_lty
同時(shí)使用專用服務(wù)器和Oracle Shared Server
客戶端tnsnames.ora配置
ORACLE =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.10)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = lty.suny.com)
)
)
#在常規(guī)配置模式下,如上。Oracle優(yōu)先使用shared server。
ORACLE_SHARED =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.10)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = lty.suny.com)
(SERVER = shared)
)
)
#在此模式下使用shared模式,在dispatchers不可用時(shí)鏈接將被拒絕。
ORACLE_DEDI =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.10)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = lty.suny.com)
(SERVER = dedicated)
)
)
#在此模式下將使用dedicated模式鏈接。
驗(yàn)證:
[oracle@localhost admin]$ netstat -anp | more
……
tcp 0 0 127.0.0.1:1521 127.0.0.1:46663 ESTABLISHED 6249/tnslsnr
tcp 0 0 127.0.0.1:46663 127.0.0.1:1521 ESTABLISHED 6096/ora_pmon_lty
tcp 0 0 192.168.1.10:1521 192.168.1.200:51468 ESTABLISHED 6114/ora_d000_lty
tcp 0 0 192.168.1.10:1521 192.168.1.200:51467 ESTABLISHED 6114/ora_d000_lty
tcp 0 0 192.168.1.10:1521 192.168.1.200:51474 ESTABLISHED 6325/oraclelty
何時(shí)使用專用服務(wù)器
·提交批作業(yè)(預(yù)計(jì)很少有或沒(méi)有空閑時(shí)間)
·以sysdba 身份連接以啟動(dòng)、關(guān)閉或執(zhí)行恢復(fù)
·在三層架構(gòu)中,中間件與oracle服務(wù)器之間。
啟動(dòng)關(guān)閉數(shù)據(jù)庫(kù)時(shí)不能以shared方式鏈接,否則出錯(cuò):ORA-00106: cannot startup/shutdown database when connected to a dispatcher
相關(guān)視圖:
· V$CIRCUIT
· V$SHARED_SERVER
· V$DISPATCHER
· V$SHARED_SERVER_MONITOR
· V$QUEUE
· V$SESSION
問(wèn)題:listener.ora如下無(wú)法同時(shí)啟動(dòng)shared server,無(wú)法再listener中注冊(cè)?
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = lty.suny.com)
(ORACLE_HOME = /u01/oracle)
(SID_NAME = lty)
)
)
LISTENER =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.10)(PORT = 1521))
藍(lán)色部分改成如下情況下可以使用shared server:
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost.localdomain)(PORT = 1521))
本文出自 “冰冷的太陽(yáng)” 博客,請(qǐng)務(wù)必保留此出處http://luotaoyang.blog.51cto.com/545649/312677 |
|
來(lái)自: 浸心閣 > 《dbw0 io100%》