2012-02-21 73 views
0

我全部,Jboss数据源Oracle配置

我正在使用jboss 5.1.0 jdk 1.6。 当我的web应用程序没有用户一起工作,我执行一个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非活动会话?这里是我的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> 

有一个特殊的配置参数强制不活跃connecionts不出现或视图GV $ SESSION删除吗? 在我的应用程序中,我确信我将连接返回到游泳池。

在此先感谢。

回答

1

大多数情况下,您的会话将会并且应该是非活动的。

INACTIVE会话仅仅意味着在该特定时刻该会话不会执行任何特定的SQL语句。这并不意味着会话需要清理。它与你的应用程序是否将连接返回到池无关。它只是意味着有一个开放的数据库连接,并不是立即执行SQL语句。

您当然可以通过在查询中添加WHERE status = 'ACTIVE'来查询GV$session仅查找ACTIVE会话。但是这可能会排除大部分由中间层打开的会话,因为大部分时间他们不会执行SQL语句。

+0

谢谢您的快速回复Justin! – jzafrilla 2012-02-21 08:36:32