天天看點

Oracle的專用資料庫和共享資料庫差別

專用伺服器程序(Dedicated server)

對于專用伺服器配置,在登入時,Oracle總會建立一個新的程序,這個伺服器程序會在會話生存期中專門這個連接配接服務。對于每個會話,都會出現一個新的專用伺服器,會話與專用伺服器之間存在一對一的映射。按照定義,這個專用伺服器不是執行個體的一部分使用者程序和伺服器程序是分開的。每個使用者程序都有自己的伺服器程序。

使用者程序和伺服器程序可在不同的機器上運作,以利用分布式處理的優勢。

使用者程序和伺服器程序的比率是1 比1。

即使使用者程序不發出資料庫請求,專用伺服器也存在,隻是保持空閑狀态。

何時使用專用伺服器

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

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

要請求使用專用伺服器,必須在tnsnames.ora 檔案内的Oracle Net TNS 連接配接字元串中

包含SERVER=DEDICATED 子句。

注:對于大多數平台來說,如果您的機器有足夠的記憶體支援專用伺服器,則應使用專用服

務器。這樣性能可能更好些。

但也有例外,例如Windows NT,在該系統中,由于共享伺服器體系結構的異步特性,使

用Oracle Shared Server 配置性能可能會有所提高。

如何連接配接專用伺服器

在用戶端伺服器中的tnsnames.ora檔案裡進行設定:

dedicated =(DESCRIPTION =

(ADDRESS_LIST =

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

)

(CONNECT_DATA =

(SERVICE_NAME = itpux)

(server = dedicated)

共享伺服器(shared server),正式的說法是多線程伺服器(Multi-Threaded Server)或MTS。如果采用這種方式,就不會對每條使用者連接配接建立另外的線程或新的UNIX 程序

Oracle Shared Server 的優點

減少針對某一例程的程序數目

增加可服務的使用者數

實作負載平衡

減少空閑伺服器程序的數目

減少記憶體占用和系統開銷

如何連接配接共享伺服器

不能使用共享伺服器執行某些類型的資料庫工作:

資料庫管理

備份和恢複操作

批處理和批量加載操作

資料倉庫操作

共享伺服器具有以下一些缺點

一般我們以oracle預設的專用伺服器方式就行了,沒必要使用共享伺服器模式。一個是我們是使用中間件(如:weblogic)去連oracle的,中間件本身有連接配接池機制,另外就是oracle的這個共享伺服器方式也做的不夠好了,有諸多缺點。

1)共享伺服器的代碼路徑比專用伺服器長,是以它天生就比專用伺服器慢。

2)存在人為死鎖的可能,因為它是串行的,隻要一個連接配接阻塞,則該伺服器程序上的所有使用者都被阻塞,并且極可能死鎖。 ITPUX 技術網(http://www.itpux.com),中國最專業最全面的 IT 行業技術網站。

3)存在獨占事務的可能,因為如果一個會話的事務運作時間過長,它獨占共享資源,其它使用者隻能等待,而專用伺服器,每個用戶端是一個會話。

4)共享伺服器模式限制了某些資料庫特性,例如:不能單獨啟動和關閉執行個體,不能進行媒體恢複,不能使用Log Miner,并且SQL_TRACE沒有意義(因為是共享而不是目前會話的)。

怎麼知道oracle目前是 DEDICATED SERVER 還是 SHARED SERVER?

最簡單的一個方法是檢視監聽: lsnrctl service

<code>[grid@udevasm:</code><code>/home/grid</code><code>]$lsnrctl service</code>

<code>LSNRCTL </code><code>for</code> <code>Linux: Version 11.2.0.4.0 - Production on 15-JUL-2017 13:07:31</code>

<code>Copyright (c) 1991, 2013, Oracle.  All rights reserved.</code>

<code>Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))</code>

<code>Services Summary...</code>

<code>Service </code><code>"+ASM"</code> <code>has 1 instance(s).</code>

<code>  </code><code>Instance </code><code>"+ASM"</code><code>, status READY, has 1 handler(s) </code><code>for</code> <code>this service...</code>

<code>    </code><code>Handler(s):</code>

<code>      </code><code>"DEDICATED"</code> <code>established:0 refused:0 state:ready</code>

<code>         </code><code>LOCAL SERVER</code>

<code>Service </code><code>"db01"</code> <code>has 1 instance(s).</code>

<code>  </code><code>Instance </code><code>"udevasm"</code><code>, status READY, has 1 handler(s) </code><code>for</code> <code>this service...</code>

<code>      </code><code>"DEDICATED"</code> <code>established:8 refused:0 state:ready</code>

<code>Service </code><code>"udevasm"</code> <code>has 1 instance(s).</code>

<code>Service </code><code>"udevasmXDB"</code> <code>has 1 instance(s).</code>

<code>      </code><code>"D000"</code> <code>established:0 refused:0 current:0 max:1022 state:ready</code>

<code>         </code><code>DISPATCHER &lt;machine: udevasm, pid: 2469&gt;</code>

<code>         </code><code>(ADDRESS=(PROTOCOL=tcp)(HOST=udevasm)(PORT=10275))</code>

<code>The </code><code>command</code> <code>completed successfully</code>

<code></code>

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