最近刚为客户升级了一套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. mysq优化

    MySQL调优可以从几个方面来做:1. 架构层:做从库,实现读写分离: 2.系统层次:增加内存:给磁盘做raid0或者raid5以增加磁盘的读写速度:可以重新挂载磁盘,并加上noatime参数,这样可 ...

  2. null值的判断

    select * from Students where Address IS null --判断address是nulselect * from Students where Address is ...

  3. EntityFramework sum嵌套

    一个查询中 用到了 sum , 可是返回结果的小数有很多位 , 都不准确了..类似js中的小数运算一样...不太熟悉C#,不知道这问题是因为double的关系 , 还是因为代码写的问题 , 通过 sq ...

  4. json 去空值与缩进

    var jSetting = new Newtonsoft.Json.JsonSerializerSettings(); //忽略值为null的 jSetting.NullValueHandling ...

  5. Android中Menu的基本用法

    一. 使用xml定义Menu 菜单资源文件必须放在res/menu目录中.菜单资源文件必须使用<menu>标签作为根节点.除了<menu>标签外,还有另外两个标签用于设置菜单项 ...

  6. python- 如何return返回多个值

    函数的return 语句只能返回一个值,可以是任何类型. 因此,我们可以“返回一个 tuple类型,来间接达到返回多个值 ”. 例:   x 除以 y 的余数与商的函数 def    F1 ( x, ...

  7. stack 集合栈计算机 (摘)

    有一个专门为了集合运算而设计的“集合栈”计算机.该机器有一个初始为空的栈,并且支持以下操作:PUSH:空集“{}”入栈DUP:把当前栈顶元素复制一份后再入栈UNION:出栈两个集合,然后把两者的并集入 ...

  8. input type file onchange上传文件的过程中,遇到同一个文件二次上传无效的问题。

    不要采用删除当前input[type=file]这个节点,然后再重新创建dom这种方案,这样是不合理的.解释如下:input[type=file]使用的是onchange去做,onchange监听的为 ...

  9. PNG图片小结

    PNG: 便携式网络图形(Portable Network Graphics,PNG)是一种无损压缩的位图图形格式,支持索引.灰度.RGB三种颜色方案以及Alpha通道等特性.PNG的开发目标是改善并 ...

  10. 让Scrapy的Spider更通用

    1,引言 <Scrapy的架构初探>一文所讲的Spider是整个架构中最定制化的一个部件,Spider负责把网页内容提取出来,而不同数据采集目标的内容结构不一样,几乎需要为每一类网页都做定 ...