我都是,
我正在使用jboss 5.1.0 jdk 1.6。 当我的WebAPP没有用户工作时,我执行下一个sql来查看我的Oracle DB上的会话:
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非活动会话中删除或清除?这是我的oracle-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中删除它? 在我的应用程序中,我确信我会返回池中的连接。
提前致谢。
答案 0 :(得分:1)
大多数情况下,您的会话将会而且应该是不活跃的。
INACTIVE会话仅意味着在该特定时刻,该会话不执行任何特定的SQL语句。这并不意味着会话需要清理。它与您的应用程序是否返回池连接无关。它只是意味着存在一个开放的数据库连接,此时不会执行SQL语句。
当然,您可以通过向查询添加GV$session
来查询WHERE status = 'ACTIVE'
仅查找ACTIVE会话。但这可能会排除中间层打开的大多数会话,因为大部分时间他们都不会执行SQL语句。