设为首页 加入收藏

TOP

Oracle数据库服务器的两种连接方式(一)
2015-07-24 12:01:05 来源: 作者: 【 】 浏览:12
Tags: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

下面依次分析专有和共享连接:
专有连接方式:
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)
)
)

注意:当我们用共享方式连接数据库时,则tnsnames.ora里的SERVICE_NAME必需是动态注册的监听服务。
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分别指定要采用共享服务器模式的服务名称。使用上面的模式指定只启动某个服务的共享模式,如果要设置所有服务都使用共享模式,则设置为:
 
 
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
SQL> select pid,spid from v$process where addr='393C8DAC';


PID SPID
---------- ------------------------
24 9722


为了模拟整个过程,写段死循环:
SQL> declare 2 a number :=0;
 begin
loop
 a := a + 3;
 end loop;
 end;
/


此时我们查看那个进程为我们这个session服务:

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)
首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Oracle实用小技巧 下一篇Oracle生成随机日期时间

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: