天天看點

shared server使用與配置

<b>Dedicated Server Process</b>

<a href="http://blog.51cto.com/attachment/201005/210546570.png" target="_blank"></a>

<a href="http://blog.51cto.com/attachment/201005/210608606.png" target="_blank"></a>

用戶端連接配接隻需建立一次tcp:

<a href="http://blog.51cto.com/attachment/201005/210628323.png" target="_blank"></a>

但根據在實際實驗時看到的現象,dedicated server process并不是listener的子程序,如下所示:

$ 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

<a href="http://blog.51cto.com/attachment/201005/210813571.png" target="_blank"></a>

用戶端連接配接須建立兩次tcp:

<a href="http://blog.51cto.com/attachment/201005/210936519.png" target="_blank"></a>

<a href="http://blog.51cto.com/attachment/201005/210954980.png" target="_blank"></a>

<a href="http://blog.51cto.com/attachment/201005/211007689.png" target="_blank"></a>

推薦将隊列緩存區置于larg pool裡,須設定large_pool_size 參數值。

一個dispatcher最多可以支援的連接配接數與作業系統平台有關。

<b>Configuring Oracle Shared Server</b>

• Required initialization parameters

– DISPATCHERS

– SHARED_SERVERS

• Optional initialization parameters

– MAX_DISPATCHERS

– MAX_SHARED_SERVERS

– CIRCUITS

– SHARED_SERVER_SESSIONS

<a href="http://blog.51cto.com/attachment/201005/211132577.png" target="_blank"></a>

dispatcher啟動個數是靜态的,初始化啟動個數由DISPATCHERS決定。通過alter system指令改變啟動個數。而shared servers的個數可以動态增加,初始啟動個數由SHARED_SERVERS決定。

Tips:

在調試時如有需要,可以将MAX_SHARED_SERVERS值設為0(不能再記憶體中修改),關閉shared server模式。即使将shared_servers值設為0,當有用戶端連結進來時oracle會自動産生share server程序。

dispatcher與shared server的通信鍊路稱為一條virtual circuit,分inbound和outbound。即dispatcher—--request queue----shared server是inbound虛鍊路,shared server----response queue----dispatcher為outbound虛鍊路。

CIRCUITS參數值決定了虛鍊路(包括inbound和outbound)總數。這個值也影響了整個SGA的大小。

SHARED_SERVER_SESSIONS值決定了所有shared server所能同時處理的session數。這裡是對整個oracle而言的,不是對單個shared server。

初始化參數中有個參數sessions,這個值決定了oracle能同時處理的session數,是以這個參數值與SHARED_SERVER_SESSIONS的值也就決定了留給dedicated servers能同時處理的session數。

注意:如果listener監聽端口不是預設值1521時,必須配置local_listener參數或者在dispatchers參數值中指定tnsname。

配置舉例:

SQL&gt; show parameter dispat

NAME                      TYPE        VALUE

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

dispatchers               string      (PROTOCOL=TCP) (SERVICE=ltyXDB)                                                

max_dispatchers           integer     5

SQL&gt; alter system set dispatchers='(protocol=tcp)(dispatchers=1)';

System altered.

SQL&gt; show parameter disp

NAME                                 TYPE        VALUE

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

dispatchers                          string      (protocol=tcp)(dispatchers=1)

max_dispatchers                      integer     5

mts_dispatchers                      string      (protocol=tcp)(dispatchers=1)

#注意:如果原來spfile中沒有配置dispatchers這個參數,則有可能在oracle啟動後修改dispatchers值。這個一旦定義就不能在spfile中被修改,如:

SQL&gt; 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建立pfile。在pfile中更改後再由pfile建立spfile。

另外,在修改這些值前最好先啟動listener。否則可能出現修改這些值後無法同步在listener中注冊的情況。

SQL&gt; !      

[oracle@localhost ~]$ ps -ef | grep oracle

……

oracle    3360     1 0 04:01 ?        00:00:00 ora_s000_lty     #shared server程序。

oracle    3362     1 0 04:01 ?        00:00:00 ora_d000_lty              #dispatcher程序。

NAME                                 TYPE        VALUE

mts_max_dispatchers                  integer     5

SQL&gt; alter system set dispatchers='(protocol=tcp)(dispatchers=4)';

SQL&gt; show parameter shared_ser

NAME                                 TYPE        VALUE

max_shared_servers                   integer     20

shared_server_sessions               integer     165

shared_servers                       integer     1

SQL&gt; alter system set shared_servers=3;

SQL&gt; !

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).

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

         DISPATCHER &lt;machine: localhost.localdomain, pid: 7243&gt;

         (ADDRESS=(PROTOCOL=tcp)(HOST=localhost.localdomain)(PORT=1468))

The command completed successfully

<b>驗證:</b>

使用用戶端連結後,

SQL&gt; 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 

<b>同時使用專用伺服器和Oracle Shared Server</b>

用戶端tnsnames.ora配置

ORACLE =

 (DESCRIPTION =

    (ADDRESS_LIST =

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

    )

    (CONNECT_DATA =

      (SERVICE_NAME = lty.suny.com)

 )

#在正常配置模式下,如上。Oracle優先使用shared server。

ORACLE_SHARED =

      (SERVER = shared)

#在此模式下使用shared模式,在dispatchers不可用時連結将被拒絕。

ORACLE_DEDI =

      (SERVER = dedicated)

#在此模式下将使用dedicated模式連結。

驗證:

[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  

<b>何時使用專用伺服器</b>

•送出批作業(預計很少有或沒有空閑時間)

•以sysdba 身份連接配接以啟動、關閉或執行恢複

•在三層架構中,中間件與oracle伺服器之間。

啟動關閉資料庫時不能以shared方式連結,否則出錯:ORA-00106: cannot startup/shutdown database when connected to a dispatcher

<b>相關視圖:</b>

• V$CIRCUIT

• V$SHARED_SERVER

• V$DISPATCHER

• V$SHARED_SERVER_MONITOR

• V$QUEUE

• V$SESSION

問題:listener.ora如下無法同時啟動shared server,無法再listener中注冊?

SID_LIST_LISTENER =

 (SID_LIST =

    (SID_DESC =

      (GLOBAL_DBNAME = lty.suny.com)

      (ORACLE_HOME = /u01/oracle)

      (SID_NAME = lty)

LISTENER =

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

藍色部分改成如下情況下可以使用shared server:

 (ADDRESS = (PROTOCOL = TCP)(HOST = localhost.localdomain)(PORT = 1521))

本文轉自 d185740815 51CTO部落格,原文連結:http://blog.51cto.com/luotaoyang/312677,如需轉載請自行聯系原作者