在Oracle数据库中如果出现死锁现象,数据库就会报出ORA-00060的错误代号,这种死锁现象通常都是应用逻辑设计出错导致的异常,和oracle数据库本身的设计无关,现在通过实验模拟一个死锁现象
打开两个会话执行下列更新顺序
会话1:执行对employee_id为198的字段更新
HR@prod>update employees set first_name = 'cj' where employee_id = 198;
1 row updated.
会话2:执行对employee_id为200的字段更新
HR@prod>update employees set first_name = 'hh' where employee_id = 200;
1 row updated.
会话1:再执行对employee_id为200的字段更新,此时语句已经hang住,需要等待会话2发出commit或rollback动作。
HR@prod>update employees set first_name = 'cj' where employee_id = 200;
会话2:一旦执行更新,会话1就会马上报错。
HR@prod>update employees set first_name = 'sdf' where employee_id = 198;
update employees set first_name = 'cj' where employee_id = 200
*
ERROR at line 1:
ORA-00060: deadlock detected while waiting for resource
会话2仍然hang住,查询alert日志发现报错:
ORA-00060: Deadlock detected. More info in file /u01/app/oracle/admin/prod/udump/prod_ora_4273.trc.
通过dba_blockers表中的HOLDING_SESSION字段可以查询到hang住会话的ID
SYS@prod>select * from dba_blockers;
HOLDING_SESSION
---------------
159
使用v$session视图获取hang住会话的sid和serial#
SYS@prod>select sid,serial#,username from v$session where sid in
2 (select blocking_session from v$session);
SID SERIAL# USERNAME
---------- ---------- ------------------------------
159 5 HR
找到hang住的会话后,执行alter system命令kill掉相应的session就可以了:
SYS@prod>alter system kill session '159,5' immediate;
System altered.
执行后会话1中的会话会自动被kill掉
会话1:
HR@prod>select employee_id,first_name from employees where rownum
select employee_id,first_name from employees where rownum
*
ERROR at line 1:
ORA-03135: connection lost contact
会话2中执行查询发现会话2的更改生效。
HR@prod>select employee_id,first_name from employees where rownum
EMPLOYEE_ID FIRST_NAME
----------- --------------------
198 sdf
199 Douglas
200 hh
201 Michael
202 Pat
203 Susan
204 Hermann
205 Shelley
206 William
100 Steven
10 rows selected.
实际上,当出现死锁的情况,Oracle也会在一段时间后解锁。这种情况会在alert日志中记载下列信息:
ORA-00060: Deadlock detected. More info in file /u01/app/oracle/admin/ORCL/udump/orcl_ora_3173.trc.
本篇文章来源于 Linux公社网站(www.linuxidc.com) 原文链接:http://www.linuxidc.com/Linux/2012-07/66890.htm
- 浏览: 5053423 次
- 性别:
- 来自: 南京
文章分类
- 全部博客 (2844)
- java (1094)
- hadoop (37)
- jvm (39)
- hbase (11)
- sql (25)
- 异常 (83)
- div css (6)
- 数据库 (95)
- 有趣的code (15)
- struts2 (6)
- spring (124)
- js (44)
- 算法 (65)
- linux (36)
- hibernate (7)
- 中间件 (78)
- 设计模式 (2)
- 架构 (275)
- 操作系统 (91)
- maven (35)
- tapestry (1)
- mybatis (9)
- MQ (101)
- zookeeper (18)
- 搜索引擎,爬虫 (208)
- 分布式计算 (45)
- c# (7)
- 抓包 (28)
- 开源框架 (45)
- 虚拟化 (12)
- mongodb (15)
- 计算机网络 (2)
- 缓存 (97)
- memcached (6)
- 分布式存储 (13)
- scala (5)
- 分词器 (24)
- spark (104)
- 工具 (23)
- netty (5)
- Mahout (6)
- neo4j (6)
- dubbo (36)
- canal (3)
- Hive (10)
- Vert.x (3)
- docker (115)
- 分布式追踪 (2)
- spring boot (5)
- 微服务 (56)
- 淘客 (5)
- mesos (67)
- php (3)
- etcd (2)
- jenkins (4)
- nginx (7)
- 区块链 (1)
- Kubernetes (92)
- 驾照 (1)
- 深度学习 (15)
- JGroups (1)
- 安全 (5)
- 测试 (16)
- 股票 (1)
- Android (2)
- 房产 (1)
- 运维 (6)
- 网关 (3)
最新评论
-
明兜3号:
部署落地+业务迁移 玩转k8s进阶与企业级实践技能(又名:Ku ...
Kubernetes系统常见运维技巧 -
q328965539:
牛掰啊 资料收集的很全面
HDFS小文件处理解决方案总结+facebook(HayStack) + 淘宝(TFS) -
guichou:
fluent挂载了/var/lib/kubelet/pods目 ...
kubernetes上部署Fluentd+Elasticsearch+kibana日志收集系统 -
xu982604405:
System.setProperty("java.r ...
jmx rmi 穿越防火墙问题及jmxmp的替代方案 -
大漠小帆:
麻烦问下,“获取每个Item相似性最高的前N个Item”,这个 ...
协同过滤推荐算法在MapReduce与Spark上实现对比
发表评论
-
kafka运行过程中localhost.localdomain: 未知的名称或服务
2017-11-22 19:37 2453kafka运行过程中出现了java.net.UnknownH ... -
MyBatis 使用 MyCat 实现多租户的一种简单思路
2017-11-20 18:27 2854本文的多租户是基于多数据库进行实现的,数据是通过不同数据库进 ... -
Otter(一)初识----简介和基本架构图
2017-10-11 11:23 1289tter 初识----简介和基本架构图 ... -
Canal+Otter - 前日篇(1)
2017-10-11 11:21 1200数据库同步中间件Canal+Otter - 前日篇(1) ... -
Otter-入门篇1(阿里开源项目Otter介绍)
2017-10-11 11:16 955Otter-入门篇1(阿里开源项目Otter介绍) ... -
Mysql几种索引类型的区别及适用情况
2017-09-30 16:27 587如大家所知道的,Mysql目前主要有以下几种索引类型:FUL ... -
唯一索引与主键索引的比较
2017-09-29 10:21 1480唯一索引唯一索引不 ... -
主键索引和唯一索引的区别
2017-09-29 10:05 661-- 区别 主键是一种约束,唯一索引是一种索引,两者 ... -
Index column size too large. The maximum column size is 767 bytes
2017-09-28 18:01 1894Index column size too large. T ... -
protocol 实体变动修改报错
2017-09-20 17:10 2452java.lang.IllegalStateExceptio ... -
用 nginx 反代一个域名,域名 dns 变更后 nginx 返回 504
2017-08-23 19:08 1379用域名 www.abc.com 反代 www.abcd.co ... -
数据库死锁分析与解决
2017-08-17 10:00 872一、死锁的表现 1、 ... -
mysql,oracle,sql server中的默认事务隔离级别查看,更改
2017-08-09 13:44 1382未提交读(隔离事务的最低级别,只能保证不读取物理上损坏的 ... -
Errors occurred during the build. Errors running builder 'Maven Project Builder'
2017-08-06 15:28 2133前几天项目还好好的,今天重装系统导入maven项目,报错,原 ... -
com.dyuproject.protostuff.ProtobufException: Protocol message contained an inval
2017-08-05 22:38 2618log4j:WARN No appenders could ... -
Mycat跨分片Join
2017-08-02 11:26 8831 前言 Mycat目前版本支持跨分片的join,主要实现 ... -
Mycat 分布式事务的实现
2017-08-02 11:27 1378引言:Mycat已经成为了一个强大的开源分布式数据库 ... -
MyCat部署运行(Windows环境)与使用步骤详解
2017-08-02 10:20 8961、MyCat概念 1.1 总体架构 MyCAT的架 ... -
mycat 分片中快速数据迁移思考
2017-07-31 17:42 875操作实践背景: travelrecord表定义 ... -
Mycat水平拆分之十种分片规则
2017-07-31 16:43 885水平切分分片实现 配置schema.xml ...
相关推荐
在Oracle数据库管理与开发过程中,遇到ORA错误是非常常见的现象。这些错误通常提供了关于问题的具体位置和性质的重要线索,帮助数据库管理员(DBA)或开发者快速定位并解决问题。本文将对部分ORA错误进行详细解读,...
死锁是当多个事务在等待其他事务释放资源时,导致系统无法继续执行的现象。 在Oracle数据库中,死锁可能是由多种原因引起的,例如资源竞争、锁定冲突、事务延迟等。为了解决死锁问题,需要使用PL/SQL语句来检测和...
#### ORA-00060:等待资源时检测到死锁 在资源争用过程中发现死锁现象。调整锁顺序或优化事务处理流程。 #### ORA-00061:另一个例程设置了不同的DML_LOCKS 当两个或更多例程尝试同时设置不同的DML_LOCKS值时触发。...
你可以通过`ORA-00060`错误代码来识别死锁的发生。为避免死锁,设计良好的事务策略和适当的并发控制是关键。比如,可以采用以下策略: - 事务应尽可能短,减少持有锁的时间。 - 避免长时间的事务,特别是涉及多个...
7. **死锁检测和避免策略**:Oracle数据库有内置的死锁检测机制,当检测到死锁时会自动回滚其中一个事务。此外,开发者可以利用数据库提供的工具和函数,如`DBMS_LOCK`包,来主动避免死锁的发生。 综上所述,Oracle...
本文将详细介绍Oracle记录被另一个用户锁定的现象、原因以及相应的解决方法。 #### 1. 现象及原因分析 当遇到“记录被另一个用户锁定”的情况时,通常会观察到以下现象: - 在执行更新或删除操作时,事务长时间...
- **在一个FORM中调用不同的WINDOW**:实现多窗口操作,增强用户界面的灵活性。 - **Form假死锁问题之初步解决**:探讨并解决Form中可能出现的锁定问题。 - **FORM死锁解决**:提供具体的解决方案以避免或解除...
- 定期检查是否存在死锁现象,一旦发现立即处理。 - **监控SQL语句的执行** - 监控关键SQL语句的执行情况,优化性能瓶颈。 - **操作系统级检查** - 对操作系统进行定期检查,确保系统层面无异常。 - **其他** - ...
- **现象**: 某个会话长时间占用大量资源,可能是因为死锁、资源竞争或程序逻辑问题。 - **排查步骤**: - 使用`v$session`或`gv$session`视图找到繁忙会话。 - 分析会话的等待事件(`v$session_wait`或`gv$session_...
- **一种会失败的常用数据仓库技术**:说明了一种常见的数据仓库技术存在的问题。 - **解释热表上超出期望的I/O**:分析了热点数据导致的I/O问题及其解决方法。 - **7.4 写一致性**: - **一致读和当前读**:...
阻塞是并发操作中常见的现象,当一个会话持有另一个会话需要的资源锁时,会发生阻塞。这可能导致长时间的等待,甚至引发死锁,表现为ORA-60错误。为避免阻塞,Oracle提供了两种封锁策略:悲观封锁和乐观封锁。悲观...