10、Oracle三种监听方式

news/2024/12/26 1:15:10/文章来源:https://www.cnblogs.com/xgq20210831/p/18556754

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

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)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/837327.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

9、oracle trace监听连接

trace(跟踪)监听 有时候会出现这么一种情况:就是客户端连接不上监听,或者连接上监听以后有各种各样的故障,比如:连接慢、报错等等相关的信息,所以有时候需要对监听起一个trace(跟踪),看一下客户端对数据库监听的连接的一个情况如果客户端连接监听连不上的一个排错过程…

8、tnsnames文件配置

监听的配置文件 2、tnsnames.ora文件 tnsnames.ora文件:客户端的 配置tnsnames.ora监听文件 1、使用netca命令 指定图像映射机器 [oracle@db11g admin]$ export DISPLAY=192.168.56.1:0.0netca命令 [oracle@db11g admin]$ netca2、选择local net service name configuration,…

Redis中常见的数据类型及其应用场景Ib

五种常见数据类型 Redis中的数据类型指的是 value存储的数据类型,key都是以String类型存储的,value根据场景需要,可以以String、List等类型进行存储。各数据类型介绍:Redis数据类型对应的底层数据结构String 类型的应用场景 常用命令存放键值:set key value [EX seconds] …

博客园-awescnb插件-geek皮肤优化-links优化

简介 博客园-awescnb插件-geek皮肤下,对自定义链接(links)优化将自定义链接添加至原主链接下,同时适配移动端场景效果实现定义自定义HTML: 博客园->管理->设置->页脚 HTML 代码 添加相关代码//生成链接function createLinks(){for(let item of config.links){const…

一个基于 .NET 8.0 构建的简单、跨平台、模块化商城系统mt

公司SaaS系统有个给客户的员工发放金币,最后计算金币老是流水和总额对不上,以前负责这块的人做过修改还是不对,后来这负责人离职,接手大数据的事情后,该客户真在用金币这块业务,而且财务用这个结算对账,2023年底客户逼急了,要彻底解决这个问题:和负责这块的产品经理沟通…

Flutter手势组件(4):MouseRegion

一、MouseRegion介绍 在我们进行 h5 开发的时候,我们都知道css有一个hover来改变元素的样式,那么我们在Flutter中也可以通过MouseRegion是监听区域内鼠标的进入和退出以及移动轨迹。 二、什么情况下使用MouseRegion? MouseRegion常用于Flutter的Web开发或者桌面程序中,当我…

Flutter手势组件(3):GestureDetector

一、GestureDetector介绍 在前面的文章中我们介绍了Listener,而GestureDetector是对Listener的封装,提供非常多的手势,包括单击、双击、拖动、混合手势等。 二、什么情况下使用GestureDetector? 当我们需要对文字需要增加点击事件时,或者需要对组件进行拖动、缩放等那我们就…

11.18 学习

11.18 学习 1.sqlselect m.user_id,round(ifnull(cfnum/p,0),2) confimation_rate from (select a.user_id,ifnull(num,0) p from Signups a left join (select user_id,count(*) num from Confirmations group by user_id)b on a.user_id=b.user_id) m left join(select user_…

2024-11-20:交替子数组计数。用go语言,给定一个二进制数组 nums, 如果一个子数组中的相邻元素的值都不相同,我们称这个子数组为交替子数组。 请返回数组 nums 中交替子数组的总数。 输

2024-11-20:交替子数组计数。用go语言,给定一个二进制数组 nums, 如果一个子数组中的相邻元素的值都不相同,我们称这个子数组为交替子数组。 请返回数组 nums 中交替子数组的总数。 输入: nums = [0,1,1,1]。 输出: 5。 解释: 以下子数组是交替子数组:[0] 、[1] 、[1] …

登录对话框

1.粉红(1)显示   (2)格式/**该页面为粉红色皮肤 *//*背景*/ #frame_background{ border-image:url(:/res/pic/background-1.png); }/*登录背景*/ #frame_login{background-color:#ffffff}/*右侧图片*/ #frame_pic{background-image:url(:/res/pic/1.png);} /*账户和密码框…

Windows注册表增加右键多级菜单

前言全局说明一、说明 环境: Windows 11 家庭版 23H2 22631.3737Windows 7 旗舰版二、注册表说明 2.1 项说明 HKEY_CLASSES_ROOT*:系统所有文件,右键系统任一文件都会添加右键菜单 HKEY_CLASSES_ROOT\.txt:在.txt文件,添加右键菜单 HKEY_CLASSES_ROOT\AllFilesystemObjects…

关于使用Pycharm新建flask项目 from flask 红色波浪线解决办法

首先保证 flask已经安装 pip install flask如果依旧报红,依次打开:设置->项目:->项目结构点击 添加内容根 选择当前项目的.venv/Lib/site-packages最后应用保存