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

    在实际的数据库应用中,我们经常遇到这样一个问题,连接到Oracle数据库的用户在作了一次操作后,再也没有后续操作,但却长时间没有和数据库断开连接。对于一个小型的应用系统来讲,本身的连接数目就有限,这好像没有什么严重的后果,但如果对于一个大型的数据库应用。如税务、工商等,如果数据库的连接数目很多,对于数据库服务器来讲,多一个连接就要多消耗一份资源,如果大量用户连接进入数据库系统但却不进行任何的操作,这无形之中就白白造成了服务器系统资源的浪费,同时造成服务器负载的提高,对于那些确实在工作的用户来讲,就不能最大限度的利用服务器的资源,严重情况下可能造成系统性能的急剧下降。

针对这种问题,该如何处理呢?对于目前流行的三层结构(Browser/Application/Server)开发来讲,这个问题可以通过设置应用服务器端的连接共享池(shared pool)来避免。但对于传统的两层结构(Client/Server)应用,就必须由我们人为干预来避免这种资源浪费情况。具体可以通过一个后台任务来监控系统中的所有进程,对于那些空闲超过一定时间的进程采取一定的特殊处理措施,如在客户端提示用户连接时间太长,如果没有后续操作系统将自动杀掉该连接或者直接将该空闲连接杀掉。下面就来具体讨论如何在Oracle 8x环境下实现用户进程的自动监控及其对对超过一定空闲时间连接的处理办法。

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

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

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

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

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

    SELECT s.username 用户名称, s.status 状态,s.machine 机器名称,
     osuser 操作系统用户名称,spid UNIX进程号,
'kill -9 '||spid UNIX级断开连接,
'alter system kill session ' ||''''||s.sid||','||s.serial# || ''';' Oracle级断开连接,
TO_CHAR (logon_time, 'dd/mm/yyyy hh24:mi:ss') 登陆时间,
last_call_et 空闲时间秒,
TO_CHAR (TRUNC (last_call_et / 3600, 0))||' '||' HRS '||
TO_CHAR (
TRUNC ((last_call_et - TRUNC (last_call_et / 3600, 0) * 3600) / 60, 0)
) ||' MINS' 空闲时间小时分钟,
module 模块
FROM v$session s, v$process p
WHERE TYPE = 'USER'
AND p.addr = s.paddr
AND status != 'KILLED'
-- AND SUBSTR (machine, 1, 19) NOT IN ('机器名')
AND last_call_et > 60 * 60 * 1 -- 空闲时间超过1小时的连接
ORDER BY last_call_et desc;

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

时间: 2024-10-14 19:22:26

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

app开发-WeX5中打完Android包后再手机上运行,静态页面加载出来了,但是不能发请求

问题描述 WeX5中打完Android包后再手机上运行,静态页面加载出来了,但是不能发请求 打包时设置的首页显示出来了,但是点击首页上的按钮,没有反应,没有执行js中的点击方法 解决方案 没用过 刚刚百度了下 才知道有WeX5这东西

【Oracle】Oracle 11g 中的自动数据库维护任务管理

对于11g版本的oracle 有三个自动维护定时任务. 1 自动优化器统计收集:为所有方案对象收集陈旧的或缺少的统计数据,所收集的统计信息将被用来提高sql的执行的性能,任务名是"auto optimizer stats collection" 2 自动分段顾问:标识数据库中的段是否有可以回收的空间,并以此信息统计为基础做出怎样整理段的碎片以节约空间.你也可以手动的执行此job来获取最新的建议信息,或者获取自动段advisor 不检测的但又可以回收的段的信息,任务名是"aut

Access中如何自动建立表的连接表达式

access 连接可以生成有意义的视图或SQL虚拟集, 连接有:内连接(自然连接): 只有两个表相匹配的行才能在结果集中出现外连接: 包括左外连接(左边的表不加限制),右外连接(右边的表不加限制),全外连接(左右两表都不加限制),自连接(连接发生在一张基表内)Access提供了简便的连接表达式生成工具----查询.操作方法:进入"查询",选择"使用向导创建查询",选择结果集中需要出现的字段(可来源于多个基表),按"完成".在菜单"视图&

Oracle 8x中监控sysdba角色用户登陆情况

在Oracle 8i版本之前,使用internal用户来执行数据库的启动和关闭以及create database等操作:从8i版本以后,Oracle已经逐渐淘汰了internal用户,采用授与sysdba或者sysoper角色的用户才可以执行数据库的启动和关闭等操作,为保持用户习惯在8i中依旧保留了internal用户和svrmgrl,但已完全可以不使用svrmgrl工具和internal用户了.最新发布的oracle 9i已经完全淘汰了svrmgrl工具和internal用户.由于具有角色sy

上网好好的,突然本地链接自动断开,再连不起。一直有这个问题怎么回事

问题描述 我新买的笔记本一直有个问题,上网上的好好的,突然就提示网线没插好,没几秒就又自动连起来了.糟糕的情况是自动断了网线之后再也连不起,一直显示网线没插好,但是重启电脑之后就一切正常了.我要说明的是我的网卡驱动是最新的,网线插得严实,没松动网线和猫不会有问题的,因为用在其他机子上很正常的. 解决方案 解决方案二:该回复于2009-09-28 09:40:19被版主删除解决方案三:可能是网口的问题像这种问题一般都是网口或自己网络连接的问题重启一下笔记本应该没什么问题了这种问题我也遇见过的解决方

winform连接内置数据库时一调试数据库就自动断开

问题描述 winform连接内置数据库时一调试数据库就自动断开 解决方案 你整个连接字符串就没有写对.后面加上Persist Security Info=False; 如果还不行,检查sql ce驱动有没有装对. 解决方案二: 第三张图是调试前确认数据库为打开的状态,第一张是在点击调试的一瞬间数据库关闭了 然后运行失败. 解决方案三: 在Oracle数据库实现自动断开后再连接在Oracle数据库实现自动断开后再连接 解决方案四: 你这是连接数据库的时候异常了,你捕获一下异常,查看一下具体的错误信

如何在Word 2013中添加自动更正内容

Word2013具有的"自动更正"功能默认包含一些最常用的拼写错误更正和常见符号自动更正,用户可以根据实际需要添加自动更正内容,操作步骤如下所述: 第1步,打开Word2013文档窗口,依次单击"文件"→"选项"命令,如图2013080701所示. 图2013080701 单击"选项"命令 第2步,在打开的"Word选项"对话框中切换到"校对"选项卡,在"自动更正选项"

asp.net查出oracle数据库中的中文乱码问题

把这两天两次安装IBM2650服务器中出现的问题做一个总结: 1.第一次安装,用IBM的引导盘引导,按步就班的下来,选择语言,做Raid5,选择windows系统等等 .安装好windows2003企业版之后,再去安装oracle时,安装到一半时,提示不能创建快捷方式.取消, 再安装还是不能创建快捷方式,就那样安装上了.安装之后oracle运行倒也正常,导入数据,发现中文 变成了乱码.再安装editplus和winrar发现显示窗口的中文也是乱码,右键菜单上的部分中文是乱码. 在网上搜了一下,原

怎样在Word2013中添加自动更正内容

  第1步,打开Word2013文档窗口,依次单击"文件"→"选项"命令,如图1所示. 图1 单击"选项"命令 第2步,在打开的"Word选项"对话框中切换到"校对"选项卡,在"自动更正选项"区域单击"自动更正选项"按钮,如图2所示. 图2 单击"自动更正选项"按钮 第3步,打开"自动更正"对话框,并切换到"自动更正&