Cause: java.sql.SQLTimeoutException: ORA-01013: user requested cancel of current

【问题记录】Druid ORA-01013 问题排查记录 项目场景: 公司某现场经常在停服务之前报SQLException:ORA-01013。正常业务也偶发SQLException:ORA-01013。 问题描述: 软件版本如下: 数据源:alibaba druid-1.1.9版本 数据库:Oracle11g 11.2.0.3.0 JDBC驱动:ojdbc7-11 报错异常堆栈如下: 2020-11-04 09:41:22.228 ERROR [Thread-170] druid.sql.Statement[Slf4jLogFilter.java:. 阅读详情
AI摘要

本文深入分析了ORA-01013和SQLTimeoutException报错原因,探讨了数据库锁、客户端取消连接及超时等问题,提出了通过配置Druid连接池保活功能来解决连接失效的方法。

问题

具体的场景是,cat监控到查询报错。

报错信息

Cause: java.sql.SQLTimeoutException: ORA-01013: user requested cancel of current operation

字面意思是,客户端取消数据库连接,于是报错。

这个报错分两个部分:
1.数据库服务器
ORA-01013: user requested cancel of current operation //这个是数据库服务器返回的错误

2.客户端
Cause: java.sql.SQLTimeoutException //这个是java里的异常调用栈

原因

原因1-数据库锁

网上搜了一下,说是锁的原因,所以开始以为是锁的原因,但是后面分析发现不是锁的原因,因为查询是普通的查询,普通的查询没有锁的问题,也就是说,任何锁,都不影响读。所以,报错应该不是因为这个原因。


原因2-客户端取消连接

根据报错信息字面的信息,就是因为客户端取消数据库连接。实际上,应该也是这个原因。但是,客户端为什么会取消数据库连接?根据报错信息的第一个部分,是超时。可是,为什么会超时?这个报错是间隔性的,一般情况都是正常的,在生产执行sql耗时不到1s,而且有的报错sql数据量比较小但是也会报错,所以也应该不是sql本身的问题。

到目前为止,没有找到本质的原因,只是知道字面的原因。所以,也没有办法解决。


其他信息

1.数据库连接池用了阿里的druid
这次上线更新了数据库连接池的配置,因为最近几天都在报错:连接重置,reset connection,recover connection,之类的报错信息。
原因是因为连接失效,解决方法是,开启连接池的空闲连接检查配置项。然后,这次上线就更新了数据库连接池的配置,连接重置的错误没了,但是上线之后,却又报错客户端取消连接。所以,也有可能是和这次更新了数据库连接池配置有关。但是其他的项目,配置也一样,却又没有报错。

2.执行了sql,也没有问题,耗时正常
虽然不是锁的原因,但是也找dba看了锁,也是正常的,即都是短暂的锁(多次执行查询锁的sql,锁记录一直在变),没有长期持有锁不释放的情况。

3.cat监控到每个报错信息,也有对应的慢sql(也有报错信息,即异常调用栈)
这个也和报错信息的第一部分也对的上,就是执行sql的时间超时了。但是不知道为什么超时。

4.数据库锁
其他部门也有同样的错误,而且是读写分离,所以更应该不是数据库锁的原因。


总结

1.不是同一笔订单报错,其他的订单号也有报错

2.应该不是锁的原因
1)没有长期没有释放的锁,我和dba一起确认,锁的占用都是短暂的,所以应该不是锁的原因
2)数据库的锁,不会影响查询,现在的查询只是普通的查询,所以应该不是锁的原因
3)问了其他部门,他们读写分离,查询的时候也有这个问题,所以应该不是锁的原因

3.应该是偶尔查询数据库时间太久导致
异常的时候,cat里的error和慢sql,都有异常,而且是同一笔订单。

具体分析是,由于数据库查询太久,应用超时,断开数据库连接,然后报错:ORA-01013: user requested cancel of current operation,即客户端取消了数据库连接。

本地模拟两个客户端的查询for update,后面的for update就会一直阻塞——停止后面的查询,也会报错提示:ORA-01013: user requested cancel of current operation。所以,客户端取消了连接,就会报错提示这个信息,在应用里比较可能的原因就是因为查询数据库太久导致应用超时,然后应用就取消了连接,从而报错这个提示信息。

解决方法

经过分析,不太可能是慢sql的问题,所以还是连接的问题。目前的连接失效检测,是大于最小数量的连接,才检测。所以还是存在连接失效的问题,如果连接失效,客户端和服务器都不知道,然后客户端超时,然后取消数据库连接,就可能会导致这个问题。

连接也可能被防火墙断开,防火墙一个小时会断开一次长连接。

所以,可以开启小于最小数量的连接失效检测,具体就是保活配置keepalive。


版本

保活功能是后面才加的,所以要用比较新的版本,目前用的1.1.9,虽然这个版本也支持,但是最好还是用新的版本,因为新版本修复了保活配置的bug。

推荐至少用1.1.16
1.1.21 //推荐
最新1.1.22


参考

https://github.com/alibaba/druid/wiki/KeepAlive_cn

知识点

数据库的锁

这里只讲数据库的行锁,一般两种情况会被锁住:
1.更新数据的时候,其他事务不能更新数据
2.查询 for update,其他事务不能更新数据

也就是说,以上两种情况,都不影响读数据,读数据是没有任何锁的,除非加了for update。

实际上,任何锁,都不影响读数据,至少不影响普通的查询,即查询没有加for uodate。


oracle-查询锁记录

Oracle数据库操作中,我们有时会用到锁表查询以及解锁和kill进程等操作,
那么这些操作是怎么实现的呢?本文我们主要就介绍一下这部分内容。

(1)锁表查询的代码有以下的形式:

select count(*) from v$locked_object;  

select * from v$locked_object;

(2)查看哪个表被锁

select b.owner,b.object_name,a.session_id,a.locked_mode 
from v$locked_object a,dba_objects b 
where b.object_id = a.object_id;

(3)查看是哪个session引起的

select a.OS_USER_NAME, c.owner, c.object_name, b.sid, b.serial#, logon_time
from v$locked_object a, v$session b, dba_objects c
where a.session_id = b.sid
 and a.object_id = c.object_id
 order by b.logon_time;

(4)杀掉对应进程

执行命令:alter system kill session '1025,41';  需要用户有权限操作
其中1025为sid,41为serial#.

https://blog.youkuaiyun.com/wangchuanmei/article/details/80017108


共享锁和排他锁影响读吗?

共享锁和排它锁的区别不是说影响读,两个锁都不影响读,其实任何锁都不影响读。而是有其他的细节区别,具体区别不是重点,不讲。

因为测试的时候,不管是共享锁(查询 for update),还是排他锁(更新数据,即增删改),一个事务更新,另外一个事务仍然可以读数据。


测试

1.两个for update,后面的for update就会阻塞,因为获取锁但是获取不到
2.一个for uddate,一个普通查询,可以正常查询
3.一个更新,一个查询,可以正常查询

以上,都是在第一个操作不提交的情况下测试的。

补充

除了报错:客户端取消连接,现在仍然会报错-连接失效:

2020-07-02 16:27:09.619|ERROR|pEMJhNXhtOyE-536-93|com.alibaba.druid.util.JdbcUtils.close:86||close statement error
java.sql.SQLRecoverableException: Closed Connection
	at oracle.jdbc.driver.PhysicalConnection.needLine(PhysicalConnection.java:5416)
	at oracle.jdbc.driver.OracleStatement.closeOrCache(OracleStatement.java:1585)
	at oracle.jdbc.driver.OracleStatement.close(OracleStatement.java:1570)
	at oracle.jdbc.driver.OracleStatementWrapper.close(OracleStatementWrapper.java:94)
	at com.alibaba.druid.util.JdbcUtils.close(JdbcUtils.java:84)
	at com.alibaba.druid.pool.vendor.OracleValidConnectionChecker.isValidConnection(OracleValidConnectionChecker.java:88)
	at com.alibaba.druid.pool.DruidAbstractDataSource.testConnectionInternal(DruidAbstractDataSource.java:1361)
	at com.alibaba.druid.pool.DruidDataSource.getConnectionDirect(DruidDataSource.java:1297)
	at com.alibaba.druid.filter.FilterChainImpl.dataSource_connect(FilterChainImpl.java:4619)
	at com.alibaba.druid.filter.FilterAdapter.dataSource_getConnection(FilterAdapter.java:2745)
	at com.alibaba.druid.filter.FilterChainImpl.dataSource_connect(FilterChainImpl.java:4615)
	at com.alibaba.druid.filter.stat.StatFilter.dataSource_getConnection(StatFilter.java:680)
	at com.alibaba.druid.filter.FilterChainImpl.dataSource_connect(FilterChainImpl.java:4615)
	at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:1231)

所以,应该还是失效连接的问题,具体原因就是小于最小数量的连接,没有检查失效连接,所以解决方法还是必须得配置保活keepAlive。

资源描述框架RDF及Turtle 文章目录1. RDF1.1 简介1.2 格式1.3 RDF的要求2. Turtle2.1 语法2.1.1 简单三元组2.1.2 Turtle中的命名空间2.1.3 Base URI2.1.4 谓语列表2.1.5 宾语列表2.1.6 空白节点(bNodes)2.1.7 数据类型2.1.8 Class membership2.1.9 空URI2.1.10 集合 1. RDF 1.1 简介 RDF(Resource Description Framework)语义网的标准数据模型,是一个用于描述 Web 上的资 阅读详情

相关推荐

汽车底盘技术解析:从悬架调校到智能化,如何评价国产车底盘实力

汽车底盘作为决定车辆驾驶质感、安全性和耐久性的核心系统,其技术内涵远不止于悬架结构。从行驶系、转向系到制动系的协同工作,底盘调校是一门融合机械原理与工程实践的艺术。在电动化与智能化浪潮下,底盘技术正经历从被动适应到主动响应的变革,CDC可变阻尼减震器和空气悬架等技术的应用,让底盘具备了通过OTA升级实现性能优化的可能。国产汽车品牌如奇瑞、吉利等,通过平台化架构研发与调校经验积累,正推动底盘技术从“能用”向“好用”乃至“塑造独特驾驶风格”迈进。理解底盘技术,需超越简单的结构对比,关注其在实际路况中的滤震性、支

weixin_34413103的博客 384

ORA-01013问题分析处理

ORA-01013: user requested cancel of current operation 发现问题 下午12:20服务器报警CPU过高, 其中两台12:31自动恢复, 一台持续告警至12:51 现场检查发现日志出现大量 1、经分析日志发现12:21开始3台服务器开始出现数据库交互报错日志开始出现: #[auth, 10.16.6.36] ERROR 2021-05-16 12:31:19.181 [XNIO-1 task-38, a3d3540c9f1c5102, a3d3540c9f1c

u014689988的博客 1万+

如何产生ATPG IR-drop分析波形文件(DFT)

摘要:本文介绍了生成VCD波形的流程与要求,主要用于后端进行IR-drop分析。生成过程分为ATPG shift和speed ATPG capture两部分,分别对应不同的输入要求、模式设置和仿真参数。

murphyrong的博客 870

oracle报错ORA-01013: user requested cancel of current operation. 解除锁定的表 、查看锁表语句

查询1 SELECT b.owner, b.object_name, l.session_id, l.locked_mode FROM v$locked_object l, dba_objects b WHERE b.object_id = l.object_id; 查询2 SELECT t2.username, t2.sid, t2.serial #, t2.logo...

enthan809882的博客 2万+

保姆级教程:用Unity为麒麟系统打包Linux应用(含路径权限全攻略)

本文提供了一份详细的Unity跨平台开发指南,重点介绍如何在麒麟系统上打包和部署Linux应用。从开发环境配置、路径权限处理到性能优化和常见问题解决,全面解析了Unity项目在国产操作系统上的适配流程,帮助开发者高效完成跨平台应用开发。

weixin_28692867的博客 503

【全开源】教育培训微信小程序源码(FastAdmin+ThinkPHP+Unipp)

教育培训微信小程序源码以其便捷性、互动性、安全性等优势,成为了教育培训行业的新宠。随着移动互联网技术的不断发展,教育培训微信小程序源码将继续引领未来学习趋势,为学员提供更加优质、高效的学习体验。同时,教育培训机构也应积极拥抱小程序技术,利用源码打造具有自身特色的学习平台,提升品牌影响力和市场竞争力。

2401_84414018的博客 2095

Oracle数据库表被锁了,解锁办法(ORA-01013: user requested cancel of current operation )

因为业务问题,需要直接在数据库更新下数据,用的DBeaver,又频繁手动提交,自动提交,或许还因为网络问题,当时网络那边在调试,修改的数据一直处于正在更新状态,导致库表被锁,经过网上资料查找,分享解决办法

2301_78430029的博客 3619

6D位姿估计系列(一)

本研究提出FoundationPose,一个统一的基础模型框架,支持基于CAD模型和无模型的6D物体姿态估计与跟踪。通过神经隐式表示实现高效新视图合成,结合大规模合成数据训练和对比学习策略,模型展现出强大的泛化能力。实验表明,该方法在LINEMOD、YCB-Video等多个基准数据集上显著优于现有专门化方法,处理速度达32Hz,且无需目标域微调。该工作为多场景物体姿态估计提供了通用解决方案。

qq625924821的博客 557

java.sql.SQLTimeoutException: ORA-01013: 用户请求取消当前的操作

ORA-01013: 用户请求取消当前的操作 原因:oracle 锁表了 ,导致了sql 语句一直在运行 无法提交事务。 解决方案:将数据中的事务进行提交,或者回滚即可 比如:在数据执行了update或for update操作,未提交 这时候只要提交或者回滚 下面的语句用来查询哪些对象被锁: select object_name,machine,s.sid,s.serial# from vl...

weixin_44492536的博客 1万+

【升级U8+】不能将值 NULL 插入列 ‘VT_ID‘,表 ‘VoucherItems‘;列不允许有 Null 值。

不能将值 NULL 插入列 ‘VT_ID’,表 ‘UFDATA_006_2012.dbo.VoucherItems’;列不允许有 Null 值。INSERT 失败。

努力不懈的为广大客户提供优质的产品与真诚、贴心、专业的服务! 513

锐捷 MPLS VPN 配置

ISP内部配置 , PE设备和CE设备之间的接口不开启 ( 只在物理接口上配置 , loopback 口不配置 )最后一步关闭 ipv4 单播 , 如果你发现路由奇奇怪怪的 , 可以尝试一下。both --> 同时配置 import export 值。绑定后接口会重置 , 且接口的路由会转到VRF路由表中。这里基本上绑定了 vrf 实例的接口都需要宣告进去。vpnv 4 通道是用来传递 mpls 路由的。先建立邻居管理,建立VPNV4通道。这里要做双向引入 , 才会有路由。export 导出值。

dekangzou的博客 1710

Oracle频繁出现用户取消操作

java.sql.SQLTimeoutException: ORA-01013: user requested cancel of current operation at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:450) at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:399) at oracle.jdbc.dr

qq_43172064的博客 2584

大厂硬件笔试机试题ASIC设计方向-卷3

本文提供了30道硬件工程师机试题目,涵盖数字逻辑、模拟电路、CMOS和信号处理等核心领域。选择题和判断题均配有详细解析,重点考察Verilog编程、CMOS特性、触发器设计、采样定理等知识点。题目难度适中但覆盖面广,如Verilog中阻塞/非阻塞赋值的区别、CMOS静态功耗来源、Nyquist采样定理、通用逻辑门判断等。备考建议强调掌握逻辑门设计、Verilog时序电路编写和CMOS特性理解。这些题目反映了华为等大厂硬件机试的典型考查内容,通过系统复习可有效提升机试成绩,为后续面试奠定基础。

启芯硬件的博客 541

Java面试题全集(上)

1、面向对象的特征有哪些方面? 答:面向对象的特征主要有以下几个方面: - 抽象:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面。抽象只关注对象有哪些属性和行为,并不关注这些行为的细节是什么。 - 继承:继承是从已有类得到继承信息创建新类的过程。提供继承信息的类被称为父类(超类、基类);得到继承信息的类被称为子类(派生类)。继承让变化中的软件系统有了一定的延...

技术宅的博客 468

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

ORA-01013: User Requested Cancel Of Current Operation

How To Handle Error Java.sql.SQLException: ORA-01013: User Requested Cancel Of Current Operation [ID 788246.1] ...

cr147369的博客 1922

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

05 ORA系列:ORA-01013 报错用户请求取消当前的操作

如果希望对常见的Oracle异常ORA报错解决方案有系统的了解,请看《ORACLE系列异常总结ORA》。   java.sql.SQLTimeoutException: ORA-01013: 用户请求取消当前的操作   ORA-01013原因:oracle 锁表了 ,导致了sql 语句一直在运行 无法提交事务。 解决方案:将数据中的事务进行提交,或者回滚即可 比如:在数据执行了upda...

Java仗剑走天涯 12万+

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Cause: java.sql.SQLTimeoutException: ORA-01013: 用户请求取消当前的操作

nested exception is java.sql.SQLTimeoutException: ORA-01013: 用户请求取消当前的操作。### Cause: java.sql.SQLTimeoutException: ORA-01013: 用户请求取消当前的操作。ORA-01013: 用户请求取消当前的操作。

u014200244的专栏 4167

数据库锁表问题的处理方法(事务未提交)ORA-01013: user requested cancel of current operation

使用数据库工具时并未对数据库事务进行提交,导致后面的sql语句没法进行增加修改。 ORA-01013: user requested cancel of current operation

weixin_59299618的博客 1352

Oracle常见ORA错误及解决办法

通过 create table as wf_process_running select * from wf_process_running_bak 的方式重建表。原文链接:https://blog.csdn.net/qq_27745471/article/details/122324161。在数据库服务器上检查数据库服务是否正常,检查数据库服务器上监听是否启动及正常,查是否有防火墙阻挡了1521端口通讯。8.3.3. 将/etc/hosts中主机名改成跟/etc/sysconfig/network一致。

qq_38256688的博客 3278

ORA-01013: user requested cancel of current operation

2013年8月19日 星期一 16时16分04秒 在做一个界面导出功能时,报以下错误: java.sql.SQLException: ORA-01013: user requested cancel of current operation at oracle.jdbc.driver.SQLSta...

tingyu_521的专栏 1万+

ora-01013 用户请求取消当前的操作

今天在测试的过程中发现了一个通过ODBC连接的程序出现如下错误:[Oracle][ODBC][Ora]ORA-01013: user requested cancel of current operation ...

csdn6538954的博客 2838

ORA-01013 user requested cancel of current operation

今天我碰到的case就是timeout引起的。   The Oracle docs note this on the ora-01013 error*: ORA-01013 user requested cancel of current operation  Cause: The user interrupted an Oracle operation by entering CTR...

Lin's Tech Log 7127

【问题】ORACLE报错 ORA-01013: 用户请求取消当前的操作

ORACLE报错 ORA-01013: 用户请求取消当前的操作

weixin_45325628的博客 1万+

已解决java.sql.SQLTimeoutException异常的正确解决方法,亲测有效!!!

已解决java.sql.SQLTimeoutException异常的正确解决方法,亲测有效!!!

小明的Java问道之路 2万+
下一篇: 支付-微信h5
Java个体户
博客等级 码龄6年 6粉丝 33原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值