设为首页 收藏本站
查看: 741|回复: 0

[经验分享] 批量解决oracle锁等待的方法

[复制链接]

尚未签到

发表于 2016-7-21 11:46:45 | 显示全部楼层 |阅读模式
此文章中批量解除oracle锁等待的方法为原创部分,其他概念性的内容来源于网络采集。本方法已在我的工程中多次使用,使用表现良好。
 
据我所知,oracle 10g之后的oracle版本不会因为使用者的操作原因,造成死锁。
 
大家通常会遇到这种现象,在自己web项目首页使用用户名,密码登陆系统时,始终停留在本页面,无法进入系统,或是在执行某些操作后,系统一直处在等待状态,不出结果,后台也无任何错误提醒。此时,很大的可能就是数据库锁等待,所要查询的包含用户名和密码的表或是用户正操作的表正在被占用造成的。
 
锁等待的现象:程序在执行的过程中,点击确定或保存按钮,程序没有响应,也没有出现报错。
 
网上有很多人把这种现象称为死锁,我认为是不合理的。此时的oracle并未发生任何死锁现象,只是它一直在等待使用者前一个操作的提交。
 
产生锁等待的原因:当对于数据库某个表的某一列做更新或删除等操作,执行完毕后该条语句不提交,另一条对于这一列数据做更新操作的语句在执行的时候就会处于等待状态,此时的现象是这条语句一直在执行,但一直没有执行成功,也没有报错。
 
锁等待定位方法
 
 

select sql_text from v$sql where hash_value in
(select sql_hash_value from v$session where sid in
(select session_id from v$locked_object))
   

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;
 
以上两种方法皆可以,不过查询出来的属性不同,可以根据个人需要选择。其中有一种方法速度较快,但我忘记是哪一种了,您若遇到数据库出现和锁等待相符的现象,可以用这两种方法查询试一下,若得到结果,则说明确实发生锁等待现象了。
 
单个解决锁等待的方法
 

alter system kill session 'sid, serial#'
 
其中的sid和serial可以通过上面锁等待定位方法的第二个方法得到,sid对应[size=1em]SESSION_ID,[size=1em]serial#对应[size=1em]SERIAL#。例如:
 

alter system kill session '130,2';
 
我通常会遇到上千个锁,实在没办法一个一个的kill掉了,所以我通常使用下述批量解锁方法。
 
批量解锁方法
注:此方法应在plsql中运行
 

declare cursor mycur is
select b.sid,b.serial#
  from v$locked_object a,v$session b
  where a.session_id = b.sid group by b.sid,b.serial#;
begin
for cur in mycur
loop  
execute immediate ( 'alter system  kill session  '''||cur.sid || ','|| cur.SERIAL# ||''' ');
end loop;
end;

 
若读者在使用中出现问题,可能是中英文字符转换造成的,请读者注意。
 

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-247379-1-1.html 上篇帖子: oracle 10g的dmp如何导入9i 下篇帖子: Oracle RAC SSH等价性配置
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表