Oracle 專用模式(DEDICATED) 和 共享模式(SHARE)
專用伺服器(DEDICATED):一個客戶端連線對應一個伺服器程式
共享伺服器(SHARE):多個客戶端連線對應一個伺服器程式,伺服器端存在一個程式排程器來管理。它必須使用net services.也就是說必須配置tns。它適合用於高併發,事物量小,如果這個時候採用了共享模式,可以大大減少由於高度併發對於ORACLE伺服器的資源消耗。
共享伺服器體系:客戶程式最終與一個排程程式連線,PMON程式註冊了排程程式的位置和負荷,使監聽器能夠提交到負荷最小的排程程式。一個排程程式能併發地支援多重的客戶連線。
專用伺服器體系:每個客戶程式與專用伺服器程式連線。伺服器程式沒被任何另外的客戶共享。
另:專用伺服器體系結構不支援HTTP和IIOP客戶,僅支援TTC客戶。
一般我們以oracle預設的專用伺服器方式就行了,沒必要使用共享伺服器模式。一個是我們是使用中介軟體(如:weblogic)去連oracle的,中介軟體本身有連線池機制,另外就是oracle的這個共享伺服器方式也做的不夠好了,有諸多缺點。
共享伺服器具有以下一些缺點:
1)共享伺服器的程式碼路徑比專用伺服器長,所以它天生就比專用伺服器慢。
2)存在人為死鎖的可能,因為它是序列的,只要一個連線阻塞,則該伺服器程式上的所有使用者都被阻塞,並且極可能死鎖。
3)存在獨佔事務的可能,因為如果一個會話的事務執行時間過長,它獨佔共享資源,其它使用者只能等待,而專用伺服器,每個客戶端是一個會話。
4)共享伺服器模式限制了某些資料庫特性,例如:不能單獨啟動和關閉例項,不能進行介質恢復,不能使用Log Miner,並且SQL_TRACE沒有意義(因為是共享而不是當前會話的)。
MTS減少的記憶體實際上是專用伺服器模式下每個使用者連線到作業系統程式所需的記憶體,但它卻使用SGA的Large_Pool來分配UGA,拆東牆補西牆,所減少的記憶體是很少的。如果使用者會話的連線和斷開很頻繁,資料庫程式的建立和刪除的開銷會非常大,這種情況最好採用共享伺服器模式(否則,應該使用連線池技術)。如果客戶端一次連線終身使用(會話生命週期內),使用共享伺服器模式的意義不大。因為大部分時間,一個會話就連線到一個伺服器程式,無法共享伺服器程式。
共享服務初始化引數的一些說明:
shared_servers :指定了當instance 啟動的時候 shared server process 啟動的數量,不要將這個引數設定得太大,否者啟動資料庫instance 的時候 就會花更多時間,Oracle啟動過後會根據負載來動態調整shared_servers。如果為0,表示資料庫沒有啟動共享服務模式。 這個引數是配置shared server 必須的,而且只有這個引數是必須的。
修改引數: alter system set shared_servers=1;
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備份),
shared_server_sesions: 指定了總共允許的的shared server session 的數量。如果設定了這個引數,那麼就不要將這個值超過sessions,如果沒有設定這個值,那麼只要還有空閒的session,就可以被使用。設定這個值是為專有連線預留 user sessions.
dispatchers:配置 dispatcher process .如果不設定這個引數,只要設定了shared_servers ,oracle 也會自動設定一個基於tcp協議的dispatcher。還需要檢視作業系統支援一個dispatcher能處理多少個connections
SQL> select * from v$dispatcher;
max_dispatchers: 設定同一時刻能夠同時執行的dispatchers的數量,必須大於等於 dispatchers ,小於processes。這個引數也會被dispatchers覆蓋。
circuits:指定了virtual circuits 的總數量。
關閉共享模式:
將shared_servers引數置為0,那麼所有以共享方式連線到資料庫都不能成功,但是未釋放的共享連線會繼續 保持連線,直到斷開。如果將shared_servers 和max_shared_servers都設為0,那麼共享連線將被終結。所有的共享方式連線都斷開了的話,就可以使用alter system set dispatcher=’’; 將dispatcher清除,防止下次啟動資料庫又開啟了共享連線方式。
判斷oracle是共享模式還是專用模式的方法:
1. show parameter shared_server; (注:8i應為:show parameter mts_servers;)
SQL> show parameter shared_server;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
max_shared_servers integer 20
shared_server_sessions integer 330
shared_servers integer 1
2. 檢視v$session 檢視
SQL> Select username,server,program from v$session where username is not null;
USERNAME SERVER PROGRAM
------------------------------ --------- ---------------------------------------
SYS DEDICATED rman.exe
RMAN DEDICATED rman.exe
SYS DEDICATED rman.exe
SYS DEDICATED sqlplus.exe
SYS DEDICATED rman.exe
DAVE DEDICATED toad.exe
SYS DEDICATED toad.exe
3. 檢視監聽: lsnrctl service
C:\Users\Administrator.DavidDai>lsnrctl service
LSNRCTL for 32-bit Windows: Version 11.2.0.1.0 - Production on 26-6月 -2010 11:7:40 Copyright (c) 1991, 2010, Oracle. All rights reserved.
正在連線到 (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
服務摘要..
服務 "orcl" 包含 1 個例項。
例項 "orcl", 狀態 READY, 包含此服務的 1 個處理程式...
處理程式:
"DEDICATED" 已建立:34 已拒絕:0 狀態:ready
LOCAL SERVER
服務 "orclXDB" 包含 1 個例項。
例項 "orcl", 狀態 READY, 包含此服務的 1 個處理程式...
處理程式:
"D000" 已建立:0 已被拒絕:0 當前: 0 最大: 1022 狀態: ready
DISPATCHER
(ADDRESS=(PROTOCOL=tcp)(HOST=DavidDai)(PORT=58400))
命令執行成功
4.檢視TNSNAMES.ora 檔案。如:
ORCL =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = DavidDai)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
這裡是以DEDICATED 專用模式連線 orcl 例項。寫上 (SERVER = SHARED) 則是使用共享伺服器模式,但是這時shared_server_process需要開啟,要不然會出錯連不上oracle。要是這段放空沒寫,那麼系統會根據伺服器模式自動調節,不過根據實測結果,就算伺服器是定義成共享伺服器模式,shared_server_process沒開啟的情況下,在v$session中查到的連線依然是SERVER = DEDICATED。所以基本上我們這段話我們都是可以放空著不寫的,但是有時候要連上我們的共享伺服器模式的資料庫,放空有可能系統認為要用共享伺服器方式去連,那時就要宣告 SERVER = DEDICATED採用專用伺服器方式去連線。
在資料庫啟動的時候,如果沒有指定shared_servers,但是設定了dispatchers,那麼ORACLE就認為啟動了shared server ,並且設定shared_servers為1. 在資料庫啟動的時候,沒有設定shared_servers,沒有設定dispatchers,即使以後修改了dispatchers,也不能啟動shared server,必須從新啟動資料庫。
另外,Background process ,以及通過本地連線進來的,只能是DEDICATED .比如說sqlplus user/pass形式
如果資料庫沒有配置共享伺服器,那麼客戶端只能以DEDICATED方式連線資料庫.
ORA-12545 連線因物件主機或物件不存在而失敗.
ORA-12545:
Connect failed because target host or object does not exist
Cause:
The address specified is not valid, or the program being connected to does not exist.
Action:
Ensure the ADDRESS parameters have been entered correctly; the most likely incorrect parameter is the node name. Ensure that the executable for the server exists (perhaps "oracle" is missing.) If the protocol is TCP/IP, edit the TNSNAMES.ORA file to change the host name to a numeric IP address and try again.
根據上面的要求修改,還是不行,後來修改了HOST檔案,在其中增加了伺服器的主機對應IP地址,問題得以解決.
WINDOWS XP的HOST檔案在c:windows\system32\drivers\etc 下面.檔名就叫HOST,沒有副檔名.
# Copyright (c) 1993-1999 Microsoft Corp.
127.0.0.1 localhost
10.85.10.80 DAVIDDAI
In Dedicated Server Mode, there is a dedicated server process for each user process.
Select this option when the number of total clients is expected to be small, or when database clients will make persistent, long-running requests to the database. In Shared Server Mode, several client connections share a database-allocated pool of resources. Use this mode when a large number of users need to connect to the database. It is also useful when database memory is limited and for better performance, since you can have more client connections to the database than in dedicated server mode with the same memory. If you choose shared server mode, you must also indicate the number of server processes you want to create when an instance is started up. For more information about setting this parameter, click Help.
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/235507/viewspace-677291/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle網路配置之共享模式和專有模式Oracle模式
- 共享模式 & 專有模式模式
- [20191112]oracle共享連線模式埠.txtOracle模式
- [20190115]關於共享服務與專用模式.txt模式
- Oracle共享伺服器的連線模式Oracle伺服器模式
- [20191113]oracle共享連線模式埠2.txtOracle模式
- 微火共享wifi代理專案盈利模式分析!WiFi模式
- [20180316]非同步IO和共享服務模式.txt非同步模式
- [重慶思莊每日技術分享]-ORACLE19C UNDO共享模式轉換為本地模式Oracle模式
- 用Python實現設計模式——建造者模式和原型模式Python設計模式原型
- [20180316]共享服務模式和直接路徑讀.txt模式
- 設計模式專題-策略模式設計模式
- MySQL 共享鎖 (lock in share mode),排他鎖 (for update)MySql
- [20200218]連線串與專用模式.txt模式
- 懶漢模式和餓漢模式模式
- 設計模式--直譯器模式和狀態模式設計模式
- 5分鐘實現用docker搭建Redis叢集模式和哨兵模式DockerRedis模式
- 美雲智數財務雲共享模式,打破傳統財務模式模式
- Java設計模式之模板方法模式和建造者模式Java設計模式
- Java設計模式之七 —– 享元模式和代理模式Java設計模式
- c++設計模式-裝飾器模式和代理模式C++設計模式
- 設計模式專題(七)裝飾器模式設計模式
- FTP主動模式和被動模式FTP模式
- MVC模式和MVP模式的區別MVC模式MVP
- 設計模式(Swift) - 2.單例模式、備忘錄模式和策略模式設計模式Swift單例
- js代理模式理解和應用場景JS模式
- [20190306]共享服務模式與SDU.txt模式
- oracle 雙機部署模式探討Oracle模式
- 應用最廣的模式——單例模式模式單例
- 設計模式 | 策略模式及典型應用設計模式
- 設計模式抱佛腳專用(php&java)設計模式PHPJava
- Oracle資料庫歸檔模式的開啟和關閉Oracle資料庫模式
- 【CONNECT】Oracle連線方式詳細介紹(專用/共享伺服器)Oracle伺服器
- zabbix的主動模式和被動模式模式
- 策略模式和模板方法模式的異同模式
- 前端路由原理之 hash 模式和 history 模式前端路由模式
- 應用設計模式和產品經理成為好朋友 | 策略模式實戰設計模式
- 設計模式之策略模式和狀態模式(strategy pattern & state pattern)設計模式
- 【Spark篇】---SparkStreaming+Kafka的兩種模式receiver模式和Direct模式SparkKafka模式