Тайм-аут соединения с базой данных jboss при простое в Oracle

У меня есть приложения Java, развернутые на Jboss eap 6.3 в 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, произойдет тайм-аут соединения ввода-вывода базы данных.

В своем исследовании я предполагаю, что сетевой брандмауэр заблокировал это соединение, если внутри нет трафика. У меня вопрос, как бороться с сетевым брандмауэром? Есть ли какой-либо параметр для добавления внутри соединения jndi в конфигурацию jboss xml?


person squallbayu    schedule 13.05.2016    source источник


Ответы (1)


Привет, @squallbayu, не уверен на 100%, что это может помочь, и вы, вероятно, уже решили проблему, однако, согласно нашему администратору баз данных enable=broken работает только в том случае, если DCD Dead Connection Detection включен на сервере базы данных, наш сервер (ы) - Oracle ODA. Этот PDF-файл от Oracle Обнаружение мертвого соединения может вам помочь или ваши администраторы баз данных сделают это, и есть также примечание Oracle 1641167.1, которое описывает это.

Краткий обзор:

Обнаружение мертвых соединений (DCD) - это функция Oracle Net, которая помогает восстанавливать ресурсы, выделенные для соединения, которое больше не используется. DCD был улучшен в Oracle Database 12c, чтобы значительно сократить время обнаружения с примерно 15 минут до 2-3 минут. В этом документе [ссылка в PDF-формате] представлен обзор механизмов DCD 12c и до 12c, подробные сведения о конфигурации и преимущества механизма 12c.

Короче говоря, в основном это установка SQLNET.EXPIRE_TIME примерно на 10 минут в файле базы данных SQLNET.ORA.

person JGlass    schedule 25.08.2017