最近刚为客户升级了一套Oracle Database,一切进展顺利,眼看就要顺利验收时,发现有部分客户端软件连接新版本数据库时会Hang,问题非常诡异。

系统环境如下 
升级前的环境
OS:Windows Server 2003 
DB:Windows Database Enterprise Edition 9.2.0.5 
升级后环境
OS:Windows Server 2008 R2 64bit 
DB:Oracle Database Enterprise Edition 11.2.0.4 64bit 
 客户端环境
OS:Windows XP 
DB Client:ODAC 11.2 Release 3 and Oracle Developer Tools for Visual Studio (11.2.0.2.1)

问题描述 
通过DataPump进行异机升级,升级后的主机和升级前的主机位于同一网段内。升级后发现部分.NET客户端程序访问11.2.0.4版本的数据库时,可以正常登录,
但访问的数量大时就死掉了。升级前所有的.NET客户端应用程序访问9.2.0.5的数据库可以正常工作

The below queries works
-----------------------------------------
select * from all_objects where rownum<60;--Response within 296 Millisecond
select * from all_objects where rownum<70;--Response within 312 Millisecond
select * from all_objects where rownum<80;--Response within 312 Millisecond
select * from all_objects where rownum<90;--Response within 312 Millisecond
select * from all_objects where rownum<100;--Response within 312 Millisecond
select * from all_objects where rownum<110;--Response within 312 Millisecond
select * from all_objects where rownum<120;--Response within 312 Millisecond
select * from all_objects where rownum<130;--Response within 328 Millisecond
The following queries hang
-----------------------------------------------
select * from all_objects where rownum<140;--Hang

而在客户端环境下通过SQL*PLUS访问11.2.0.4数据库,返回大数据量没有问题,在客户端环境下通过.NET程序 
访问原来的9.2.0.5数据库也可以返回大数据量。 问题非常奇怪。
如果是新版本数据库的问题,为什么通过SQL*PLUS可以,为什么不是所有的.NET程序都有问题?
如果是.NET程序问题,为什么不是所有的.NET程序都有问题?
如果是网络/防火墙的问题,为什么连接同网段的9i库是可以的?
问题分析 
问题非常诡异,通过10046服务器端跟踪,也没有什么有价值的信息,因为客户端采用ODAC驱动,无法进行相关客户端跟踪。
MOS要了adplus hang dump也没分析出原因,只知道在read()时Hang主了。

问题很有规律,到达一定量的数据,会直接Hang,看起来像服务器无法传递数据到客户端。Oracle能设置网络传递数据的参数不多。
首先想到了SDU,根据官方文档描述,服务器端和客户端都设置,取最小的那个。因为改动程序较为麻烦,就直接设置了服务器端。
无论设置512还是65535都没有用。

在试试防火墙的问题,找一台中间机器通过Oracle Connection Manager (CMAN)进行中转下,还是不行,吐血!(注:CMAN在类似有防火墙的地方还是很有用的,安装时候
注意要选择监听一起安装,不然无法安装成功,最好SQL*PLU也安装,这样方便测试)。

能试的都试了,还是不能解决访问,MOS也没有什么说法,郁闷!死马当活马医,预备以下测试方案:

1、客户端设置SDU
2、客户端设置OPD.NET FetchSize等相关参数
3、测试防火墙的TimeOut时间

客户端连接字符串中设置SDU=512,测试OK!OPD.NET/防火墙的问题就不用测试了。
进一步测试发现,SDU设置为4096还是OK的,设置5120就会Hang,不管它什么原因了,总算解决了。

远程访问数据库查询数据量一大就Hang的更多相关文章

  1. 用struts2标签如何从数据库获取数据并在查询页面显示。最近做一个小项目,需要用到struts2标签从数据库查询数据,并且用迭代器iterator标签在查询页面显示,可是一开始,怎么也获取不到数据,想了许久,最后发现,是自己少定义了一个变量,也就是var变量。

    最近做一个小项目,需要用到struts2标签从数据库查询数据,并且用迭代器iterator标签在查询页面显示,可是一开始,怎么也获取不到数据,想了许久,最后发现,是自己少定义了一个变量,也就是var变 ...

  2. mongodb基础系列——数据库查询数据返回前台JSP(二)

    上篇博客论述了,数据库查询数据返回前台JSP.博客中主要使用Ajax调用来显示JSON串,来获取其中某一个字段,赋给界面中的某一个控件. 那这篇博客中,我们讲解,把后台List传递JSP展示. Lis ...

  3. sql查询未走索引问题分析之查询数据量过大

    前因: 客户咨询,有一个业务sql(代表经常被执行且重要),全表扫描在系统占用资源很高(通过ash报告查询得到信息) 思路: 1.找到sql_text,sql_id 2.查看执行计划 3.查询sql涉 ...

  4. C#连接Oracle数据库查询数据

    C#连接Oracle数据库可以实现许多我们需要的功能,下面介绍的是C#连接Oracle数据库查询数据的方法,如果您对C#连接Oracle数据库方面感兴趣的话,不妨一看. using System; u ...

  5. spring Batch实现数据库大数据量读写

    spring Batch实现数据库大数据量读写 博客分类: spring springBatchquartz定时调度批处理  1. data-source-context.xml <?xml v ...

  6. [转]C#反射,根据反射将数据库查询数据和实体类绑定,并未实体类赋值

    本文来自:http://www.cnblogs.com/mrchenzh/archive/2010/05/31/1747937.html /****************************** ...

  7. mongodb基础系列——数据库查询数据返回前台JSP(一)

    经过一段时间停顿,终于提笔来重新整理mongodb基础系列博客了. 同时也很抱歉,由于各种原因,没有及时整理出,今天做了一个demo,来演示,mongodb数据库查询的数据在JSP显示问题. 做了一个 ...

  8. sql 数据库 庞大数据量 需要分表

    17:04:05问下 在什么情况下 审核分区啊 ~..大熊..o○ 17:06:53这个要看应用~..大熊..o○ 17:07:37比如数据量很大,查询多是按照时间段查询,就可以用时间段来做分区~.. ...

  9. python自动化测试之mysql5.0版本数据库查询数据时出现乱码问题分析

    1.确保数据库编码是utf8编码.若不是,请将my.ini的client,mysql,mysqld三个字段下面添加default-character-set = utf8,这样可以永久改变在新建数据库 ...

随机推荐

  1. WPS页面设置

    以前使用WPS的时候遇到一些问题: 比如我输入一个英文的时候它总是自动的给我首字母大写,但是某些情况下我不想这样: 从VS中复制代码的时候不希望他吧那些颜色复制下来: 还有我输入1回车后它自动给我输入 ...

  2. CSS学习笔记——CSS中定位的浮动float

    昨天在解决了盒模型的问题之后又出现了新的知识模糊点:浮动和绝对定位?今天先解决浮动相关的问题,首先列举出想要解决的问题: 1.浮动到底是怎么样的? 2.浮动对元素的影响有什么? 3.浮动主要用来干什么 ...

  3. EF查询数据库框架的搭建

    一个简单的EF查询框架除了运行项目外,大概需要5个类库项目,当然这个不是一定要这样做,这可以根据自己的需要设置有多少个项目.这里介绍的方法步骤只适合EF零基础的人看看就是了. 在开始之前,先建立一个运 ...

  4. SQL-LINQ-Lambda 语法对照

    SQL LINQ Lambda  SELECT *FROM Employees from e in Employees  select e Employees .Select (e => e)  ...

  5. NSDictionary初始化,使用@{}方法,插入nil时会报空指针异常

    由于今天在NSDictionary初始化的时候出现Crash异常,故记录一下,避免下次再犯. 在Objective-C中,NSDictionary初始化的方法有很多种 方法1: [NSDictiona ...

  6. C#之回到了最初的起点----解决方案、项目、程序集、命名空间

    C#之回到了最初的起点----解决方案.项目.程序集.命名空间 ——Percy 初学者很容易把这些概念搞混淆.先说说项目(Project),通俗的说,一个项目可以就是你开发的一个软件.在.Net下,一 ...

  7. SQL子句执行顺序和Join的一点总结

    SQL子句执行顺序和Join的一点总结 FROM ON JOIN WHERE GROUP BY WITH CUBE or WITH ROLLUP HAVING SELECT DISTINCT ORDE ...

  8. git-svn 的使用

    从 SVN 克隆代码 git svn clone https://192.168.1.3/svn/project-name   git-svn 初始化 git svn init (svn remote ...

  9. linux 内核开发基础

    开发特点 不需要第三方库支持 使用GNU C 没有内存保护机制 杜绝浮点数 栈区固定 必须关注并发及同步 注意可移植性

  10. 模拟Spring依赖注入

    通过读取xml文件,利用反射动态加载类和方法,其实就是spring的注入机制模拟,可以清晰的看出整个运行流程 1.配置文件 applicationContext.xml <beans> & ...