10、Oracle三种监听方式

客户端对监听的三种连接方式

1、专用服务器模式


专用服务器模式默认是启用的

专用服务器模式特点:
1、一个连接对应一个server process
好处:这个连接发送的SQL会被马上处理
坏处:即使这个连接空闲,这个server process还是存在,也需要占用资源,至少是内存资源
2、这种连接方式适合:连接数不多,但是每个连接相对繁忙的情况
3、一般数据库的连接数不超过1000,所以这种连接方式不适合大量的连接请求,连接数 <= 1000

2、共享服务器模式


图解:
例如:
启动4个进程(调度进程(dispatcher)或者代理进程),然后启动10个共享服务器进程(shared server process)来干活,现在有1000个连接,这1000个连接都分布到4个调度进程上,也就是每个调度进程要处理250个连接;
一个用户连接到其中一个调度进程上,发送出一条SQL,然后这个调度进程就把这条SQL放到一个队列里面去;
然后呢,同样有1000个连接,连接到这4个调度进程上,这时候,只需要启动4个调度进程就可以处理这1000个连接,所以可以启动少量的dispatcher,处理大量的连接,然后,dispatcher把这1000个连接放到队列里面去,这时候,10个共享服务器进程会轮询队列,比如共享服务器进程1轮询到一条SQL,它就执行这一条SQL,如果这条SQL是dispatcher1发出来的,它就把这个执行结果发送给dispatcher1

共享服务器模式只要设置了dispatcher和shared_services,共享服务器模式就启用了

共享服务器模式的特点:
1、处理连接数量很大
2、每一个连接相对轻松的情况,这种情况需要配置:dispatcher和共享服务器进程

配置dispatcher调度进程

查看dispatcher:

SQL> show parameter dispatcher
NAME				                 TYPE	     VALUE
------------------------------------ ----------- ------------------------------
dispatchers			                 string	     (PROTOCOL=TCP) (SERVICE=cisXDB)
max_dispatchers 	                      integer

配置dispatcher:

SQL> alter system set DISPATCHERS = '(PROTOCOL=TCP)(DISPATCHERS=3)'  -- 设置dispatcher为3个
SQL> alter system set max_dispatchers = 10;   -- 设置dispatcher最大10个(最大不超过10个)

查看dispatcher进程:

[oracle@db11g ~]$ ps -ef | grep ora
root      1409  1390  0 08:44 pts/0    00:00:00 su - oracle
oracle    1410  1409  0 08:44 pts/0    00:00:00 -bash
oracle    1436     1  0 08:44 ?        00:00:00 /u01/app/oracle/product/11.2.0/db_1/bin/tnslsnr LISTENER -inherit
oracle    1446     1  0 08:45 ?        00:00:01 ora_pmon_orcl
oracle    1448     1  0 08:45 ?        00:00:07 ora_psp0_orcl
oracle    1450     1  8 08:45 ?        00:09:09 ora_vktm_orcl
oracle    1454     1  0 08:45 ?        00:00:00 ora_gen0_orcl
oracle    1456     1  0 08:45 ?        00:00:01 ora_diag_orcl
oracle    1458     1  0 08:45 ?        00:00:01 ora_dbrm_orcl
oracle    1460     1  0 08:45 ?        00:00:19 ora_dia0_orcl
oracle    1462     1  0 08:45 ?        00:00:01 ora_mman_orcl
oracle    1464     1  0 08:45 ?        00:00:01 ora_dbw0_orcl
oracle    1466     1  0 08:45 ?        00:00:01 ora_lgwr_orcl
oracle    1468     1  0 08:45 ?        00:00:04 ora_ckpt_orcl
oracle    1470     1  0 08:45 ?        00:00:00 ora_smon_orcl
oracle    1472     1  0 08:45 ?        00:00:00 ora_reco_orcl
oracle    1474     1  0 08:45 ?        00:00:04 ora_mmon_orcl
oracle    1476     1  0 08:45 ?        00:00:09 ora_mmnl_orcl
oracle    1478     1  0 08:45 ?        00:00:00 ora_d000_orcl    -- dispatcher进程
oracle    1480     1  0 08:45 ?        00:00:00 ora_s000_orcl
oracle    1492     1  0 08:45 ?        00:00:00 ora_qmnc_orcl
oracle    1504     1  0 08:45 ?        00:00:01 ora_cjq0_orcl
oracle    1517     1  0 08:45 ?        00:00:00 ora_q000_orcl
oracle    1519     1  0 08:45 ?        00:00:00 ora_q001_orcl
oracle    1537     1  0 08:50 ?        00:00:00 ora_smco_orcl
oracle    1572     1  0 09:00 ?        00:00:00 ora_w001_orcl
oracle    2117  1410  0 10:29 pts/0    00:00:00 ps -ef
oracle    2118  1410  0 10:29 pts/0    00:00:00 grep ora

配置共享服务器进程

查看共享服务器进程:

SQL> show parameter shared
NAME				                 TYPE	     VALUE
------------------------------------ ----------- ------------------------------
hi_shared_memory_address	           integer	 0
max_shared_servers		           integer
shared_memory_address		           integer	 0
shared_pool_reserved_size	       big integer       6710886
shared_pool_size		             big integer       0
shared_server_sessions		           integer
shared_servers			           integer	 1

配置共享服务器:

SQL> alter system set shared_servers = 10;     -- 设置shared_servers为10个
System altered.

查看共享服务器进程:

[oracle@db11g ~]$ ps -ef | grep ora
root      1409  1390  0 08:44 pts/0    00:00:00 su - oracle
oracle    1410  1409  0 08:44 pts/0    00:00:00 -bash
oracle    1436     1  0 08:44 ?        00:00:00 /u01/app/oracle/product/11.2.0/db_1/bin/tnslsnr LISTENER -inherit
oracle    1446     1  0 08:45 ?        00:00:01 ora_pmon_orcl
oracle    1448     1  0 08:45 ?        00:00:07 ora_psp0_orcl
oracle    1450     1  8 08:45 ?        00:09:49 ora_vktm_orcl
oracle    1454     1  0 08:45 ?        00:00:00 ora_gen0_orcl
oracle    1456     1  0 08:45 ?        00:00:01 ora_diag_orcl
oracle    1458     1  0 08:45 ?        00:00:01 ora_dbrm_orcl
oracle    1460     1  0 08:45 ?        00:00:21 ora_dia0_orcl
oracle    1462     1  0 08:45 ?        00:00:01 ora_mman_orcl
oracle    1464     1  0 08:45 ?        00:00:01 ora_dbw0_orcl
oracle    1466     1  0 08:45 ?        00:00:01 ora_lgwr_orcl
oracle    1468     1  0 08:45 ?        00:00:05 ora_ckpt_orcl
oracle    1470     1  0 08:45 ?        00:00:00 ora_smon_orcl
oracle    1472     1  0 08:45 ?        00:00:00 ora_reco_orcl
oracle    1474     1  0 08:45 ?        00:00:04 ora_mmon_orcl
oracle    1476     1  0 08:45 ?        00:00:09 ora_mmnl_orcl
oracle    1478     1  0 08:45 ?        00:00:00 ora_d000_orcl
oracle    1480     1  0 08:45 ?        00:00:00 ora_s000_orcl
oracle    1492     1  0 08:45 ?        00:00:00 ora_qmnc_orcl
oracle    1504     1  0 08:45 ?        00:00:01 ora_cjq0_orcl
oracle    1517     1  0 08:45 ?        00:00:00 ora_q000_orcl
oracle    1519     1  0 08:45 ?        00:00:00 ora_q001_orcl
oracle    1537     1  0 08:50 ?        00:00:00 ora_smco_orcl
oracle    1572     1  0 09:00 ?        00:00:00 ora_w001_orcl
oracle    2134     1  0 10:34 ?        00:00:00 ora_s001_orcl
oracle    2136     1  0 10:34 ?        00:00:00 ora_s002_orcl
oracle    2138     1  0 10:34 ?        00:00:00 ora_s003_orcl
oracle    2140     1  0 10:34 ?        00:00:00 ora_s004_orcl
oracle    2142     1  0 10:34 ?        00:00:00 ora_s005_orcl      -- 共享服务器进程
oracle    2144     1  0 10:34 ?        00:00:00 ora_s006_orcl
oracle    2146     1  0 10:34 ?        00:00:00 ora_s007_orcl
oracle    2148     1  0 10:34 ?        00:00:00 ora_s008_orcl
oracle    2150     1  0 10:34 ?        00:00:00 ora_s009_orcl
oracle    2160  1410  0 10:37 pts/0    00:00:00 ps -ef
oracle    2161  1410  0 10:37 pts/0    00:00:00 grep ora

专用服务器模式和共享服务器模式都启动时
当专用服务器模式和共享服务器模式都启动的时候:客户端都可以连接这两种模式,但是连接哪种模式是由客户端来决定的

客户端怎么控制连接专用服务器模式还是共享服务器模式?
修改tnsname.ora文件

[oracle@db11g admin]$ vi tnsnames.ora

# tnsnames.ora Network Configuration File: /u01/app/oracle/product/11.2.0/db_1/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.
CISTEST =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.70)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = cis)
      (SERVICE = dedicated)      -- 加上这一行,dedicated:表示使用专用服务器模式连接
    )                            -- 如果添加:(SERVICE = shared):表示使用共享服务器模式连接
  )

3、连接池


图解:
客户端连接应用服务器,应用服务器主动地模拟客户端,向数据库发起了N条连接(N个连接都是专用服务器连接),就是应用服务器向数据库建立了N条连接;然后,一个客户端连接到应用服务器上,客户端打开某一个应用,要搜索某个东西,
这时候,这个东西在数据库里面,应用服务器就要从数据库里取数据,应用服务器这时候就从连接池里面占用一个连接,
从连接池里面找一个空闲的连接占用这个连接,然后数据库给应用服务器一个响应,把数据给应用服务器,应用服务器再把数据返回给客户端

连接池是在服务器端建立的

连接池:
1、应用服务器模拟客户端向数据库建立了一个连接池(n个专用服务器连接)
2、客户端要从数据库取数据,应用服务器占用一个连接,发送SQL
3、连接对应的server process处理SQL
4、SQL结果返回,结果返回给用户
5、释放连接对应的server process

连接池特点
1、可以处理大量的客户端连接
2、数据库的连接池数量不是很大
3、不需要频繁的建立和断开对数据库的连接

连接池需要应用的支持
连接池只是被占用和释放,连接池一直存在

如果应用不支持怎么办?
就会出现大量的连接建立、断开

配置连接池

服务器端配置

SQL> exec dbms_connection_pool.configure_pool(minsize => 5,maxsize => 10,incrsize => 1,inactivity_timeout => 60);
-- 连接池的最小连接数为5个,最大10个,随着连接的增加,每次增加一个;如果不用的时候,比如现在有10个,慢慢的其中五个会断开,回到5个连接

SQL> exec dbms_connection_pool.start_pool;     -- 启动连接池

查看连接池:

[oracle@db11g admin]$ ps -ef | grep ora
root      1409  1390  0 08:44 pts/0    00:00:00 su - oracle
oracle    1410  1409  0 08:44 pts/0    00:00:00 -bash
oracle    1436     1  0 08:44 ?        00:00:00 /u01/app/oracle/product/11.2.0/db_1/bin/tnslsnr LISTENER -inherit
oracle    1446     1  0 08:45 ?        00:00:02 ora_pmon_orcl
oracle    1448     1  0 08:45 ?        00:00:12 ora_psp0_orcl
oracle    1450     1  8 08:45 ?        00:16:09 ora_vktm_orcl
oracle    1454     1  0 08:45 ?        00:00:01 ora_gen0_orcl
oracle    1456     1  0 08:45 ?        00:00:01 ora_diag_orcl
oracle    1458     1  0 08:45 ?        00:00:01 ora_dbrm_orcl
oracle    1460     1  0 08:45 ?        00:00:33 ora_dia0_orcl
oracle    1462     1  0 08:45 ?        00:00:01 ora_mman_orcl
oracle    1464     1  0 08:45 ?        00:00:01 ora_dbw0_orcl
oracle    1466     1  0 08:45 ?        00:00:01 ora_lgwr_orcl
oracle    1468     1  0 08:45 ?        00:00:08 ora_ckpt_orcl
oracle    1470     1  0 08:45 ?        00:00:01 ora_smon_orcl
oracle    1472     1  0 08:45 ?        00:00:00 ora_reco_orcl
oracle    1474     1  0 08:45 ?        00:00:06 ora_mmon_orcl
oracle    1476     1  0 08:45 ?        00:00:15 ora_mmnl_orcl
oracle    1478     1  0 08:45 ?        00:00:00 ora_d000_orcl
oracle    1480     1  0 08:45 ?        00:00:00 ora_s000_orcl
oracle    1492     1  0 08:45 ?        00:00:00 ora_qmnc_orcl
oracle    1504     1  0 08:45 ?        00:00:02 ora_cjq0_orcl
oracle    1517     1  0 08:45 ?        00:00:00 ora_q000_orcl
oracle    1519     1  0 08:45 ?        00:00:00 ora_q001_orcl
oracle    1537     1  0 08:50 ?        00:00:01 ora_smco_orcl
oracle    2134     1  0 10:34 ?        00:00:00 ora_s001_orcl
oracle    2136     1  0 10:34 ?        00:00:00 ora_s002_orcl
oracle    2138     1  0 10:34 ?        00:00:00 ora_s003_orcl
oracle    2140     1  0 10:34 ?        00:00:00 ora_s004_orcl
oracle    2142     1  0 10:34 ?        00:00:00 ora_s005_orcl
oracle    2144     1  0 10:34 ?        00:00:00 ora_s006_orcl
oracle    2146     1  0 10:34 ?        00:00:00 ora_s007_orcl
oracle    2148     1  0 10:34 ?        00:00:00 ora_s008_orcl
oracle    2150     1  0 10:34 ?        00:00:00 ora_s009_orcl
oracle    2374     1  0 11:40 ?        00:00:00 ora_w000_orcl
oracle    2402     1  0 11:49 ?        00:00:00 ora_n000_orcl    -- 连接池的代理
oracle    2404     1  0 11:49 ?        00:00:00 ora_l000_orcl
oracle    2406     1  0 11:49 ?        00:00:00 ora_l001_orcl
oracle    2408     1  0 11:49 ?        00:00:00 ora_l002_orcl    -- 5个连接的连接池
oracle    2410     1  0 11:49 ?        00:00:00 ora_l003_orcl
oracle    2412     1  0 11:49 ?        00:00:00 ora_l004_orcl
oracle    2413  1410  1 11:49 pts/0    00:00:00 ps -ef
oracle    2414  1410  0 11:49 pts/0    00:00:00 grep ora
select connection_pool, status, minsize, maxsize, INACTIVITY_TIMEOUT from dba_cpool_info;
关闭连接池:
SQL> exec dbms_connection_pool.stop_pool;    -- 关闭连接池

客户端配置
修改tnsname.ora文件

[oracle@db11g admin]$ vi tnsnames.ora

# tnsnames.ora Network Configuration File: /u01/app/oracle/product/11.2.0/db_1/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.
CISTEST =
(DESCRIPTION =
(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.70)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = cis)
(SERVICE = pooled)

)

)

添加内容:
(SERVER = pooled)
posted @ 2024-11-20 14:18  一只c小凶许  阅读(1)  评论(0编辑  收藏  举报