oracle问题之死锁 (一)
【前言】
遇到 oracle 异常 和 解决实践 系列文章 整理分享
杂症一、oracle死锁
一、症状:
执行SQL或程序时,程序没有响应或SQL执行一直处于执行状态,没有成功,也没有报错。

二、病理:
当对数据库某个表的某一记录做更新或删除等操作,执行完毕后该条语句不提交事务,假如其他人同时也对该数据库执行一条对于这一记录做更新操作的语句。则在执行的时候就会处于等待状态,便陷入死锁,一直没有执行成功,也没有报错。
三、病因定位:
1)检查数据库确定 是否 真实存在死锁,若有 哪台机器哪个程序。
SQL>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)确定死锁后,还可以检查是哪个语句产生死锁等待。
SQL>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))

四、治疗:
方式一:查询未提交事务的SQL,大概率是其引起。
SQL>select s.sid,
s.username,
s.osuser,
s.program,
to_char(s.LOGON_TIME, 'yyyymmdd hh24:mi:ss') as LOGON_TIME,
to_char(t.START_DATE, 'yyyymmdd hh24:mi:ss') as START_DATE,
s.status,
(select q.SQL_TEXT
from v$sql q
where q.LAST_ACTIVE_TIME = t.START_DATE
and rownum <= 1) as SQL_TEXT
from v$session s, v$transaction t
where s.sADDR = t.SES_ADDR;

可以检查到是谁在什么时候执行哪条SQL 没有提交事务,找到对应的人,让其提交事务,提交完成便问题解决。
方式二:若找不到对应的人,则可以通过kill掉死锁的session进程
SQL>SELECT l.SESSION_ID,
l.OS_USER_NAME,
s.USERNAME,
l.OBJECT_ID,
l.ORACLE_USERNAME
FROM v$locked_object l , v$session s
WHERE l.SESSION_ID = s.SID

其中
进程 SID=10 的SQL为 未提交事务的SQL;
进程 SID=133 的SQL为 死锁中的SQL
SQL>select sql_text
from v$sql
where hash_value in
(select sql_hash_value
from v$session
where sid in (133))

SQL> alter system kill session '10,133';
方式三:获取oracle进程,直接kill掉oracle进程然后重启不建议(或 直接重启数据库)
# ps -ef|grep ora_dbw0_$Oracle_SID # kill -9 sid
重启数据库
# su oracle # sqlplus /nolog SQL> conn /as sysdba SQL> shutdown immediate; SQL> startup;
转自:https://blog.csdn.net/heshushun/article/details/80422137
oracle问题之死锁 (一)的更多相关文章
- ORACLE-Kill 杀死正在执行的Oracle存储过程和死锁语句
ORACLE-Kill 杀死正在执行的Oracle存储过程和死锁语句 存储过程 1.找到正在执行的存储过程的 sid ,serial# select b.sid,b.SERIAL#,a.OBJEC ...
- oracle锁与死锁概念,阻塞产生的原因以及解决方案
锁是一种机制,一直存在:死锁是一种错误,尽量避免. 首先,要理解锁和死锁的概念: 1.锁: 定义:简单的说,锁是数据库为了保证数据的一致性而存在的一种机制,其他数据库一样有,只不过实现机制上可能大 ...
- 【Oracle】查看死锁与解除死锁
1.查询死锁的进程(下面2条语句均可用) 语句1: select sess.sid, sess.serial#, lo.oracle_username, lo.os_user_name, ao.obj ...
- oracle中表加锁死锁的现象、原因及解决方案
一.表加锁.死锁出现的现象 1.对数据库操作update.insert.delete时候,数据库无法更新,操作等待时长,操作结果不发生改变: 2.在程序中,底层(数据访问层)操作时候不成功,数据库连接 ...
- 用PLSQL DEVELOPER工具简单查找ORACLE中的死锁和死锁排除
用DBA身份登录后 查找死锁: select sess.sid, sess.serial#, lo.oracle_username, lo.os_user_name, ...
- 【ORACLE】查看死锁进程并结束死锁的脚本
--共享锁:Share:排他锁:Exclusive:行共享锁:Row-S:行排他锁:Row-X select V$SESSION.sid,v$session.SERIAL#,v$process.spi ...
- Oracle 解决表死锁
select 'alter system kill session ''' || SID || ',' || SERIAL# || ''';' from ( select distinct a.sid ...
- Oracle 表死锁 解决
问题:更新的Update语句一直在更新 卡在执行update语句的地方. 清除的方法: Oracle表死锁解除 我是在plsql中处理 1.先查询 select * from v$locked ...
- .Net程序员学用Oracle系列(24):数据字典、死锁
1.静态数据字典 1.1.实用静态数据字典 1.2.运用静态数据字典 2.动态数据字典 2.1.实用动态性能视图 2.2.运用动态性能视图 3.死锁 3.1.定位死锁 3.2.解锁方法 3.3.强制删 ...
随机推荐
- 一篇长文说 git 基础
版本管理在产品级开发中是非常重要的一个部分,它涉及到团队协作,且影响到产品最终的发布.上线以及测试环节,当前最流行的版本控制系统是 git.git 内容非常多,本文尽量克制地来介绍 git 的基础内容 ...
- $hncpc2019E\ Numbers$ 搜索
正解:搜索 解题报告: 传送门$QAQ$ 考虑直接搜所有长度为1的数的位置?然后其他就能确定了嘛$QwQ$ 设每个数的出现次数为$a_i$,状态数为$\prod_{i=0}^9(a_i+1) \le ...
- Spring的BeanPostProcessor后置处理器与bean的生命周期
前言 本文将把Spring在Bean的生命周期中涉及到的后置处理器一一梳理出来,并简要说一下功能,至于每个后置处理器在实际扩展中的用处,还要后续慢慢探索总结. 正文 下面一步步跟进探寻那些后置处理器们 ...
- 小小知识点(十八)U盘中病毒了,System Volume Information文件夹删除不掉
win+R调出命令窗口后搜索cmd,启用cmd命令编辑器,并输入以下命令: attrib "H:\System Volume Information" -s //这句话可以选择 ...
- 基于GPS北斗卫星授时系统和NTP网络授时服务器的设计与开发
基于GPS北斗卫星授时系统和NTP网络授时服务器的设计与开发 安徽京准科技提供@请勿转载@@ 更多资料请参考——ahjzsz.com 天文观测设备对于控制系统的时间准确度有严格要求.为此,采用搭建高精 ...
- Q&A系列一:DataPipeline常见问题回答
不知不觉中,大家已经陪伴DataPipeline走过了3年时间.在这期间,得益于客户们的积极反馈和沟通,我们总结了一些日常工作中比较常见的问题,并基于这些问题进行了总结. 为避免突兀,我们会先从比较基 ...
- Ant Design框架中不同的组件访问不同的models中的数据
Ant Design框架中不同的组件访问不同的models中的数据 本文记录了我在使用该框架的时候踩过的坑,方便以后查阅. 一.models绑定 在某个组件(控件或是页面),要想从某个models中获 ...
- spring boot事务管理
spring boot集成事务十分的简单,只需要在启动类上面增加@EnableTransactionManagement注解,然后在需要实现事务的方法上添加@Transactional注解就可以了.下 ...
- POJ 1269 Intersecting Lines(判断两直线位置关系)
题目传送门:POJ 1269 Intersecting Lines Description We all know that a pair of distinct points on a plane ...
- 【Java并发基础】并发编程领域的三个问题:分工、同步和互斥
前言 可以将Java并发编程抽象为三个核心问题:分工.同步和互斥. 这三个问题的产生源自对性能的需求.最初时,为提高计算机的效率,当IO在等待时不让CPU空闲,于是就出现了分时操作系统也就出现了并发. ...