在oracle中

时间:2016-05-13 07:23:58

标签: oracle jdbc jboss firewall connection-timeout

我在jboss eap 6.3上部署了java应用程序,redhat 6连接到oracle 11g。 我正在使用这样的jdbc连接:

<datasource jta="true" jndi-name="java:/jdbc/myjdbc" pool-name="myConfigDS" enabled="true" use-java-context="true" use-ccm="false" statistics-enabled="true">
    <connection-url>jdbc:oracle:thin:@(DESCRIPTION=(enable=broken)(ADDRESS=(PROTOCOL=TCP)(HOST=myhost)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=MYSERVICENAME)))</connection-url>
    <connection-property name="oracle.net.CONNECT_TIMEOUT">10000</connection-property>
    <driver>oracle</driver>
    <pool>
        <min-pool-size>1</min-pool-size>
        <max-pool-size>30</max-pool-size>
        <prefill>true</prefill>
    </pool>
    <security>
        <user-name>myusername</user-name>
        <password>mypassword</password>
    </security>
    <validation>
        <check-valid-connection-sql>SELECT 1 FROM DUAL</check-valid-connection-sql>
        <background-validation>true</background-validation>
        <background-validation-millis>60000</background-validation-millis>
        <stale-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.oracle.OracleStaleConnectionChecker"/>
        <exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.oracle.OracleExceptionSorter"/>
    </validation>
    <timeout>
        <blocking-timeout-millis>5000</blocking-timeout-millis>
        <idle-timeout-minutes>15</idle-timeout-minutes>
    </timeout>
</datasource>

如果该应用程序在几个小时内空闲并且我们尝试查询int数据库,则会发生数据库IO连接超时。

在我的调查中,我假设如果内部没有流量,网络防火墙会阻止此连接。 我的问题是如何处理网络防火墙?在jboss xml配置中是否有任何参数可以在jndi连接中添加?

1 个答案:

答案 0 :(得分:0)

嗨@squallbayu不是100%确定这是否有帮助,而且您可能已经解决了问题但是根据我们的DBA enable=broken只有在数据库服务器上启用DCD Dead Connection Detection时才有效,我们的服务器是Oracle ODA。来自Oracle Dead Connection Detection的此PDF可能会帮助您或您的DBA进行设置,还有一个描述它的Oracle注释1641167.1

执行概览是:

  

死连接检测(DCD)是Oracle Net的一项功能,可帮助恢复为不再可用的连接分配的资源。 Oracle Database 12c中增强了DCD,大大缩短了检测时间,从大约15分钟缩短到2-3分钟。本文[PDF链接]概述了12c和12c之前的DCD机制,配置细节和12c机制的好处

简而言之,它基本上将SQLNET.EXPIRE_TIME设置为数据库SQLNET.ORA文件中的10分钟。