Конфигурация Oracle источника данных Jboss - PullRequest
0 голосов
/ 21 февраля 2012

Я все,

Я использую jboss 5.1.0 jdk 1.6. Когда в моем WebAPP не работают пользователи, я выполняю следующий sql для просмотра сеансов в моей базе данных Oracle:

 SELECT A.INST_ID,A.USERNAME,A.STATUS,A.SCHEMANAME,A.MACHINE,A.PROGRAM, 
      TO_CHAR((SYSDATE -((1/86400)*LAST_CALL_ET)),'YYYY-MM-DD HH24:MI:SS') LAST_CALL, 
      TO_CHAR(A.LOGON_TIME,'YYYY-MM-DD HH24:MI:SS') LOGON_TIME, 
      A.SID,A.SERIAL#, 
A.FAILOVER_TYPE,A.FAILED_OVER, 
A.OSUSER,A.TERMINAL,A.TYPE,A.MODULE,A.SERVER,A.LOCKWAIT,A.RESOURCE_CONSUMER_GROUP 
FROM GV$SESSION A  
WHERE A.SCHEMANAME IN ('USER_DB') 
ORDER BY USERNAME,MACHINE,LAST_CALL ASC

и результат:

1   USR_DB  INACTIVE    USR_DB  machine_name  JDBC Thin Client  2012-02-20 11:05:16 2012-02-20 11:04:46 24  5001    NONE    NO  root    unknown USER    JDBC Thin Client    DEDICATED       OTHER_GROUPS

2   USR_DB  ACTIVE      USR_DB  machine2_name  SQL Developer    2012-02-21 09:05:13 2012-02-21 09:03:23 31  3997    NONE    NO  clien2  unknown USER    SQL Developer   DEDICATED       OTHER_GROUPS

Первый результат - неактивный сеанс моего WebAPP, второй - мой активный сеанс SQL Developer. Мой вопрос: Как я могу удалить или очистить из GV $ SESSION неактивные сеансы ?. Вот мой оракул-ds.xml:

   <?xml version="1.0" encoding="UTF-8"?>
<datasources>
<local-tx-datasource>
        <jndi-name>/MyDS</jndi-name>
        <connection-url>jdbc:oracle:thin:@//myhost:1521/xe</connection-url>
        <driver-class>oracle.jdbc.OracleDriver</driver-class>
        <user-name>USR_DB</user-name>
        <password>password</password>
        <min-pool-size>1</min-pool-size>
        <max-pool-size>20</max-pool-size>
        <idle-timeout-minutes>5</idle-timeout-minutes>
        <check-valid-connection-sql>SELECT 1 FROM DUAL</check-valid-connection-sql>
        <background-validation-millis>400000</background-validation-millis>
        <valid-connection-checker-class-name>org.jboss.resource.adapter.jdbc.vendor.OracleValidConnectionChecker</valid-connection-checker-class-name>
        <metadata>
          <type-mapping>Oracle9i</type-mapping>
        </metadata>
</local-tx-datasource>
</datasources>

Существует специальный параметр конфигурации, чтобы принудительно не отображать или удалять неактивные соединения GV $ SESSION? В моем приложении я уверен, что я возвращаю соединения в пул.

Заранее спасибо.

1 Ответ

1 голос
/ 21 февраля 2012

В большинстве случаев ваши сеансы будут и должны быть НЕАКТИВНЫМИ.

НЕАКТИВНЫЙ сеанс просто означает, что в данный конкретный момент этот сеанс не выполняет какой-либо конкретный оператор SQL. Это не означает, что сессия должна быть очищена. И это не имеет никакого отношения к тому, возвращает ли ваше приложение соединения с пулом. Это просто означает, что существует открытое соединение с базой данных, которое в данный момент не выполняет оператор SQL.

Можно, конечно, запросить GV$session, ища только сеансы ACTIVE, добавив WHERE status = 'ACTIVE' к запросу. Но это, вероятно, исключит большинство сеансов, открытых средним уровнем, так как большую часть времени они не будут выполнять операторы SQL.

...