oracle死鎖及处理方式.docx

  1. 1、本文档共25页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
oracle死鎖及处理方式

Oracle死锁查询及处理关于数据库死锁的检查方法?一、数据库死锁的现象程序在执行的过程中,点击确定或保存按钮,程序没有响应,也没有出现报错。二、死锁的原理当对于数据库某个表的某一列做更新或删除等操作,执行完毕后该条语句不提交,另一条对于这一列数据做更新操作的语句在执行的时候就会处于等待状态,此时的现象是这条语句一直在执行,但一直没有执行成功,也没有报错。三、死锁的定位方法通过检查数据库表,能够检查出是哪一条语句被死锁,产生死锁的机器是哪一台。1)用dba用户执行以下语句select username,lockwait,status,machine,program from v$session where sid in(select session_id from v$locked_object)如果有输出的结果,则说明有死锁,且能看到死锁的机器是哪一台。字段说明:Username:死锁语句所用的数据库用户;Lockwait:死锁的状态,如果有内容表示被死锁。Status: 状态,active表示被死锁Machine: 死锁语句所在的机器。Program: 产生死锁的语句主要来自哪个应用程序。2)用dba用户执行以下语句,可以查看到被死锁的语句。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))四、死锁的解决方法 一般情况下,只要将产生死锁的语句提交就可以了,但是在实际的执行过程中。用户可能不知道产生死锁的语句是哪一句。可以将程序关闭并重新启动就可以了。 经常在Oracle的使用过程中碰到这个问题,所以也总结了一点解决方法。 1)查找死锁的进程: sqlplus /as sysdba (sys/change_on_install)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掉这个死锁的进程:  alter system kill session ‘sid,serial#’; (其中sid=l.session_id) 3)如果还不能解决: select pro.spid from v$session ses,v$process pro where ses.sid=XX and ses.paddr=pro.addr; 其中sid用死锁的sid替换: exitps -ef|grep spid 其中spid是这个进程的进程号,kill掉这个Oracle进程from:/blog/550832??select A.SQL_TEXT, B.USERNAME, C.OBJECT_ID, C.SESSION_ID, B.SERIAL#, C.ORACLE_USERNAME,C.OS_USER_NAME,C.Process, ||C.Session_ID||,||B.SERIAL#||from v$sql A, v$session B, v$locked_object Cwhere A.HASH_VALUE = B.SQL_HASH_VALUE andB.SID = C.Session_IDoracle死锁解决办法 1.查哪个过程被锁 查V$DB_OBJECT_CACHE视图: SELECT * FROM V$DB_OBJECT_CACHE WHERE OWNER=过程的所属用户 AND LOCKS!=0; 2. 查是哪一个SID,通过SID可知道是哪个SESSION. 查V$ACCESS视图: SELECT * FROM V$ACCESS WHERE OWNER=过程的所属用户 AND NAME=刚才查到的过程名; 3. 查出SID和SERIAL# 查V$SESSION视图: SELECT SID,SERIAL#,PADDR FROM V$SESSION WHERE SID=刚才查到的SID 查V$PROCESS视图: SELECT SPID FROM V$PROCESS WHERE ADDR=刚才查到的PADDR; 4. 杀进程 (1).先杀ORACLE进程: ALTER SYSTEM KILL SESSION 查出的SID,查出的SERIAL#;考试大论坛 (2).能过CMD控制台,再杀操作系统进程: ORAKILL 数据库实现 刚才查出的S

文档评论(0)

fv45ffsjjI + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档