ASP.NET 中 .NET Data Provider for Oracle 的连接漏洞

因为在开发一个.net项目,最终布署测试时,一切都已OK,一次机房偶然的停电,把这个bug给曝露了出来!

这次偶然的停电,把Oracle数据库服务器给断电了,但web服务器未停, 当Oracle再启动后,刷新页面,一直

是"未联接到Oracle"

起初以为是程序编写问题,因为开发时,重新封闭了数据库操作,检查还是比较轻松的,检查结果是代码没问

题;怀疑这是微软的bug,最终得到了证实:http://support.microsoft.com/default.aspx?scid=kb;zh-cn;330126

FIX:ASP.NET 中 .NET Data Provider for Oracle 的连接漏洞

文章 ID:330126
最后更新日期:2004年4月26日
版本:2.0

症状

在 ASP.NET 内部使用 Microsoft .NET Framework Data Provider for Oracle 时,一段时间过后,到 Oracle 数据库的连接数量的增长超出了预期的程度。另外,检查 Oracle 服务器上的 Oracle 连接时,会检测到不断增长的闲置连接。

解决方案

现在,Microsoft 提供了受支持的修复程序,但该程序只用于解决本文所介绍的问题。只有计算机遇到本文提到的特定问题时才可应用此修复程序。此修复程序可能还会接受其他一些测试。因此,如果这个问题没有对您造成严重的影响,Microsoft 建议您等待包含此修复程序的下一个 Microsoft .NET Framework Service Pack。

要立即解决此问题,请与“Microsoft 产品支持服务”联系,以获取此修复程序。有关“Microsoft 产品支持服务”电话号码和支持费用信息的完整列表,请访问下面的 Microsoft Web 站点: 注意:特殊情况下,如果 Microsoft 支持专业人员确定某个特定的更新能够解决您的问题,可免收通常情况下收取的电话支持服务费用。对于特定更新程序无法解决的其他支持问题和事项,将正常收取支持费用。

该修复程序的英文版应具有以下或更新的文件属性:
日期		版本		大小	文件名
-------------------------------------------------------------
2002-10-18	1.0.1087.0	290,816 System.data.oracleclient.dll
				

替代方法

重新启动 IIS 管理服务和所有 IIS 附属服务和进程(例如:dllhost.exe 和 aspnet_wp.exe),可以释放 Oracle 连接。

状态

Microsoft 已经确认这是在本文开头列出的 Microsoft 产品中存在的问题。

更多信息

ASP.NET 再循环 AppDomain 时,.NET Framework Data Provider for Oracle 的终结器不能正确清除与 Oracle 服务器的本地连接。一段时间过后,当 ASP.NET 中的 AppDomain 不断循环时,本地 Oracle 连接将持续增长。重新启动 IIS 时,所有附属进程都将再循环。关闭这些进程时,将释放本地 TCP/IP 套接字句柄。此修复程序通过正确清除终结器中的本地 Oracle 连接解决了该问题。

在 ASP.NET 应用程序中最经常出现此问题,因为 ASP.NET 能够定期循环进程中的应用程序域。但是,任何创建和破坏 .NET 应用程序域的进程都可能出现此问题。因此,此问题并不完全限于 ASP.NET 应用程序。

Oracle 管理员可以从 SQL*Plus 实用工具或连接到 Oracle 并运行 Oracle 语句的其他实用工具上运行以下 SQL 语句,以查看所有活动和闲置的 Oracle 连接:

SELECT LOGON_TIME, OSUSER, PROCESS,MACHINE,PROGRAM
FROM V$SESSION WHERE PROGRAM IS NOT NULL
				
此时,将显示一个连接到 Oracle 数据库的所有计算机和进程的列表。该列表包含了打开连接的进程的名称。以下是此列表的示例:
LOGON_TIME          OSUSER PROCESS      MACHINE            PROGRAM
------------------- ------ ------- ------------------ ------------
2002-08-30 14:31:01 ASPNET 832:177 MYDOMAIN/MYMACHINE aspnet_wp.exe
2002-08-30 14:31:01 ASPNET 832:176 MYDOMAIN/MYMACHINE aspnet_wp.exe
				
注意
LOGON_TIME。打开连接的时间。
OSUSER。打开连接的用户的操作系统。
PROCESS。首次打开连接的进程 ID 和线程 ID。
MACHINE。进程所在的域名和计算机名。
PROGRAM。创建连接的可执行程序名称。
可以使用 LOGON_TIME 搜索可能长时间运行的闲置连接。

这篇文章中的信息适用于:
Microsoft .NET Framework Service Pack 2
Microsoft .NET Framework 1.1 Service Pack 1
关键字: 
kbbug kbfix kboracle kbsystemdata KB330126

在这篇文章中,只是提到了KILL掉IIS进程来解决此问题;

到微软查询后,发现其已经推出framework pack 1,只能寄希望于这个pack了,安装后发现System.Data.OracleClient.dll比老版本的大了几K,重新编译后,运行,此bug没了了~~~

微软真是害死人!@~

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值