Oracle数据库服务器的两种连接方式

oracle提供了两种数据库连接方式,一种是专有连接方式,另一种是共享连接方式。区别在于专有连接方式是一个用户对应一个数据库服务器进程,而共享服务器连接方式是多个用户可以不定向轮流使用一个服务器进程。oracle推荐专有连接,一个session对应一个服务器进程,会减少竞争,对于较长事务很有用,但是会耗费PGA资源;共享连接方式对于事务执行时间短且服务器资源受限的系统是有利的。对于该使用哪种连接方式,自己权衡。
我们可以通过dbca设置数据库的连接方式:
Oracle数据库服务器的两种连接方式_第1张图片
当然我们也可以通过修改参数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)上给提供了专有连接方式的模式图:
Oracle数据库服务器的两种连接方式_第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官方文档也给了共享模式图:
Oracle数据库服务器的两种连接方式_第3张图片
SQL> alter system set shared_servers=5;设置数据库服务器进程数量是5


系统已更改。
通过视图v$shared_server我们可以直观的看到服务器进程:
Oracle数据库服务器的两种连接方式_第4张图片
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;
  3  begin
  4  loop
  5  a := a + 3;
  6  end loop;
  7  end;
  8  /

此时我们查看那个进程为我们这个session服务:
Oracle数据库服务器的两种连接方式_第5张图片
S004是当前为这个session服务的进程。
查看我们设置的两个调度进程:

Oracle数据库服务器的两种连接方式_第6张图片


通过 v$circuit,可以查找到为当前进程服务的调度进程:

通过当前 dispatcher的地址,查找具体的调度进程:
Oracle数据库服务器的两种连接方式_第7张图片

若本地在共享模式下连接数据,则需要配置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,那么共享连接方式将被终结。所有的共享方式连接都会断开(已经连接的会话也会断开)


系统已更改。


你可能感兴趣的:(Oracle数据库服务器的两种连接方式)