在oracle8x中完成主动断开后再连接[新版]在Oracle8x中实现自动断开后再连接在Oracle8x中实现自动断开后再连接在实际的数据库应用中,我们经常碰到这样一个问题,连接到Oracle数据库的用户在作了一次操作后,再也没有后续操作,但却长时间没有和数据库断开连接。对于一个小型的应用系统来讲,本身的连接数目就有限,这似乎没有什么严重的后果,但假如对于一个大型的数据库应用。如税务、工商等,假如数据库的连接数目很多,对于数据库服务器来讲,多一个连接就要多消耗一份资源,假如大量用户连接进入数据库系统但却不进行任何的操作,这无形之中就白白造成了服务器系统资源的浪费,同时造成服务器负载的提高,对于那些确实在工作的用户来讲,就不能最大限度的利用服务器的资源,严重情况下可能造成系统性能的急剧下降。针对这种问题,该如何处理呢,对于目前流行的三层结构(Browser/Application/Server)开发来讲,这个问题可以通过设置应用服务器端的连接共享池(sharedpool)来避免。但对于传统的两层结构(Client/Server)应用,就必须由我们人为干预来避免这种资源浪费情况。具体可以通过一个后台任务来监控系统中的所有进程,对于那些空闲超过一定时间的进程采取一定的非凡处理措施,如在客户端提示用户连接时间太长,假如没有后续操作系统将自动杀掉该连接或者直接将该空闲连接杀掉。下面就来具体讨论如何在Oracle8x环境下实现用户进程的自动监控及其对对超过一定空闲时间连接的处理办法。一、识别系统中超过一定空闲时间的连接要实现后台任务自动对超过一定时间空闲连接的处理,首先第一步工作就是要从所有与数据库服务器的连接中识别出那些连接需要处理,也就是需要获得与服务器连接的每个用户的登陆时间及其最后一次操作后的空闲时间。在Oracle系统中,有一个动态性能视图v$session,该视图保存着系统当前连接的各种动态信息。其中,有两个字段LOGON_TIME和LAST_CALL_ET可以得到上面的两个答案。lLOGON_TIME是一个日期型(Date)字段,为用户登陆时间;lLAST_CALL_ET是一个数字型(Number)字段,其含义是用户最后一条语句执行完毕后的时间,单位为秒。每次用户执行一个新的语句后,该字段复位为0,重新开始记数。我们可以通过该字段来获得一个连接用户最后一次操作数据库后的空闲时间。下面的SQL查询语句可以得到与当前数据库连接的所有用户的一些基本情况,如用户名、状态、连接机器的名称,操作系统中用户的名称,UNIX系统的进程号,在UNIX操作系统级断开连接的语句,Oracle数据库系统断开连接的语句,登陆时间以及最后一次操作到现在的空闲时间等等。,,,osuser操作系统用户名称,spidUNIX进程号,'kill-9'spidUNIX级断开连接,'altersystemkillsession'''''','#''';'Oracle级断开连接,TO_CHAR(logon_time,'dd/mm/yyyyhh24:mi:ss')登陆时间,last_call_et空闲时间秒,TO_CHAR(TRUNC(last_call_et/3600,0))'
在oracle+8x中完成主动断开后再连接[新版] 来自淘豆网www.taodocs.com转载请标明出处.