【前言】

遇到 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问题之死锁 (一)的更多相关文章

  1. ORACLE-Kill 杀死正在执行的Oracle存储过程和死锁语句

    ORACLE-Kill 杀死正在执行的Oracle存储过程和死锁语句 存储过程 1.找到正在执行的存储过程的 sid ,serial# select   b.sid,b.SERIAL#,a.OBJEC ...

  2. oracle锁与死锁概念,阻塞产生的原因以及解决方案

    锁是一种机制,一直存在:死锁是一种错误,尽量避免.​ 首先,要理解锁和死锁的概念:​ 1.锁: 定义:简单的说,锁是数据库为了保证数据的一致性而存在的一种机制,其他数据库一样有,只不过实现机制上可能大 ...

  3. 【Oracle】查看死锁与解除死锁

    1.查询死锁的进程(下面2条语句均可用) 语句1: select sess.sid, sess.serial#, lo.oracle_username, lo.os_user_name, ao.obj ...

  4. oracle中表加锁死锁的现象、原因及解决方案

    一.表加锁.死锁出现的现象 1.对数据库操作update.insert.delete时候,数据库无法更新,操作等待时长,操作结果不发生改变: 2.在程序中,底层(数据访问层)操作时候不成功,数据库连接 ...

  5. 用PLSQL DEVELOPER工具简单查找ORACLE中的死锁和死锁排除

    用DBA身份登录后 查找死锁: select sess.sid,     sess.serial#,     lo.oracle_username,     lo.os_user_name,     ...

  6. 【ORACLE】查看死锁进程并结束死锁的脚本

    --共享锁:Share:排他锁:Exclusive:行共享锁:Row-S:行排他锁:Row-X select V$SESSION.sid,v$session.SERIAL#,v$process.spi ...

  7. Oracle 解决表死锁

    select 'alter system kill session ''' || SID || ',' || SERIAL# || ''';' from ( select distinct a.sid ...

  8. Oracle 表死锁 解决

    问题:更新的Update语句一直在更新 卡在执行update语句的地方. 清除的方法: Oracle表死锁解除   我是在plsql中处理  1.先查询  select * from v$locked ...

  9. .Net程序员学用Oracle系列(24):数据字典、死锁

    1.静态数据字典 1.1.实用静态数据字典 1.2.运用静态数据字典 2.动态数据字典 2.1.实用动态性能视图 2.2.运用动态性能视图 3.死锁 3.1.定位死锁 3.2.解锁方法 3.3.强制删 ...

随机推荐

  1. 20191121-8 Scrum立会报告+燃尽图 04

    此作业要求参见https://edu.cnblogs.com/campus/nenu/2019fall/homework/10068 一: 组名:组长组 组长:杨天宇 组员:魏新  罗杨美慧  王歆瑶 ...

  2. php strcmp函数漏洞

    strcmp函数漏洞 适用5.3版本以前的php 函数作用:字符串比较 要求传入字符串.如果传入非字符串呢? 结果函数报错!但是函数返回“0”  . 虽然报错了但函数的判断却是“相等” 如何传入非字符 ...

  3. 1086 就不告诉你 (15分)C语言

    做作业的时候,邻座的小盆友问你:"五乘以七等于多少?"你应该不失礼貌地微笑着告诉他:"五十三."本题就要求你,对任何一对给定的正整数,倒着输出它们的乘积. 输入 ...

  4. tomcat服务器基本操作:实现www.baidu.com访问tomcat中项目

    0.实现用其他的域名,而不再使用localhost:8080/xxx,访问tomcat中的项目: (1). 修改访问tomcat的端口号: (2). tomcat配置虚拟主机: (3). 本地DNS解 ...

  5. Shiro权限管理框架(五):自定义Filter实现及其问题排查记录

    明确需求 在使用Shiro的时候,鉴权失败一般都是返回一个错误页或者登录页给前端,特别是后台系统,这种模式用的特别多.但是现在的项目越来越多的趋向于使用前后端分离的方式开发,这时候就需要响应Json数 ...

  6. 小小知识点(二十七)20大5G关键技术

    5G网络技术主要分为三类:核心网.回传和前传网络.无线接入网. 核心网 核心网关键技术主要包括:网络功能虚拟化(NFV).软件定义网络(SDN).网络切片和多接入边缘计算(MEC). 1 网络功能虚拟 ...

  7. 22.Python安装和卸载第三方模块方法

    安装和卸载第三方开源模块的步骤:下例,安装urllib3模块的步骤. 1.安装开源模块步骤: 按键盘windows键+r键,输出cmd回车.或开始->windows系统->命令提示符: 输 ...

  8. 原生js面向对象编程-选项卡(点击)

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  9. 图解kubernetes scheduler基于map/reduce模式实现优选阶段

    优选阶段通过分map/reduce模式来实现多个node和多种算法的并行计算,并且通过基于二级索引来设计最终的存储结果,从而达到整个计算过程中的无锁设计,同时为了保证分配的随机性,针对同等优先级的采用 ...

  10. Google搜索成最大入口,简单谈下个人博客的SEO

    个人静态博客SEO该考虑哪些问题呢?本篇文章给你答案 咖啡君在开始写文章时首选了微信公众号作为发布平台,但公众号在PC端的体验并不好,连最基本的文章列表都没有,所以就搭建了运维咖啡吧的网站,可以通过点 ...