Oracle死锁监控和解决方法

本篇内容主要讲解“Oracle死锁监控和解决方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Oracle死锁监控和解决方法”吧!

本篇内容主要讲解“Oracle死锁监控和解决方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Oracle死锁监控和解决方法”吧!

创新互联专注于企业营销型网站建设、网站重做改版、泰宁网站定制设计、自适应品牌网站建设、H5高端网站建设商城建设、集团公司官网建设、成都外贸网站制作、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为泰宁等各大城市提供网站开发制作服务。

 1、  发现锁对象和对应的

SID//

发现锁定

SELECT s.username, l.OBJECT_ID, l.SESSION_ID, s.SERIAL#, l.ORACLE_USERNAME, l.OS_USER_NAME, l.PROCESS FROM V$LOCKED_OBJECT l,V$SESSION S WHERE l.SESSION_ID=S.SID;

 2、  解决方法——kill掉指定的

session

 alter system kill session ‘sid,serial#’;  (其中sid=l.session_id

 kill掉session,也可以在EM

中进行,使用图形化界面。

 3、  解决方法——kill掉指定的

process

 通过sid找到对应service进程的id信息,通过操作系统级别进行kill

 

select pro.spid from v$session ses,v$process pro where ses.sid=XX and ses.paddr=pro.addr;   其中sid用死锁的sid

替换。

exit

ps -ef|grep spid

 其中spid是这个进程的进程号,kill掉这个Oracle

进程。

 在OS层面kill进程的情况很多,比如使用dbms_job调用的session,大部分时候都需要在OS层面kill

掉。

 Oracle

死锁与应用设计

 一般情况下,应用程序对数据库的操作基本上是瞬时的(除非需要Tunning

)。只有涉及到批量事务操作的时候,才会出现长时间对一个对象的独占。一旦这种情况出现,所独占的对象又是为其他会话(批量操作)所请求,就有可能出现死锁。

 

长时间的批量事务一般都组织在系统专门的作业管理器中,根据特定的调度规则进行运行。为了提高效率,作业管理器通常使用多线程技术,同时多个线程执行多个任务,这种情况下,出现死锁的概率也有大大提升。在这个问题上,笔者有如下想法:

 1、  按照模块划分线程,模块内作业顺序执行,模块间并行。一般来说,一个模块的作业之间,会出现比较严重的资源请求共享,比如对同一个表中同一批数据的操作。这样很容易出现死锁状态。无论是手工解锁、还是借助Oracle

自身机制解锁,都至少引起一个作业的回滚。所以,根据模块进行划分,相同模块的作业尽可能顺序执行,减少表数据之间共用。不同模块之间的作业,操作更新的表范围差别比较大,所以不同业务模块之间作业进行并行。2、  作业中显示进行错误00060的处理。在作业的开发中,要加入对于00060

死锁错误的处理,如果接受到了该错误异常,要主动从应用层面进行操作回滚,接触其他作业阻塞情况。3、  借助Oracle自身锁机制,监控长时间锁住对象和会话状况,尽快通知DBA

手工解决死锁。

 综上所述:死锁在Oracle

中是一种比较少见的情况,而且自身有相应的监控防护机制。作为应用开发者的我们,也要尽可能的合理化应用处理结构,尽可能不要显示的锁定对象和设计不合理的并行操作,加大出现死锁的概率。

 

分享文章:Oracle死锁监控和解决方法
URL标题:/article32/cegsc.html

成都网站建设公司_创新互联,为您提供定制开发全网营销推广域名注册搜索引擎优化标签优化网站内链

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

成都app开发公司