锁表处理 SQL 错误: ORA-00054: 资源正忙, 但指定以 NOWAIT 方式获取资源, 或者超时失效..._weixin_34199335的博客-程序员宅基地

技术标签: java  数据库  

问题描述
有时候ORACLE数据的某些表由于频繁操作,而且比较大,会导致锁表(死锁)。

问题分析
(1)锁的分析
ORACLE里锁有以下几种模式:
0:none
1:null 空
2:Row-S 行共享(RS):共享表锁,sub share
3:Row-X 行独占(RX):用于行的修改,sub exclusive
4:Share 共享锁(S):阻止其他DML操作,share
5:S/Row-X 共享行独占(SRX):阻止其他事务操作,share/sub exclusive
6:exclusive 独占(X):独立访问使用,exclusive 数字越大锁级别越高, 影响的操作越多。
1级锁有: S e l e c t , 有时会在v$locked_object出现。
2级锁有:Select for update,Lock For Update,Lock Row Share select for update当对话使用for update子串打开一个游标时,所有返回集中的数据行都将处于行级(Row-X)独占式锁定,其他对象只能查询这些数据行,不能进行update、delete或select for update操作。
3级锁有:Insert,Update,Delete,Lock Row Exclusive 没有commit之前插入同样的一条记录会没有反应, 因为后一个3级的锁会一直等待上一个3级的锁,我们必须释放掉上一个才能继续工作。
4级锁有:Create Index, Lock Share locked_mode为2、3、4级锁,不影响DML(insert,delete,update,select)操作, 但DDL(alter,drop等)操作会提示ora-00054错误。00054, 00000, "resource busy and acquire with NOWAIT specified" // *Cause: Resource interested is busy. //*Action: Retry if necessary.
5级锁有:Lock Share Row Exclusive 具体来讲有主外键约束时update / delete ... ; 可能会产生4,5的锁。
6级锁有:Alter table, Drop table, Drop Index,Truncate table, Lock Exclusive

(2)查询锁方法
以DBA角色, 查看当前数据库里锁的情况可以用如下SQL语句:

SELECT T2.USERNAME,T2.SID,T2.SERIAL#,T2.LOGON_TIME FROM
V$LOCKED_OBJECT T1,V$SESSION T2 WHERE T1.SESSION_ID=T2.SID
ORDER BY T2.LOGON_TIME

如果有长期出现的一列,可能是没有释放的锁。

--- 查锁表

SELECT SESS.SID, SESS.SERIAL#, LO.ORACLE_USERNAME, LO.OS_USER_NAME,
AO.OBJECT_NAME,MACHINE, LO.LOCKED_MODE,'ALTER SYSTEM KILL SESSION '''||SESS.sid||','||SESS.serial#||''';' AS SQLSTR
FROM V$LOCKED_OBJECT LO, DBA_OBJECTS AO, V$SESSION SESS
WHERE AO.OBJECT_ID = LO.OBJECT_ID 
AND LO.SESSION_ID = SESS.SID;

将上面SQL中的 SQLSTR 语句复制出来执行一下

解决方法:

(1)释放锁的方法:
我们可以用下面SQL语句杀掉长期没有释放非正常的锁:

ALTER SYSTEM KILL SESSION 'SID,SERIAL#'; //SID,SERIAL#是上面查询出来的

(2)系统级杀进程方法释放锁:

SELECT SPID FROM V$PROCESS WHERE ADDR = (SELECT PADDR FROM V$SESSION WHERE SID=&SID);$ KILL -9 SPID //SPID是上面查询出来的

(3)注意点:如果出现了锁的问题, 某个DML操作可能等待很久没有反应。 当你采用的是直接连接数据库的方式,也不要用OS系统命令 $kill process_num 或者 $kill -9 process_num来终止用户连接,因为一个用户进程可能产生一个以上的锁,杀OS进程并不能彻底清除锁的问题。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_34199335/article/details/86039273

智能推荐

【Powershell】 命令行查看 docker远程可用 image 所有版本 tag_docker 查看 image 各个 tag-程序员宅基地

powershell# Version Powershell 7param( $Image)$API="https://registry.hub.docker.com/v1/repositories"function Usage { Write-Host @"Usage: docker-tags NAME[:TAG]docker-tags list all tags for docker image on a remote registry.Example: doc_docker 查看 image 各个 tag

CLICKHOUSE 迈出第一步 安装与基本配置_Austindatabases的博客-程序员宅基地

俗话说,要想知道桃子的味道,就尝尝他,Clickhouse 作为新型的大数据处理的产品,那必然是要尝尝他, 所以第一步就需要安装他.在安装之前,如果了解CLICKHOUSE为什么那么快的..._clickhouse max_connections

阿里VS华为-开源镜像站体验及评测-程序员宅基地

最近对阿里和华为的开源镜像站做了深度体验,并将评测结果分享给大家:一、评测产品:华为开源镜像站(mirrors.huaweicloud.com/)以下简称 华为阿里开源镜像站(https://opsx.alibaba.com/)以下简称 阿里二、硬件信息三、网络状态:四、测试过程:首先测试Maven拉取settings.xml文件信息阿里:华为:pom.xm..._opsx.alibaba

安卓TextView文字悬浮阴影效果实现_android悬浮textview-程序员宅基地

在Textview上实现悬浮阴影效果只需要设置Textview的一下属性即可根据值的不同效果也会出现差异不要刚开始测试的时候注意先改一下背景颜色,不然可能看不出效果属性如下 1. android:shadowColor:阴影的颜色 2. android:shadowDx:水平方向上的偏移量 3. android:shadowD_android悬浮textview

css 实现app图标样式_Html+CSS实现制作三角形图标-程序员宅基地

这篇文章主要为大家详细介绍了Html+CSS绘制三角形图标的相关代码,很多网页都有三角形的图标,通常是切的图片,这里可以用css3+html写出三角形,感兴趣的小伙伴们可以参考一下先看看效果图:代码入下:Document #test1 { height:20px; width:20px; border-color:#FF9600 #3366ff #12ad2a #f0eb7a; borde..._制作折叠三角形的app

Scrapy 1.6 documentation——2.3 Scrapy Tutorial_spider opened the store and continued to write vid-程序员宅基地

2.3 Scrapy TutorialIn this tutorial, we’ll assume that Scrapy is already installed on your system. If that’s not the case, see Installationguide.We are going to scrape quotes.toscrape.com, a websit..._spider opened the store and continued to write videos

随便推点

torch.stack()与torch.cat()的区别_torchr.stack_小高高不要bug的博客-程序员宅基地

torch.stack()与torch.cat()的区别最近遇到这两个函数总是分不清,看别人讲解的说明也是云里雾里,于是手写了一个例子,马上就理解了,例子如下:x1 = torch.tensor([[11, 21, 31], [21, 31, 41]], dtype=torch.int)x2 = torch.tensor([[12, 22, 32], [22, 32, 42]])inputs = [x1, x2]R0 = torch.cat(inputs, dim=0)print("R0:\n"_torchr.stack

endnote中CWYW无文件_电子阅读器+Endnote的文献阅读。-程序员宅基地

一直是用endnote管理文献资料,最近买个10寸的电子阅读器来看文献,主要有两个方面优势,最关键的当然是护眼,另一个是方便边看边在资料上面,画一画做笔记。但是,面临了一个新的问题,阅读器和电脑之间文件怎么同步?笔记同步?。。这打破了原有的资料管理系统。。。具体来说存在着这么两个矛盾:1,怎么实现文献资料在电脑和设备之间来回传输;2,怎么可以用阅读器自带的笔在上面写字,勾画之后又同步回电脑。首先,..._endnote的cwyw为什么通过视频打开

使用TFS来自动部署站点和Window Service-程序员宅基地

使用TFS来自动部署站点和Window Servicewww.firnow.com 时间 : 2010-08-02 作者:网络 编辑:Mr.阿布 点击: 76 [ 评论 ]--  前言   先问各位看官两个问题:   1. 你们用TFS么?   2. 你们做自动部署么?怎么做的?  这写博客不同讲课,没法及时互动,那我只好自问自答一把了:   1. 用,当然用,按我了解的情况来看,源码管理我想一定是使用率最高的,甚至很多公司只用了TFS的源码管理功能   2. 做,最开始想用TFS来做,但是发

什么是消息中间件_yuan同学的博客-程序员宅基地

定义消息中间件属于分布式系统中一个字系统,关注于数据的发送和接收,利用高效可靠的异步信息传递机制对分布式系统中的其余各个子系统进行集成。为什么要用消息中间件假设一个电商交易的场景,用户下单之后调用库存系统减库存,然后需要调用物流系统进行发货,如果交易、库存、物流是属于一个系统的,那么就是接口调用。但是随着系统的发展,各个模块越来越庞大、业务逻辑越来越复杂,必然是要做服务化和业务拆分的。这个时候就需要考虑这些系统之间如何交互,第一反应就是RPC(Remote Procedure Call)。系统继续发_什么是消息中间件

Python爬虫Headers处理脚本-字符串转字典_flow.request.headers 转字典-程序员宅基地

最近学python爬虫,复制chrom浏览器里的header到py里还要自己加引号,逗号,难受。网上查到的是 ”转换请求头参数的python脚本,自动添加引号“原文链接https://blog.csdn.net/weixin_43795201/article/details/84986421心想一步到位。直接转字典好了,于是用正则拼了个 ,已经满足需求。还没大量测试,不知道会不出bug,有需要的可以试试。import reform = {}r = re.sub(r'\n', ',', form_flow.request.headers 转字典

Vue解决keepAlive缓存页面,组件在其他界面重复使用问题_keep-alive的组件其他地方也用-程序员宅基地

问题:keepAlive缓存页面,组件在其他界面重复使用问题。解决方法:在生命周期beforeRouterLeave销毁组件即可,组件:<area-select ref="areaSelect"/>销毁:beforeRouterLeave(to, from, next) { this.$destroy(this.$areaSelect);}..._keep-alive的组件其他地方也用