zoukankan      html  css  js  c++  java
  • 关于数据库死锁的检查方法

      •  

         

        关于数据库死锁的检查方法

        一、        数据库死锁的现象
        程序在执行的过程中,点击确定或保存按钮,程序没有响应,也没有出现报错。

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

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

        exit
        ps -ef|grep spid

          其中spid是这个进程的进程号,kill掉这个Oracle进程。
  • 相关阅读:
    Mousejack Hacking : 如何利用MouseJack进行物理攻击
    美国总统大选,黑客组织“匿名者”(Anonymous)也来凑热闹
    移动终端iframe的旋屏
    sql 语句和 mongodb 语句对应表
    [转] 两个viewport的故事
    单机斗地主
    websokcet压力测试工具
    python处理网络文字流,设置为utf8编码
    mysql常用命令
    redis学习资料
  • 原文地址:https://www.cnblogs.com/yanghj010/p/3830436.html
Copyright © 2011-2022 走看看