应用场景如下:数据库里面有很多连接,根据查询条件不同而连接不同的远程库。当程序去执行查询操作时,如果数据库连接不稳定,存储过程就会长时间不返回。当程序主动杀掉查询的线程时,数据库的会话连接仍无法释放。时间一长,就用光了所有数据库连接。我想设置一个oracle的连接和会话时限,不管是去连接link,还是等待数据返回,只要超过该限制,就报错。
listener.ora里面的CONNECT_TIMEOUT_LISTENER好像是连接限制,但如何设置会话限制呢?
请问怎么解决?

解决方案 »

  1.   

    sqlnet.ora 文件中配置 sqlnet.expire_time参数,Dead Connection Detection 在服务器端使用。每当一个客户端的连接建立时,SQL*NET读取此参数,以决定多长时间发送包给连接的客户端,侦测连接是否还有效,如果无效,则通知操作系统释放该会话持有的资源。防止因网络的异常中断导致会话长期持有资源不释放。设置为0应该是不启用DCD。
    如sqlnet.expire_time=10,则表示10分钟
    sqlnet.expire_time的单位为分钟. ------------------------------------------------------------------------------
    Blog: http://blog.csdn.net/tianlesoftware
    网上资源: http://tianlesoftware.download.csdn.net
    相关视频:http://blog.csdn.net/tianlesoftware/archive/2009/11/27/4886500.aspx
    Q Q 群:62697716 
      

  2.   

    按照楼上的意思,必须在远程数据库上设置这个参数··这样在所有从我们数据库发出的dblink,中无效的有可能剔除··但关键是远程的库我们是无法操作的,更不可能改设置我们能动的只有我们自己的数据库,有没有其他办法?
      

  3.   

    你是通过数据库访问远程的数据库? 还是直接程序访问远程数据库?
    如果程序的话,应该是有会话超时设置的 如spring。
      

  4.   

    我现在用的C#访问ORACLE也出现同样问题,如何解决呀?