詳解Oracle的連線模式:專有模式和共享模式
oracle的網路連線模式
專有服務和共享服務模式
專有模式
每個使用者程式和服務程式間透過監聽器建立連線
程式資訊存放於PGA中,也就是說有多少個使用者程式就有多少個PGA產生
單單隻有程式連線還不足以運算元據庫,還需要產生的會話資訊
會話資訊儲存在UGA中,UGA在專有模式中存在於PGA
因為程式和程式間是相互隔離的,所以會話資訊也相對獨立
這就導致了服務程式只能獲知當前使用者程式的會話請求資訊只能為當前使用者程式服務
共享模式
使用者程式的請求被監聽器接收,監聽器不委派伺服器程式,而是將排程器資訊返回給客戶端
排程器將使用者程式的請求放入請求佇列
多個服務程式中的一個服務程式從佇列中獲取使用者程式的請求,並處理這個使用者程式的請求
服務程式處理完後將處理結果放入響應佇列,每個排程器都有自己的響應佇列
響應佇列的資訊反饋給對應的排程器
排程器再把服務程式處理的結果返回給使用者程式
共享模式中的使用者程式的會話資訊對每一個伺服器程式來說都是可見的.
因為共享模式的UGA資訊存在於SGA中,所以此時一個使用者程式的請求可以由多個服務程式來完成.
監聽器的特點
監聽程式程式可監聽多個資料庫
多個監聽程式可為一個資料庫進行監聽,以實現負載均衡,可以透過每個監聽協議地址上的負載序列值來判斷使用負載最低的監聽。
可以實現連線時的故障轉移,如果第1個監聽失敗,可以請求第2個監聽
監聽程式可監聽多個協議
Oracle Net 中的監聽程式的預設名稱是LISTENER
每個listener.ora檔案中的監聽程式的名稱必須唯一
專有伺服器配置
oracle的網路配置分為伺服器端和客戶端
伺服器端監聽器listener
主要是$ORACLE_HOME/network/admin/listener.ora檔案
描述了監聽的網路連線型別 TCP ICP LDAP等
例如:
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
(ADDRESS = (PROTOCOL = TCP)(HOST = dba.up.com)(PORT = 1521))
)
)
透過lsnrctl命令來啟動/停止/檢視/過載監聽器/服務
lsnrctlstart|stop|status|reload|service
客戶端
主要是$ORACLE_HOME/network/admin/tnsname.ora檔案
對具體的資料庫連線資訊濃縮成別名
例如:
ORA10G =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = dba.up.com)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = ora10g)
)
)
客戶端申請連結的過程
connscott/seker@ora10g
1.客戶端透過@ora10g的名字去tnsname.ora檔案獲取伺服器的具體連線資訊
2.客戶端透過tnsname.ora中的描述向伺服器發出連結請求伺服器端
3.伺服器的監聽器接收到連線請求後,驗證請求的服務的有效性
4.伺服器端產生一個服務程式和客戶端程式建立連線
客戶端配置tnsname.ora
ORA10G =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = dba.up.com)(PORT = 1522))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = ora10g)
)
)
ORACLE NET服務端配置
例項透過註冊讓監聽器得知伺服器執行的資訊
註冊分兩種
靜態註冊
LISTENER主動去找要支援的例項資訊,叫靜態註冊
動態註冊
PMON程式將例項資訊告訴listener,叫動態註冊
靜態註冊和動態註冊
什麼是靜態註冊
就是監聽器的配置檔案中寫明瞭監聽哪個例項需要配置SID_DESC欄位
定位例項的方式可以使用SID_NAME或者SERVICE_NAME來定位
什麼是動態註冊
就是監聽器的配置檔案中沒寫明監聽哪個例項
要透過PMON告知監聽器要監聽的具體例項
PMON是將SERVER_NAME告訴給監聽器這個過程就是註冊
預設一分鐘PMON註冊一次也就是說啟動監聽還沒註冊時是無法連線的
區分靜態註冊和動態註冊
lsnrctl status
是 ready 就是動態
是unknow就是靜態
靜態註冊listener.ora檔案資訊:
[oracle@dba admin]$ catlistener.ora
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(ORACLE_HOME = /u01/oracle/product/10.2.0)
(SID_NAME =orcl)
)
(SID_DESC =
(ORACLE_HOME = /u01/oracle/product/10.2.0)
(SID_NAME =ora10g)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
(ADDRESS = (PROTOCOL = TCP)(HOST = dba.up.com)(PORT = 1522))
)
)
[oracle@dba admin]$
[oracle@dba admin]$ lsnrctl start
.....
Services Summary...
Service "ora10g" has 1 instance(s).
Instance "ora10g", status UNKNOWN, has 1 handler(s) for this service...
Service "orcl" has 1 instance(s).
Instance "orcl", status UNKNOWN, has 1 handler(s) for this service...
The command completed successfully
[oracle@dba admin]$
狀態總是顯示未知的,當有請求時,監聽器才去確認資料是否存在
動態註冊
Oracle9i起例項使用動態服務註冊來通知監聽程式有關其資料庫服務的資訊。
服務註冊依賴PMON 程式向監聽程式註冊例項資訊註冊間隔為1分鐘左右
手動註冊命令 alter system register;
無需在listener.ora檔案中設定任何資訊此檔案可以不存在
[oracle@dba admin]$ rm -rflistener.ora
[oracle@dba admin]$
[oracle@dba admin]$ lsnrctl start
....
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=dba.up.com)(PORT=1521)))
The listener supports no services
The command completed successfully
[oracle@dba admin]$
[oracle@dba admin]$ sqlscott/seker@ora10g
SQL*Plus: Release 10.2.0.1.0 - Production on Sat Apr 2 15:59:20 2011
Copyright (c) 1982, 2005, Oracle. All rights reserved.
ERROR:
ORA-12514: TNS:listener does not currently know of service requested in connect
descriptor
Enter user-name:
[oracle@dba admin]$ 因為沒有註冊所以不能連線
手動註冊一次
SQL> alter system register;
System altered.
SQL>
[oracle@dba admin]$ sqlscott/seker@ora10g
SQL*Plus: Release 10.2.0.1.0 - Production on Sat Apr 2 15:59:42 2011
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
SQL>連線成功
如果listener.ora中定義了監聽埠(非1521)
此時還想使用動態註冊需要設定local_listener引數
[oracle@dba admin]$ catlistener.ora
# listener.ora Network Configuration File: /u01/oracle/product/10.2.0/network/admin/listener.ora
# Generated by Oracle configuration tools.
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = /u01/oracle/product/10.2.0)
(PROGRAM = extproc)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
(ADDRESS = (PROTOCOL = TCP)(HOST = dba.up.com)(PORT = 1522))
)
)
[oracle@dba admin]$
[oracle@dba admin]$ lsnrctl start
......
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=dba.up.com)(PORT=1522)))
Services Summary...
Service "PLSExtProc" has 1 instance(s).
Instance "PLSExtProc", status UNKNOWN, has 1 handler(s) for this service...
The command completed successfully
[oracle@dba admin]$
手動註冊無效 PMON預設只能註冊預設埠1521
SQL> alter system register;
System altered.
SQL>
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=dba.up.com)(PORT=1522)))
Services Summary...
Service "PLSExtProc" has 1 instance(s).
Instance "PLSExtProc", status UNKNOWN, has 1 handler(s) for this service...
The command completed successfully
[oracle@dba admin]$
修改引數local_listener註冊成功
SQL> alter system set local_listener='ORxx';
System altered.
SQL> alter system register;
System altered.
SQL>
[oracle@dba admin]$ lsnrctl status
....
Services Summary...
Service "PLSExtProc" has 1 instance(s).
Instance "PLSExtProc", status UNKNOWN, has 1 handler(s) for this service...
Service "ora10g" has 1 instance(s).
Instance "ora10g", status READY, has 1 handler(s) for this service...
Service "ora10gXDB" has 1 instance(s).
Instance "ora10g", status READY, has 1 handler(s) for this service...
Service "ora10g_XPT" has 1 instance(s).
Instance "ora10g", status READY, has 1 handler(s) for this service...
The command completed successfully
[oracle@dba admin]$
local_listener='ORxx' 是什麼?
local_listener的值一定要在tnsname.ora中設定否則報錯
[oracle@dba admin]$ grep -A 7 'ORxx' tnsnames.ora
ORxx =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = dba.up.com)(PORT = 1522))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = ora10g)
)
)
[oracle@dba admin]$ grep -A 7 'ORnn' tnsnames.ora
[oracle@dba admin]$
SQL> alter system set local_listener='ORnn';
alter system set local_listener='ORnn'
*
ERROR at line 1:
ORA-02097: parameter cannot be modified because specified value is invalid
ORA-00119: invalid specification for system parameter LOCAL_LISTENER
ORA-00132: syntax error or unresolved network name 'ORnn'
SQL>
共享伺服器
在專有模式的基礎上又增加了一個排程器(dispatcher)來管理使用者
請求連線不再直接和服務程式聯絡而是先被排程器放到請求列隊裡排隊
1.使用者程式發起請求
2.排程器接收
3.放到請求佇列裡
4.服務程式從隊裡獲取使用者的請求
5.服務程式向例項請求使用者資料
6.將請求的資料反饋給使用者程式
銀行取錢排隊叫號的例子
共享伺服器的配置透過初始化引數dispatchers來配置
可以透過DBCA來修改很方便
排程器設定中不同協議走不同佇列
排程器的數量 (好比發號機的數量)
每個排程器的最大分配數量 (發號機能發出去的號的最大數)
最大的session數
排程器引數
*.dispatchers='(protocol=TCP)(disp=2)(con=200)(sess=789)'
*.max_dispatchers=5
*.max_shared_servers=4
*.shared_servers=2
SQL> show parameter dispatchers
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
dispatchers string (PROTOCOL=TCP) (SERVICE=ora10g
XDB)
max_dispatchers integer
SQL>
SQL> show parameter shared_server
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
max_shared_servers integer
shared_server_sessions integer
shared_servers integer 1
SQL>
SQL> show parameter dispa
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
dispatchers string (protocol=TCP)(disp=2)(con=200)(sess=789)
max_dispatchers integer 5
SQL>
SQL> show parameter shared_server
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
max_shared_servers integer 3
shared_server_sessions integer
shared_servers integer 2
SQL>
[oracle@dbabdump]$ lsnrctl service
....
服務 "ora10g" 包含 1 個例程。
例程 "ora10g", 狀態 READY, 包含此服務的 3 個處理程式...
處理程式:
"DEDICATED" 已建立:0 已拒絕:0 狀態:ready
LOCAL SERVER
"D001" 已建立:0 已被拒絕:0 當前: 0 最大: 200 狀態: ready
DISPATCHER <machine: dba.up.com, pid: 3541>
(ADDRESS=(PROTOCOL=tcp)(HOST=dba.up.com)(PORT=54306))
"D000" 已建立:0 已被拒絕:0 當前: 0 最大: 200 狀態: ready
DISPATCHER <machine: dba.up.com, pid: 3539>
(ADDRESS=(PROTOCOL=tcp)(HOST=dba.up.com)(PORT=26395))
....
告警日誌中啟動資訊
Mon Apr 4 00:32:12 2011
starting up 2 dispatcher(s) for network
address '(ADDRESS=(PARTIAL=YES)(PROTOCOL=TCP))'...
starting up 2 shared server(s) ...
Mon Apr 4 00:32:12 2011
ALTER DATABASE MOUNT
專有模式和共享模式是可以相容在一起使用的
此時看使用者如何選擇
tnsname.ora中
ORA10G =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = dba.up.com)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED) # 不寫這個值就是按伺服器的模式來匹配
# shared 指定使用共享方式連線
# DEDICATED 指定使用專有模式連線
(SERVICE_NAME = raw10g)
)
)
測試三種模式
ORA10G_noset =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = dba.up.com)(PORT = 1521))
(CONNECT_DATA =
(SERVICE_NAME = ora10g)
)
)
ORA10G_ded =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = dba.up.com)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = ora10g)
)
)
ORA10G_shd =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = dba.up.com)(PORT = 1521))
(CONNECT_DATA =
(SERVER = SHARED)
(SERVICE_NAME = ora10g)
)
)
SQL> select
USERNAME,SID,SERVICE_NAME,SERVER,PROGRAM from v$session where USERNAME='SYS';
USERNAME SID SERVICE_NA SERVER PROGRAM
---------- ----------- ---------- ---------
------------------------------
SYS 136 SYS$USERS DEDICATED OMS
SYS 137 ora10g SHARED sqlplus@dba.up.com (TNS V1-V3)
SYS 144 ora10g SHARED sqlplus@dba.up.com (TNS V1-V3)
SYS 145 ora10g DEDICATED sqlplus@dba.up.com (TNS V1-V3)
SYS 159 SYS$USERS DEDICATED sqlplus@dba.up.com (TNS V1-V3)
SQL> select
USERNAME,SID,SERVICE_NAME,SERVER,PROGRAM from v$session where USERNAME='SCOTT';
USERNAME SID SERVICE_NA SERVER PROGRAM
---------- ----------- ---------- ---------
------------------------------
SCOTT 133 ora10g NONE sqlplus@dba.up.com (TNS V1-V3)
SCOTT 146 ora10g DEDICATED sqlplus@dba.up.com (TNS V1-V3)
SCOTT 153 ora10g NONE sqlplus@dba.up.com (TNS V1-V3)
SQL>普通使用者並不能顯示
限制IP訪問
限制IP訪問:SQLNET.ora
tcp.validnode_checking=yes
tcp.invited_nodes=(ip1,ip2......) # 被邀請IP
tcp.excluded_nodes=(ip1,ip2......) # 被限制IP
重新啟動監聽器設定才生效
想要動態註冊自己的IP必須在被邀請的列表裡
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25116248/viewspace-2122141/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle網路配置之共享模式和專有模式Oracle模式
- 共享模式 & 專有模式模式
- Oracle 專用模式(DEDICATED) 和 共享模式(SHARE)Oracle模式
- Oracle共享伺服器的連線模式Oracle伺服器模式
- Oracle專有(dedicated)連線和共享(shared)連線Oracle
- 例項解析Oracle是共享模式還是專用模式Oracle模式
- RMAN連線與oracle連線模式的關係Oracle模式
- vue-router的hash模式和history模式詳解Vue模式
- 專用伺服器模式(MTS)和共享伺服器模式伺服器模式
- Vmvare三種網路連線方式:橋接模式、NAT模式和HostOnly模式橋接模式
- 設計模式 - 代理模式詳解設計模式
- 設計模式:代理模式詳解設計模式
- ORACLE專用伺服器模式(DEDICATED)與共享伺服器模式(SHARE)的區別Oracle伺服器模式
- [20191112]oracle共享連線模式埠.txtOracle模式
- 建立與Oracle資料庫伺服器連線的兩種連線模式(專用伺服器與共享伺服器)Oracle資料庫伺服器模式
- 【Shared Server Mode】“專有伺服器模式”調整為“共享伺服器模式”Server伺服器模式
- db支援共享模式連線的話shutdown通常會很慢(dispatcher shutdown)模式
- 代理模式詳解模式
- 詳解 - Builder模式UI模式
- 命令模式 詳解模式
- 共享伺服器模式(shared server)和專用伺服器模式(dedicated server)伺服器模式Server
- [20191113]oracle共享連線模式埠2.txtOracle模式
- 設計模式之單例模式詳解設計模式單例
- 設計模式【4】-- 建造者模式詳解設計模式
- 設計模式詳解——工廠模式(二)設計模式
- Java設計模式之策略模式詳解Java設計模式
- 把Azure專線從Class模式遷移到ARM模式模式
- 利用trcsess合併以共享模式連線的session所產生的tracefile!模式Session
- 如何檢視資料庫是專有伺服器模式還是共享伺服器模式資料庫伺服器模式
- 設計模式(5)-建造者模式詳解(易懂)設計模式
- 設計模式(五)抽象工廠模式詳解設計模式抽象
- Python 中的設計模式詳解之:策略模式Python設計模式
- Oracle歸檔模式和非歸檔模式Oracle模式
- iPhone放大模式詳解iPhone模式
- 前端路由模式詳解前端路由模式
- Scala模式匹配詳解模式
- Django MTV模式詳解Django模式
- 工廠模式 詳解模式