java中用jdbc获取oracle数据分两次返回,两次返回的时间间隔为两个小时

问题描述

近日,在生产系统出现了三次同样的问题:问题如下:有个每十分钟起的一个java线程,这个线程启动一个任务,任务的作用是通过spring3.1.1的jdbc包的连接池向oracle(11gR2版本)小版本号为11.2.0.1,发送多个查询,其中某个查询假如此查询会返回10w条记录,但是查询瞬间会先返回8万条记录,在整整两个小时后会将剩下的2w条数据给完整返回.上述oracle出现的情况是oracle工程师经过后台分析和看日志之后给出的详细数据,整整两个小时后剩余的数据才返回.此种情况在生产系统上已经连续出现3次.问题的核心是:1.启动查询的线程会每10分钟启动一次多批量查询任务2.在多次启动的线程中,会偶尔出现一次上述我描述的现象请问大神们,这种现象是处于何因?听oracle的工程师说,oracle有默认两个小时内唤醒线程的机制.但是oracle工程师最终也未能给出问题的原因和解决问题的办法,跪求大神给与好的解决办法和问题的原因??在线急等~~~

解决方案

解决方案二:
最权威的答案就是日志,或者直接使用sqlplus执行,看看能不能重现,数据库在本地?是不是网络问题,最后补充一句,你们的oracle工程师不给力
解决方案三:
oracle工程师是oracle公司派过来的~数据查询1.4秒返回,但是返回的数据分两次回来的,两次的间隔时间是两个整小时
解决方案四:
我是LZ的同事,补充一下我们目前看到的现象:1.应用和数据库之间有防火墙,但设置了36小时连接超时。由于应用每天定时重启,所以不会是防火墙把连接掐断的。且网络硬件及防火墙的日志都没报错,应该不是网络的问题2.hang住的查询经DBA确认,当时已执行完毕,用时1.44秒,通过AWR报告也可以看出,没有执行超过1分钟的SQL3.通过网络监控抓包工具,我们分析了应用和数据库之间的所有网络包(即异常发生的前后两分钟和2小时后数据再次返回的前后两分钟),发现包含SQL的语句发送至数据库后1.5秒即发回response的结果集(实际上是JDBCdriver去取),但没有取完就停住了。2小时后,oracle回了一个心跳包(keepalive),JDBCdriver继续取结果集直至完成。hang住的应用threaddump可见4L

时间: 2024-12-31 14:39:43

java中用jdbc获取oracle数据分两次返回,两次返回的时间间隔为两个小时的相关文章

java基于JDBC连接Oracle 11g Release2实例分析

  本文实例讲述了java基于JDBC连接Oracle 11g Release2的方法.分享给大家供大家参考.具体如下: Oracle 11g Release 2 的 JDBC 连接似乎有所不同 ,如果你收到下面的异常: Listener refused the connection with the following error:ORA-12505, TNS:listener does not currently know of SID given in connect descriptor

oracle 11g-【求助】java使用jdbc连接Oracle 11g ex版本数据库时的问题

问题描述 [求助]java使用jdbc连接Oracle 11g ex版本数据库时的问题 我下载Oracle数据库连接驱动类与SqlConnectText.java在同一目录下,是ojdbc6.jar 数据库版本是Oracle11g Express版本,SID是xe JDK是1.6版本的 然后端口1521正在被监听 这是Java类代码 import java.sql.*; public class SqlConnectTest { private static String dbUrl = "jd

java实现jdbc批量插入数据_java

首先介绍三种JDBC批量插入编程方法,进行比较,具体内容如下 JDBC批量插入主要用于数据导入和日志记录因为日志一般都是先写在文件下的等. 我用Mysql 5.1.5的JDBC driver 分别对三种比较常用的方法做了测试 方法一:使用PreparedStatement加批量的方法 try { Class.forName("com.mysql.jdbc.Driver"); conn = DriverManager.getConnection(o_url, userName, pass

oracle数据分表使用实例

使用分区的优点: 1.增强可用性:如果表的某个分区出现故障,表在其他分区的数据仍然可用: 2.维护方便:如果表的某个分区出现故障,需要修复数据,只修复该分区即可: 3.均衡I/O:可以把不同的分区映射到磁盘以平衡I/O,改善整个系统性能: 4.改善查询性能:对分区对象的查询可以仅搜索自己关心的分区,提高检索速度. Oracle数据库教程提供对表或索引的分区方法有三种: 1.范围分区 2.Hash分区(散列分区) 3.复合分区 下面将以实例的方式分别对这三种分区方法来说明分区表的使用.为了测试方便

java通过JDBC访问Oracle的2个异常

oracle|访问 1.  连接非常慢, 连接成功后执行select操作出现异常:    Exception in thread "main" java.sql.SQLException: ORA-00600: 内部错误代码,参数: [ttcgcshnd-1], [0], [], [], [], [], [], []     解决: 使用oracle安装目录下的jdbc\lib\classes12.jar后正常. 2. 使用PreparedStatement的setString(i,

为什么jdbc查询Oracle数据表只能查询到第一条数据

问题描述 package 测试包;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;public class Oracle存储过程 {public static void main(String[] arg

java使用jdbc链接Oracle示例类分享_java

复制代码 代码如下: public class OracleJdbcTest   {       String driverClass = "oracle.jdbc.driver.OracleDriver";       Connection con;       public void init(FileInputStream fs) throws ClassNotFoundException, SQLException, FileNotFoundException, IOExcep

诚心请教高手 :使用JDBC更新ORACLE数据

问题描述 程序需求:程序每5分钟,要更新一次数据库里表的数据,每一次要执行38条SQL语句,每一条SQL语句要更新大约16000多个字段,在运行当中出现了这样一个问题,大约运行10个多小时以后,程序就卡死了,程序什么异常都没抛出,控制台也没有异常抛出,诚心请教高手,在这方面有没有更好的解决方案.try{Longstart=System.currentTimeMillis();conn.setAutoCommit(false);stmt=conn.createStatement();//listS

使用JDBC更新ORACLE数据 引起的问题

问题描述 程序需求:程序每5分钟,要更新一次数据库里表的数据,每一次要执行38条SQL语句,每一条SQL语句要更新大约16000多个字段,在运行当中出现了这样一个问题,大约运行10个多小时以后,程序就卡死了,程序什么异常都没抛出,控制台也没有异常抛出,诚心请教高手,在这方面有没有更好的解决方案.try{Longstart=System.currentTimeMillis();conn.setAutoCommit(false);stmt=conn.createStatement();//listS