我们的.NET Web应用程序使用ODP.NET进行连接,其用于连接数据库的Oracle用户是“webuserOracle”。该Web应用程序始终关闭连接并处置连接。
但是,在我们的Oracle 10g数据库中,我们发现Oracle User“webuserOracle”的会话和进程值总是很高,因为它们不会关闭或死亡。
我们决定为“webuserOracle”设置Oracle配置文件,以便将连接时间限制为最多5分钟。
CREATE PROFILE profile_webuserOracle LIMIT CONNECT_TIME 5;
ALTER USER webuserOracle PROFILE profile_webuserOracle;
问题:
对于网络应用,将连接限制为5分钟,意味着用户可以与网络应用进行2小时的互动。 5分钟的限制仅适用于触发的事件(如单击按钮)以连接到数据库。 Con.Open和Con.Dispose之间发生的所有事情都是5分钟:
Dim con As OracleConnection = oraConexion()
con.Open()
''' There'll be a limit of 5 minutes to run the code here
con.Close()
con.Dispose()
答案 0 :(得分:1)
在Web应用程序的配置文件中设置CONNECT_TIME
可能是一个非常糟糕的主意。
首先,通常,三层应用程序将使用中间层中的连接池。这意味着中间层服务器打开与数据库的连接池,这些连接池将长时间保持打开状态,并根据需要分发给Web会话。这意味着单击整个站点的单个Web用户可能会在每次单击时获得不同的数据库会话,并且大量Web用户将使用单个数据库会话。
如果为连接池连接设置CONNECT_TIME
,
select 1 from dual
)来验证其中的一部分,以验证在交互开始之前尚未经过5分钟但没有保证在页面上运行第一个查询时不会达到超时。 您要解决的真正问题是什么?中间层维护一个不关闭的数据库连接池是完全正常的。这是完全正常和健康的。如果要减少一次打开的连接数,可以调整中间层服务器上的连接池设置。