Oracle 制造死锁和查询死锁

制造死锁

创造环境

create table t1_deadlock (a int);
create table t2_deadlock (a int);

insert into t1_deadlock values (1);
insert into t2_deadlock values (2);

--第一步
update t1_deadlock set a = 1000 where a = 1;

 

--第二步
update t2_deadlock set a = 2000 where a = 2;

 

--第三步
update t2_deadlock set a = 2000 where a = 2;

这里出现了“锁等待”(“阻塞”)的现象,原因很简单,因为在session2中已经对这条数据执行过这个操作,在session2中已经对该行加了行级锁。
注意,这里是“锁等待”,不是“死锁”,注意这两个概念的区别!

 

--第四步
update t1_deadlock set a = 1000 where a = 1;
这里还是长时间等待的现象,但是这里发生了“死锁”!!

 

查询死锁

转发:http://blog.csdn.net/yongali/article/details/1680768

SELECT   bs.username "Blocking User", bs.username "DB User",
         ws.username "Waiting User", bs.SID "SID", ws.SID "WSID",
         bs.serial# "Serial#", bs.sql_address "address",
         bs.sql_hash_value "Sql hash", bs.program "Blocking App",
         ws.program "Waiting App", bs.machine "Blocking Machine",
         ws.machine "Waiting Machine", bs.osuser "Blocking OS User",
         ws.osuser "Waiting OS User", bs.serial# "Serial#",
         ws.serial# "WSerial#",
         DECODE (wk.TYPE,
                 'MR', 'Media Recovery',
                 'RT', 'Redo Thread',
                 'UN', 'USER Name',
                 'TX', 'Transaction',
                 'TM', 'DML',
                 'UL', 'PL/SQL USER LOCK',
                 'DX', 'Distributed Xaction',
                 'CF', 'Control FILE',
                 'IS', 'Instance State',
                 'FS', 'FILE SET',
                 'IR', 'Instance Recovery',
                 'ST', 'Disk SPACE Transaction',
                 'TS', 'Temp Segment',
                 'IV', 'Library Cache Invalidation',
                 'LS', 'LOG START OR Switch',
                 'RW', 'ROW Wait',
                 'SQ', 'Sequence Number',
                 'TE', 'Extend TABLE',
                 'TT', 'Temp TABLE',
                 wk.TYPE
                ) lock_type,
         DECODE (hk.lmode,
                 0, 'None',
                 1, 'NULL',
                 2, 'ROW-S (SS)',
                 3, 'ROW-X (SX)',
                 4, 'SHARE',
                 5, 'S/ROW-X (SSX)',
                 6, 'EXCLUSIVE',
                 TO_CHAR (hk.lmode)
                ) mode_held,
         DECODE (wk.request,
                 0, 'None',
                 1, 'NULL',
                 2, 'ROW-S (SS)',
                 3, 'ROW-X (SX)',
                 4, 'SHARE',
                 5, 'S/ROW-X (SSX)',
                 6, 'EXCLUSIVE',
                 TO_CHAR (wk.request)
                ) mode_requested,
         TO_CHAR (hk.id1) lock_id1, TO_CHAR (hk.id2) lock_id2,
         DECODE
            (hk.BLOCK,
             0, 'NOT Blocking',         /**//* Not blocking any other processes */
             1, 'Blocking',             /**//* This lock blocks other processes */
             2, 'Global',          /**//* This lock is global, so we can't tell */
             TO_CHAR (hk.BLOCK)
            ) blocking_others
    FROM v$lock hk, v$session bs, v$lock wk, v$session ws
   WHERE hk.BLOCK = 1
     AND hk.lmode != 0
     AND hk.lmode != 1
     AND wk.request != 0
     AND wk.TYPE(+) = hk.TYPE
     AND wk.id1(+) = hk.id1
     AND wk.id2(+) = hk.id2
     AND hk.SID = bs.SID(+)
     AND wk.SID = ws.SID(+)
     AND (bs.username IS NOT NULL)
     AND (bs.username <> 'SYSTEM')
     AND (bs.username <> 'SYS')
ORDER BY 1;

--------------------------------------------------------------------------------
查询发生死锁的select语句

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))


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

一、        数据库死锁的现象
程序在执行的过程中,点击确定或保存按钮,程序没有响应,也没有出现报错。
二、        死锁的原理
当对于数据库某个表的某一列做更新或删除等操作,执行完毕后该条语句不提
交,另一条对于这一列数据做更新操作的语句在执行的时候就会处于等待状态,
此时的现象是这条语句一直在执行,但一直没有执行成功,也没有报错。
三、        死锁的定位方法
通过检查数据库表,能够检查出是哪一条语句被死锁,产生死锁的机器是哪一台。
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进程。

转载于:https://www.cnblogs.com/yinhaosln/archive/2011/11/30/2268829.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/464335.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在STM32单片机上跑神经网络算法

摘要&#xff1a;为什么可以在STM32上面跑神经网络&#xff1f;简而言之就是使用STM32CubeMX中的X-Cube-AI扩展包将当前比较热门的AI框架进行C代码的转化&#xff0c;以支持在嵌入式设备上使用&#xff0c;目前使用X-Cube-AI需要在STM32CubeMX版本5.0以上&#xff0c;支持转化的…

CF Edu54 E. Vasya and a Tree DFS+树状数组

Vasya and a Tree 题意&#xff1a; 给定一棵树&#xff0c;对树有3e5的操作&#xff0c;每次操作为&#xff0c;把树上某个节点的不超过d的子节点都加上值x; 思路&#xff1a; 多开一个vector记录每个点上的操作。dfs这颗树&#xff0c;同时以深度开一个树状数组&#xff0c;踩…

应用框架的设计与实现学习手札系列(持续更新)

应用框架的设计与实现学习手札 类工厂服务 应用框架的设计与实现学习手札之类工厂服务——反射 转载于:https://www.cnblogs.com/stwyhm/archive/2006/08/14/476061.html

通信教程 | 串口丢数据常见的原因

UART&#xff1a;Universal Asynchronous Receiver / Transmitter&#xff0c;通用异步收发传输器&#xff0c;即我们通常说的串口。串口是工程师最常用的串行外设之一&#xff0c;但在实际应用中还是会经常遇到各种问题。比如&#xff1a;丢失一字节数据。今天我们就结合STM32…

电脑无法启动故障的10种解决方法

电脑无法启动故障的10种解决方法 开机自检时出现问题后会出现各种各样的英文短句&#xff0c;短句中包含了非常重要的信息&#xff0c;读懂这些信息可以自己解决一些小问题&#xff0c;可是这些英文难倒了一部分朋友&#xff0c;下面是一些常见的BIOS短句的解释&#xff0c;大家…

三次握手 四次握手 与socket函数的关系

我们深谙信息交流的价值&#xff0c;那网络中进程之间如何通信&#xff0c;如我们每天打开浏览器浏览网页时&#xff0c;浏览器的进程怎么与web服务器通信的&#xff1f;当你用QQ聊天时&#xff0c;QQ进程怎么与服务器或你好友所在的QQ进程通信&#xff1f;这些都得靠socket&am…

110-简单类型之整数类型和小数类型

简单类型-整数 简单类型-小数 float myFloat12.5f;转载于:https://www.cnblogs.com/wuxiaohui1983/p/9965493.html

c语言 修改密码源码,基于51单片机串口密码修改设计-(源码+电路图)

名称&#xff1a;多功能电子密码锁(使用STM32平台 使用 keiluvision软件&#xff0c;用C语言写代码)系统由STM32单片机核心板电路、7位按键电路、串口电路、电源电路、液晶1602电路、继电器模块电路和LED灯指示电路组成。具体功能&#xff1a;①系统中有3组正确密码&#xff0c…

看了2022华为春季发布会

我之前在一家智能家居的公司干过&#xff0c;而且我是从0开始做的&#xff0c;所以对这个行业多少还是有点了解&#xff0c;我从技术人角度看一下这场发布会。看到了智能家居的几个产品&#xff0c;然后再想起来我们之前做的东西&#xff0c;嗯&#xff0c;感觉我们做的提前做了…

BackGroundWorker用法

在编程中经常会遇到在一个按钮中执行复杂操作&#xff0c;并将复杂操作最后返回的值加入一个ListView或ComboBox中候选。这个时候程序会卡&#xff0c;当程序员将这些卡代码放进线程(Thread)中后发现当对控件操作时出现“线程间操作无效: 从不是创建控件的线程访问它”异常。 …

观易先生品三国

今天下了 易中天 易先生的品三国看了第一集 才知三国演义对三国历史曲解多深另外看到一副 剃头师傅的对联 颇有意思说是以关羽为祖师爷 颇有关羽的口气看天下头颅几许 看老夫手段如何转载于:https://www.cnblogs.com/slightboy/archive/2006/08/19/481439.html

TCP如何保证可靠性

TCP传输控制协议 TCP 协议是一种面向连接的&#xff0c;为不同主机进程间提供可靠数据传输的协议。TCP 协议假定其所使用的网络栈下层协议&#xff08;如IP 协议&#xff09;是非可靠的&#xff0c;其自身提供机制保证数据的可靠性传输。在目前的网络栈协议族中&#xff0c;在需…

c语言 数组循环移动,如何将一个数组的元素循环左移?

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼#include #include #define SIZE(a) (sizeof(a)/sizeof(a[0]))#define HBIT(a) ((a & 0x00000080) ! 0)#define LBIT(a) ((a & 0x00000001) ! 0)int TAB[] {0x10, 0x71, 0x12, 0x10, 0x10, 0x7C, 0x00, 0x00,0x00, 0x00, …

你们还在用8位单片机吗?

工作这些年&#xff0c;一种从事嵌入式相关的工作&#xff0c;大部分接触的是ARM芯片&#xff0c;不过也有接触到8位单片机的机会&#xff0c;在一些控制领域&#xff0c;8位单片机还是有自己的用武之地的&#xff0c;大家也来说一说&#xff0c;自己还有接触到8位单片机吗&…

生成 excel 直接用 httpServletResponse 输出

之前写过一篇文章 《超详细的java生成excel文件并下载》&#xff0c;该文章虽然够详细&#xff0c;也行得通&#xff0c;但还是有一定的缺陷&#xff0c;该文章可以拆分成两个部分&#xff0c;一是指定位置生成excel文件&#xff0c;二是根据地址下载文件。缺陷的部分是会产生中…

获取网站投资(融资成功)的20个自我检查

1、web2.0提了也白提web2.0这是一个概念&#xff0c;打着web2.0的概念&#xff0c;只是说技术如何如何2.0&#xff0c;战略如何2.0&#xff0c;其实意 义真的不大。投资人需要的是一个网民能够接受&#xff0c;并且很有特点的网站&#xff0c;能够满足网民的某个需求&#xff0…

MYSQL AB复制原理

Mysql复制&#xff08;replication&#xff09;是一个异步的复制&#xff0c;从一个Mysql instace&#xff08;称之为Master&#xff09;复制到另一个Mysql instance&#xff08;称之Slave&#xff09;。实现整个复制操作主要由三个进程完成的&#xff0c;其中两个进程在Slave&…

TCP拥塞控制详解

为了防止网络的拥塞现象 &#xff0c;TCP提出了一系列的拥塞控制机制。最初由V. Jacobson在1988年的论文中提出的TCP的拥塞控制由“慢启动(Slow start)”和“拥塞避免(Congestion avoidance)”组成&#xff0c;后来TCP Reno版本中又针对性的加入了“快速重传(Fast retransmit)”…

北航博士,研究所月入两万

大家好&#xff0c;看到张老师的一篇文章&#xff0c;说的一位研究生大哥的心路历程&#xff0c;分享给大家。作者&#xff1a;易贝贝https://www.zhihu.com/question/64371326/answer/2251105460文章转自&#xff1a;大鱼机器人北航博士&#xff0c;2019 年 7 月毕业&#xff…

分号是不是c语言的一部分,问什么C程序里总是提示缺少分号;,而明明有分号?...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼if(lpNULL)printf("********还没存入图书********\n");else{for(s0;s<5;s){while(( szp->snumber[s]!lp->number )&&(lp->next!NULL))lplp->next;if( szp->snumber[s]lp->number){printf(&…