[转帖]Oracle死锁查询及处理_MySQL, Oracle及数据库讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  MySQL, Oracle及数据库讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 1596 | 回复: 0   主题: [转帖]Oracle死锁查询及处理        下一篇 
huang.wang
注册用户
等级:中将
经验:17623
发帖:407
精华:1
注册:1970-1-1
状态:离线
发送短消息息给huang.wang 加好友    发送短消息息给huang.wang 发消息
发表于: IP:您无权察看 2018-7-4 11:26:55 | [全部帖] [楼主帖] 楼主

一、数据库死锁的现象
    程序在执行的过程中,点击确定或保存按钮,程序没有响应,也没有出现报错。
二、死锁的原理
    当对于数据库某个表的某一列做更新或删除等操作,执行完毕后该条语句不提交,另一条对于这一列数据做更新操作的语句在执行的时候就会处于等待状态,此时的现象是这条语句一直在执行,但一直没有执行成功,也没有报错。

三、死锁的定位方法
    通过检查数据库表,能够检查出是哪一条语句被死锁,产生死锁的机器是哪一台。
    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替换: exi

 ps -ef|grep spid

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

    from:http://southking.javaeye.com/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 C

 where A.HASH_VALUE = B.SQL_HASH_VALUE and

B.SID = C.Session_ID

 


该贴被huang.wang编辑于2018-7-4 11:28:26


我超级酷,但是如果你回复我的话我可以不酷那么一小会儿。


——来自logo.png


赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论