Oracle資料庫伺服器的兩種連線方式
oracle提供了兩種資料庫連線方式,一種是專有連線方式,另一種是共享連線方式。區別在於專有連線方式是一個使用者對應一個資料庫伺服器程式,而共享伺服器連線方式是多個使用者可以不定向輪流使用一個伺服器程式。oracle推薦專有連線,一個session對應一個伺服器程式,會減少競爭,對於較長事務很有用,但是會耗費PGA資源;共享連線方式對於事務執行時間短且伺服器資源受限的系統是有利的。對於該使用哪種連線方式,自己權衡。
我們可以透過dbca設定資料庫的連線方式:
當然我們也可以透過修改引數shared_servers來設定連線資料庫的方式,該引數是0時,表示是專有連線,不為0時,則是共享連線。
SQL> select * from v$version where rownum=1;
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
我們可以透過dbca設定資料庫的連線方式:
當然我們也可以透過修改引數shared_servers來設定連線資料庫的方式,該引數是0時,表示是專有連線,不為0時,則是共享連線。
SQL> select * from v$version where rownum=1;
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
下面依次分析專有和共享連線:
專有連線方式:
SQL> show parameter shared_servers;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
max_shared_servers integer
shared_servers integer 0
專有連線方式:
SQL> show parameter shared_servers;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
max_shared_servers integer
shared_servers integer 0
現在我的資料庫連線方式是專有連線。
官方文件(11.2)上給提供了專有連線方式的模式圖:
當我們本地連線資料庫時,配置服務命名時,需要我們指明連線資料庫的方式,下面是tnsnames.ora裡配置資訊:
55 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 178.20.121.96)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = jing)
)
)
SQL> select distinct SID from v$mystat;
SID
----------
125
SQL> select server from v$session where SID=125;
SERVER
---------
DEDICATED
我們透過SID來查詢為此session服務的作業系統程式號(spid)以及資料庫內部標識的程式號(pid):
SQL> select paddr from v$session where sid=125;
PADDR
--------
393C5774
SQL> select pid,spid from v$process where addr='393C5774';
PID SPID
---------- ------------------------
19 4848
,
上圖的19號程式是為此session服務的程式,專有伺服器程式又叫做shadow process(shad)
共享連線方式:
我們可以透過修改引數shared_servers設定共享連線模式,11.2官方文件也給了共享模式圖:
SQL> alter system set shared_servers=5;設定資料庫伺服器程式數量是5
系統已更改。
透過檢視v$shared_server我們可以直觀的看到伺服器程式:
SQL> alter system set shared_server_sessions=20;設定資料庫的會話數是20
系統已更改。
SQL> show parameter dispatchers;排程程式引數
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
dispatchers string (PROTOCOL=TCP) (SERVICE=orcl3939XDB)
max_dispatchers integer
如果dispatches引數設定為空的話,不能啟動共享伺服器。
我們可以設定該引數:
alter system set dispatchers='(protocol=TCP)(disp=8)(serv=xxx)’
前面表示的是協議,disp表示排程器(dipatcher)的程式數量,service分別指定要採用共享伺服器模式的服務名稱。使用上面的模式指定只啟動某個服務的共享模式,如果要設定所有服務都使用共享模式,則設定為:
SQL> alter system set dispatchers='(PROTOCOL=TCP)(dispatchers=2)';
系統已更改。
SQL> select distinct sid from v$mystat;
SID
----------
9
SQL> select paddr from v$session where sid=9;
PADDR
--------
393C8DAC
SQL> select distinct server from v$session;
SERVER
---------
DEDICATED
SHARED
SQL> select pid,spid from v$process where addr='393C8DAC';
PID SPID
---------- ------------------------
24 9722
3 begin
4 loop
5 a := a + 3;
6 end loop;
7 end;
8 /
此時我們檢視那個程式為我們這個session服務:
S004是當前為這個session服務的程式。
檢視我們設定的兩個排程程式:
透過當前dispatcher的地址,查詢具體的排程程式:
若本地在共享模式下連線資料,則需要配置tnsnames.ora:
55 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 178.20.121.96)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = SHARED)
(SERVICE_NAME = jing)
)
)
以下演示關閉共享連線模式:
SQL> alter system set shared_servers=0 scope=both;
系統已更改。
SQL> alter system set max_shared_servers=0 scope=both;
系統已更改。
SQL> show parameter shared_servers
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
max_shared_servers integer 0
shared_servers integer 0
同時將引數shared_servers和max_shared_servers都設定為0,那麼共享連線方式將被終結。所有的共享方式連線都會斷開(已經連線的會話也會斷開)
系統已更改。
為無法我是河陽
而他個人的觀點
官方文件(11.2)上給提供了專有連線方式的模式圖:
當我們本地連線資料庫時,配置服務命名時,需要我們指明連線資料庫的方式,下面是tnsnames.ora裡配置資訊:
55 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 178.20.121.96)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = jing)
)
)
注意:當我們用共享方式連線資料庫時,則tnsnames.ora裡的SERVICE_NAME必需是動態註冊的監聽服務。
SQL> select distinct SID from v$mystat;
SID
----------
125
SQL> select server from v$session where SID=125;
SERVER
---------
DEDICATED
SQL> select paddr from v$session where sid=125;
PADDR
--------
393C5774
PID SPID
---------- ------------------------
19 4848
,
上圖的19號程式是為此session服務的程式,專有伺服器程式又叫做shadow process(shad)
共享連線方式:
我們可以透過修改引數shared_servers設定共享連線模式,11.2官方文件也給了共享模式圖:
SQL> alter system set shared_servers=5;設定資料庫伺服器程式數量是5
系統已更改。
透過檢視v$shared_server我們可以直觀的看到伺服器程式:
SQL> alter system set shared_server_sessions=20;設定資料庫的會話數是20
系統已更改。
SQL> show parameter dispatchers;排程程式引數
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
dispatchers string (PROTOCOL=TCP) (SERVICE=orcl3939XDB)
max_dispatchers integer
我們可以設定該引數:
alter system set dispatchers='(protocol=TCP)(disp=8)(serv=xxx)’
前面表示的是協議,disp表示排程器(dipatcher)的程式數量,service分別指定要採用共享伺服器模式的服務名稱。使用上面的模式指定只啟動某個服務的共享模式,如果要設定所有服務都使用共享模式,則設定為:
alter system set dispatchers='(PROTOCOL=TCP)';
SQL> alter system set dispatchers='(PROTOCOL=TCP)(dispatchers=2)';
系統已更改。
SQL> select distinct sid from v$mystat;
SID
----------
9
SQL> select paddr from v$session where sid=9;
PADDR
--------
393C8DAC
SQL> select distinct server from v$session;
SERVER
---------
DEDICATED
SHARED
PID SPID
---------- ------------------------
24 9722
為了模擬整個過程,寫段死迴圈:
SQL> declare
2 a number :=0;SQL> declare
3 begin
4 loop
5 a := a + 3;
6 end loop;
7 end;
8 /
S004是當前為這個session服務的程式。
檢視我們設定的兩個排程程式:
透過v$circuit,可以查詢到為當前程式服務的排程程式:
透過當前dispatcher的地址,查詢具體的排程程式:
若本地在共享模式下連線資料,則需要配置tnsnames.ora:
55 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 178.20.121.96)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = SHARED)
(SERVICE_NAME = jing)
)
)
以下演示關閉共享連線模式:
SQL> alter system set shared_servers=0 scope=both;
系統已更改。
系統已更改。
SQL> show parameter shared_servers
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
max_shared_servers integer 0
shared_servers integer 0
系統已更改。
為無法我是河陽
而他個人的觀點
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29876893/viewspace-1578032/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 連線MySQL資料庫的兩種方式介紹MySql資料庫
- Java連線oracle資料庫的兩種常用方法JavaOracle資料庫
- python連線clickhouse資料庫的兩種方式小結Python資料庫
- Oracle資料庫連線方式Oracle資料庫
- Oracle資料庫中表的四種連線方式講解Oracle資料庫
- 建立與Oracle資料庫伺服器連線的兩種連線模式(專用伺服器與共享伺服器)Oracle資料庫伺服器模式
- mybatis連線資料庫的幾種方式MyBatis資料庫
- HTTP代理的兩種連線方式HTTP
- golang兩種資料庫連線池實現Golang資料庫
- Spring連線資料庫的幾種常用的方式Spring資料庫
- 兩種啟動資料庫的方式資料庫
- 資料庫連線 系列一:laravel框架如何連線兩個資料庫(不同伺服器)資料庫Laravel框架伺服器
- oracle資料庫透過sqlplus連線的幾種方式介紹Oracle資料庫SQL
- 資料庫連線的方法種種資料庫
- 各種連線資料庫的連線字串資料庫字串
- 117 遠端連線mysql資料庫的幾種方式MySql資料庫
- Oracle的三種表連線方式Oracle
- 各種資料庫連線資料庫
- 使用hostname方式連線資料庫!資料庫
- 各種資料庫的jdbc驅動下載及連線方式資料庫JDBC
- Oracle資料庫中的表連線方式及使用場合Oracle資料庫
- 兩種方式建立sqlserver連結伺服器SQLServer伺服器
- Oracle連線MongoDB資料庫OracleMongoDB資料庫
- Java連線oracle資料庫JavaOracle資料庫
- 資料結構線性表兩種方式分享資料結構
- MySQL 簡潔連線資料庫方式MySql資料庫
- ASP,access資料庫連線方式大全資料庫
- Oracle資料庫的四種啟動方式Oracle資料庫
- JDBC連線各種資料庫的字串JDBC資料庫字串
- .Net與Oracle的資料庫連線Oracle資料庫
- Android連線網路資料庫的方式Android資料庫
- 資料庫表的連線方式及用法(一)資料庫
- 【Oracle】Python 連線Oracle 資料庫OraclePython資料庫
- Wordpress獨立站資料庫連線錯誤的三種解決方式資料庫
- JDBC連線三種資料庫例子JDBC資料庫
- 如何檢視MySQL資料庫一段時間內的連線情況?兩種方式來解鎖~MySql資料庫
- Python 連線 Oracle資料庫PythonOracle資料庫
- [Navicate]Navicate連線Oracle資料庫Oracle資料庫