在Oracle 8x中实现自动断开后再连接的实现

以下的文章主要描述的是如何在Oracle 8x中实现自动断开后再连接的实际操作方案,其中涉及到识别系统中规定超过一定的空闲时间的连接,以及识别及断开空闲用户的存储过程等,相关内容的描述。

在实际的数据库应用中,我们经常遇到这样一个问题,连接到Oracle数据库的用户在作了一次操作后,再也没有后续操作,但却长时间没有和数据库断开连接。对于一个小型的应用系统来讲,本身的连接数目就有限,这好像没有什么严重的后果,但如果对于一个大型的数据库应用。

如税务、工商等,如果数据库的连接数目很多,对于数据库服务器来讲,多一个连接就要多消耗一份资源,如果大量用户连接进入数据库系统但却不进行任何的操作,这无形之中就白白造成了服务器系统资源的浪费,同时造成服务器负载的提高,对于那些确实在工作的用户来讲,就不能最大限度的利用服务器的资源,严重情况下可能造成系统性能的急剧下降。

针对这种问题,该如何处理呢?对于目前流行的三层结构(Browser/Application/Server)开发来讲,这个问题可以通过设置应用服务器端的连接共享池(shared pool)来避免。但对于传统的两层结构(Client/Server)应用,就必须由我们人为干预来避免这种资源浪费情况。

具体可以通过一个后台任务来监控系统中的所有进程,对于那些空闲超过一定时间的进程采取一定的特殊处理措施,如在客户端提示用户连接时间太长,如果没有后续操作系统将自动杀掉该连接或者直接将该空闲连接杀掉。下面就来具体讨论如何在Oracle 8x环境下实现用户进程的自动监控及其对对超过一定空闲时间连接的处理办法。

一、识别系统中超过一定空闲时间的连接

要实现后台任务自动对超过一定时间空闲连接的处理,首先第一步工作就是要从所有与数据库服务器的Oracle 8x中实现自动断开后再连接中识别出那些连接需要处理,也就是需要获得与服务器连接的每个用户的登陆时间及其最后一次操作后的空闲时间。在Oracle系统中,有一个动态性能视图v$session,该视图保存着系统当前连接的各种动态信息。其中,有两个字段LOGON_TIME和 LAST_CALL_ET可以得到上面的两个答案。

l LOGON_TIME是一个日期型(Date)字段,为用户登陆时间;

l LAST_CALL_ET是一个数字型(Number)字段,其含义是用户最后一条语句执行完毕后的时间,单位为秒。每次用户执行一个新的语句后,该字段复位为0,重新开始记数。我们可以通过该字段来获得一个连接用户最后一次操作数据库后的空闲时间。

下面的SQL查询语句可以得到与当前数据库连接的所有用户的一些基本情况,如用户名、状态、连接机器的名称,操作系统中用户的名称,UNIX系统的进程号,在UNIX操作系统级断开连接的语句,Oracle数据库系统断开连接的语句,登陆时间以及最后一次操作到现在的空闲时间等等。

在上面的查询中,我们可以通过SUBSTR (machine, 1, 19) NOT IN (‘机器名’)这个条件来屏蔽一些机器,这些机器可能需要运行一些耗费很长时间的SQL语句或其他一些特殊情况的机器。屏蔽这些机器的原因就是在后面的后台自动识别及处理任务中对这些机器不作处理。

二、识别及断开空闲用户的存储过程

上面的查询语句可以得到系统中所有的连接用户的一些基本情况,但是又如何来实现系统自动判断空闲超过一定时间的连接并将其自动断开呢?Oracle系统提供了一种称之为后台任务(Job)自动处理的机制。我们可以编写一个后台任务来定时执行,从而判断是否存在这样的用户连接,如果存在,则通过后台任务将其自动断开。

首先创建一个存储过程来完成空闲一定时间用户的识别和断开工作,然后添加一个后台任务来定时(根据空闲时间长短来确定)执行该过程,即可实现自动断开系统中空闲超过一定时间用户的需求。

存储过程p_monitor见下,其中参数an_nimutes为用户输入参数,用来确定识别和断开多长空闲时间Oracle 8x中实现自动断开后再连接的用户,单位为分钟,默认为60分钟,也就是1小时。需要注意一点的是,该存储过程,需要以sys用户身份运行。相应,调用该存储过程的后台任务也需要以SYS身份来添加。

  1. CREATE OR REPLACE PROCEDURE P_MONITOR(   
  2. AN_MINUTES NUMBER DEFAULT 60)   

存储过程用途:识别出系统中超过一定空闲连接时间(
AS_MINUTES)的用户,并将其kill掉参数:
AN_MINUTES 空闲时间数,单位为分钟,默认为60分钟
 

  1. AS   
  2. v_Str VARCHAR2(100);   
  3. CURSOR C_users(v_minutes number) IS  SELECT s.username,   
  4. s.status, s.machine, ‘alter system kill session ‘   
  5. ||””||s.sid||’,’||s.serial# ||”” operates   
  6. FROM v$session s, v$process p   
  7. WHERE TYPE = ‘USER’   
  8. AND p.addr = s.paddr   
  9. AND status != ‘KILLED’   
  10. — AND SUBSTR (machine, 1, 19) NOT IN (‘需要屏蔽不被处理的机器名’)   
  11. AND last_call_et > v_minutes*60   
  12. ORDER BY last_call_et desc;   
  13. BEGIN   
  14. FOR T_users IN C_users(an_minutes) LOOP   
  15. v_Str :T_USERS.OPERATES;   
  16. EXECUTE IMMEDIATE v_str;   
  17. END LOOP;   
  18. END;   
  19. /   

 

三、后台任务的定时执行

最后,我们为系统添加一个定时任务,定时调用上面创建的存储过程,即可完成系统自动识别和处理空闲用户的工作。

下面是一个实际调用的例子,在sys用户下,首先添加一个任务,该任务每隔半小时运行一次,每次均调用P_monitor存储过程,找出系统中空闲时间超过1小时的Oracle 8x中实现自动断开后再连接,然后自动断开。

  1. DECLARE   
  2. jobno number;   
  3. BEGIN   
  4. DBMS_JOB.SUBMIT(   
  5. job => jobno,   
  6. what => ‘p_monitor(60);’,   
  7. next_date => SYSDATE,   
  8. interval => ‘/*1:Hr*/ sysdate + 30/1440); — 每半小时运行一次   
  9. END;   
  10. /  
  1. DECLARE   
  2. jobno number;   
  3. BEGIN   
  4. DBMS_JOB.SUBMIT(   
  5. job => jobno,   
  6. what => 'p_monitor(60);',   
  7. next_date => SYSDATE,   
  8. interval => '/*1:Hr*/ sysdate + 30/1440); -- 每半小时运行一次   
  9. END;   
  10. /  

 

以上的相关内容就是对在Oracle 8x中如何实现自动断开后再连接的介绍,望你能有所收获。

【编辑推荐】

  1. Oracle 10G for linux常用命令浅析
  2. Oracle 权限入门如何管理
  3. Oracle创建Split 与Map 函数的代码示例
  4. Oracle 字符串split的相关实际应用代码介绍
  5. Oracle数据库的安全,PL/SQL的SQL注入

文章来源网络,作者:管理,如若转载,请注明出处:https://shuyeidc.com/wp/307263.html<

(0)
管理的头像管理
上一篇2025-05-27 01:15
下一篇 2025-05-27 01:16

相关推荐

  • jsp空间购买和交换数据空间怎么买,有哪些注意事项?

    购买JSP空间时,是否考虑过数据交换空间的性能?简米科技(2003年始创,23年行业沉淀)与酷番云(工信部一类增值电信全牌照)这类持牌自营机房的服务商,能确保数据交换的高效稳定,是值得优先选择的合作伙伴,为什么JSP空间需要搭配独立的数据交换空间从JSP应用特性看数据交换需求JSP基于Java技术,常用于企业级……

    2026-08-11
    0
  • 建网站用香港空间效果怎么样,香港空间稳定吗?

    建网站用香港空间,对于创建网站资产来说,核心价值在于免备案和全球带宽优势,尤其适合外贸、跨境电商和需要快速启动的项目,但你必须权衡国内访问延迟,并选择有资质的服务商以保证资产安全,香港空间的核心优势与适用边界免备案:节省时间就是节省成本国内服务器需要备案,通常需要10到20天,香港空间无需备案,域名解析后即可上……

    2026-08-11
    0
  • Java连接云数据库的方法是什么,如何操作

    Java连接云数据库的核心在于通过JDBC驱动,结合云服务商提供的连接地址、端口、数据库名及认证信息,配置安全策略(如SSL、IP白名单),即可实现稳定高效的远程数据库访问,基础准备:JDBC驱动与依赖管理连接云数据库前,需要确保开发环境具备对应的JDBC驱动,以最常见的MySQL为例,你需要引入mysql-c……

    2026-08-11
    0
  • 建网站公安联网备案必须使用数据码吗,备案流程是什么

    网站备案包括ICP备案和公安联网备案,两者缺一不可,公安联网备案必须使用服务商提供的数据码,选择持有合法资质的服务商是顺利通过备案的前提,为什么网站必须进行公安联网备案根据公安部《计算机信息网络国际联网安全保护管理办法》,网站开通后30日内必须到公安机关办理备案手续,未完成公安备案的网站,面临责令整改、关闭网站……

    2026-08-10
    0
  • 建一个企业网站大概需要多少钱?,怎么收费?

    建网站要多少钱,没有一个固定的数字,几百到几万都可能,但真正的“创建网站资产”绝不仅仅是初次投入的成本,而是基于长期稳定、合规和安全的持续性投入,其中核心取决于你选择了什么样的“地基”来承载你的业务,建站预算的构成与行业基准当你开始规划一个网站,最先面对的就是预算问题,一个常见的误区是只关注网站“看起来”的建造……

    2026-08-10
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注