连接池满问题

编辑
  • 文档创建者:文档助手1
  • 浏览次数:7979次
  • 编辑次数:13次
  • 最近更新:Kevin-s 于 2019-06-02
  • 1. 问题描述

    若日志报 ORA-12519 TNS:no appropriate service handler found,是数据库连接失败的错误,12519 错误是监听不能提供服务。

    2. 原因

    原因是我们定义数据连接后,点击连接时,此时会用掉一个连接池中的一个连接。
    而在定义数据集后,点击预览按钮,此时连接池就会分配连接,可能会使用之前那个连接(之前的连接已释放),或分配一个其他的连接或新建一个连接。
    若此时连接池所有连接都已用完,就会报如下错误:

    当客户请求数据库连接时,首先是查看连接池中是否有空闲连接(指当前没有分配出去的连接)。
    假如存在空闲连接,则把连接分配给用户,并作相应的处理(即标记该连接为正在使用,引用计数加 1)。
    假如没有空闲连接,则查看当前所开的连接数是不是已经达到 maxConn(最大连接数),若没达到就重新创建一个连接给请求的客户;
    若达到就按设定的 maxWaitTime(最大等待时间)进行等待;
    若等待 maxWaitTime 后,仍没有空闲连接,就抛出无空闲连接的异常给用户。

    3. 解决方案

    若您在FR 连接池属性 的设置中,已将最大连接数设置得过大,还出现如上的报错,此时通常就是数据库进程(processes)达到上限导致的,可增大数据库中的连接数目来解决此问题。如下在数据库中修改最大连接数:

    查看当前的连接数

    select count(*) from V$process;

    查看数据库允许的最大连接数

    select value from V$parameter where name='processes';

    修改最大连接数为1000

    alter system set processes=1000 scope=spfile

    重启数据库,再查询最大连接数,数字改变就表示已修改成功。

    说明:当客户释放数据库连接时,先判定该连接的引用次数是否已超过规定值,假如超过就删除该连接,并判定当前连接池内总的连接数是否小于 minConn(最小连接数),若小于就将连接池布满;假如没超过就将该连接标记为开放状态,可供再次复用。可看出正是这套策略保证了数据库连接的有效复用,避免频繁地建立、释放连接所带来的系统资源开销。

    附件列表


    主题: 设计思路
    标签: 暂无标签
    如果您认为本文档还有待完善,请编辑

    文档内容仅供参考,如果你需要获取更多帮助,付费/准付费客户请咨询帆软技术支持
    关于技术问题,您还可以前往帆软社区,点击顶部搜索框旁边的提问按钮
    若您还有其他非技术类问题,可以联系帆软传说哥(qq:1745114201

    此页面有帮助吗?只是浏览 [ 去社区提问 ]