Jboss数据源Oracle配置
我所有,
我正在使用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 中将其删除? 在我的应用程序中,我确信我将连接返回到池中。
提前致谢。
I all,
I'm using jboss 5.1.0 jdk 1.6.
When my WebAPP don't have users working, i execute the next sql to see sessions on my 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
and the result is:
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
The first result, is an inactive session of my WebAPP, the second, is my active session of SQL Developer.
My question is: How can i remove or clean from the view GV$SESSION inactive sessions?. Here is my 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>
There are an special config parameter to force inactive connecionts don't appear or remove it in view GV$SESSION?
In my app, i'm sure that i return connections to the pool.
Thanks in advance.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
大多数时候,您的会话将并且应该处于非活动状态。
INACTIVE 会话仅仅意味着在该特定时刻,该会话没有执行任何特定的 SQL 语句。这并不意味着会话需要清理。它与您的应用程序是否将连接返回到池无关。它只是意味着存在一个打开的数据库连接,该连接此时并未执行 SQL 语句。
当然,您可以通过在查询中添加
WHERE status = 'ACTIVE'
来查询GV$session
,仅查找 ACTIVE 会话。但这可能会排除中间层打开的大多数会话,因为大多数时候它们不会执行 SQL 语句。Most of the time, your sessions will and should be INACTIVE.
An INACTIVE session merely means that at that particular instant, that session is not executing any particular SQL statement. It doesn't imply that the session needs to get cleaned up. And it has nothing to do with whether your application is returning connections to the pool. It simply means that there is an open database connection that is not at this instant executing a SQL statement.
You could, of course, query
GV$session
looking for only ACTIVE sessions by adding aWHERE status = 'ACTIVE'
to the query. But that will probably exclude most of the sessions opened by the middle tier since most of the time they're not going to be executing SQL statements.