首页 > 数据库 >oracle死锁产生成原因和解决方案

oracle死锁产生成原因和解决方案

时间:2023-05-25 15:57:03浏览次数:37  
标签:vss 解决方案 OBJECT 死锁 session lo oracle ID

1.进行update 、delete 操作的窗口没有提交有在另一个窗口执行了更新或者删除动作。

2.在外键上没有加索引引起的死锁(这个要注意,设置了外键同时增加索引)

3.两个表之前不同顺序之间的相互更新操作引起的死锁(如果所有并发事务按同一顺序访问对象,则发生死锁的可能性会降低)

 

解锁表:

SELECT 'alter system kill session ' || '''' || lo.SESSION_ID || ',' || vss.SERIAL# || ''' immediate;', dob.OBJECT_NAME Table_Name, lo.SESSION_ID, lo.locked_mode, vss.SERIAL#, vss.action Action, vss.osuser OSUSER, vss.LOGON_TIME, vss.process AP_PID, VPS.SPID DB_PID from v$locked_object lo, dba_objects dob, v$session vss, V$PROCESS VPS
where lo.OBJECT_ID = dob.OBJECT_ID
and lo.SESSION_ID = vss.SID
AND VSS.paddr = VPS.addr AND dob.OBJECT_NAME LIKE '%表名(要大写)%'
order by lo.SESSION_ID, lo.LOCKED_MODE, DOB.object_name;

执行查询出来的alter语句,可以杀掉死锁。

 

对应DDL锁的是DDL语句,DDL语句全称数据定义语句(Data Define Language)。用于定义数据的结构或Schema,如:CREATE、ALTER、DROP、TRUNCATE、COMMENT、RENAME。当我们在执行某个存储过程、或者编译它的时候Oracle会自动给这个对象加上DDL锁,同时也会对这个存储过程所引用的对象加锁。当我们试图编译、修改存储过程、函数、包等对数据对象的时候,如果别人也正在编译或修改他们时就会产生锁等待;或者我们在编译某个存储过程的时候,如果它所引用的数据库对象正在被修改应该也会产生锁等待。

结论:不要同时对包进行编译,不要一直让包处于edit状态,调试完要及时关闭调试窗口(至少要commit结果),尽量不要在正式包调试方法。

解锁包:

SELECT  DISTINCT 'alter system kill session ' || '''' || sid || ',' || serial# ||
''' immediate;' 
FROM dba_ddl_locks a, v$session ss
WHERE a.name LIKE   '%包名(大写)%'   
AND a.session_id = ss.sid;

  执行查询出来的alter语句,可以杀掉死锁。

 

标签:vss,解决方案,OBJECT,死锁,session,lo,oracle,ID
From: https://www.cnblogs.com/CoolBinGao/p/17431129.html

相关文章

  • ORACLE数据库 定时全量备份
    1、ORACLE数据库定时全量备份 https://blog.csdn.net/ldz_wolf/article/details/130010941?spm=1001.2101.3001.6650.3&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EYuanLiJiHua%7EPosition-3-130010941-blog-13314331.235%5Ev36%5Epc_relevant_default_b......
  • Qt读取qss文件失败或qss不生效解决方案
            最近在写qt加载样式表的博文,发现qss文件要么打开失败,要么加载成功,但是不生效,经过一番搜索也是算解决了这个问题。读取qss失败:读取文件的方式有两种,一种是绝对路径,一种是相对路径://绝对路径C:\\Users\\fdog\\Desktop\\sheet.qss//相对路径./lib/sheet.qss出现错......
  • Centos 7 系统上使用dokcer安装oracle 11g(踩坑验证过可用)
    1.docker安装略2.查看docker中关于oracle11g的镜像,并拉下来dockersearchoracle_11gdockerpulldocker.io/akaiot/oracle_11g此处选择第二个 3.启动临时容器获取初始化数据dockerrun-d--nametest--restartunless-stopped\-p1521:1521docker.io/akaiot/o......
  • Oracle中读取JSON格式数据实战指南(oracle中读json)
    Oracle中读取JSON格式数据实战指南 随着大数据、云计算等技术的快速发展,JSON(JavaScriptObjectNotation)格式的数据越来越广泛应用于数据交互和存储中。Oracle数据库支持JSON格式数据的存储和查询,本篇文章将介绍如何在Oracle中读取JSON格式数据,并提供相关代码示例。 1.创建......
  • Linux系统,使用PHP连接ORACLE数据库
    首先安装ORACLE的InstantClient环境:在这里下载因为我需要连接11.2.0.4.0版本的ORACLE数据库,所以选取下载了basic-11.2.0.4.0-1.x86_64.rpm和devel-11.2.0.4.0-1.x86_64.rpm,使用如下命令安装:rpm-ivhoracle-instantclient11.2-basic-11.2.0.4.0-1.x86_64.rpmrpm-ivhoracle......
  • 现代 CSS 解决方案:CSS 原生支持的三角函数
    在CSS中,存在许多数学函数,这些函数能够通过简单的计算操作来生成某些属性值,例如:calc():用于计算任意长度、百分比或数值型数据,并将其作为CSS属性值。min()和max():用于比较一组数值中的最大值或最小值,也可以与任意长度、百分比或数值型数据一同使用。clamp():用于将属性值......
  • 前端跨域解决方案归纳整理
    前言前端跨域的各种文章其实已经很多了,但大部分还是不太符合我胃口的介绍跨域。看来看去,如果要让自己理解印象深刻,果然还是得自己敲一敲,并总结归纳整理一篇博客出来,以此记录。跨域的限制跨域是为了阻止用户读取到另一个域名下的内容,Ajax可以获取响应,浏览器认为这不安全,所以拦截了......
  • 【前端异常】html页面中的button按钮会自动提交form表单的问题以及解决方案
    情景描述有时候我们可能需要在表单中放置多个按钮,比如表单页面常见的按钮有创建和取消。点击创建按钮会触发单击响应事件,在单击响应事件中进行提交表单,这没有任何问题。点击取消按钮的时候,触发对应的单击响应事件,这个单击响应事件中主要处理关闭表单页面逻辑,所以会关闭页面,这也正常......
  • 【SVN异常】svn更新时,出现不知道这样的主机的解决方案
    今天正在更新项目时,突然出现不知道这样的主机的错误,尝试了几种方法,记录一下:错误如下图所示:问题原因:没有和服务器在同一局域网,一般是未启动SVN服务器或者本地断网导致。首先先检查网络连接问题!解决方法:Cleanup该项目文件夹,清理缓存。到项目所在目录,右击鼠标,点击cleanup或者清理出......
  • spring boot项目访问外部http请求的解决方案
    在Spring-Boot项目开发中,存在着本模块的代码需要访问外面模块接口,或外部url链接的需求。针对这一需求以前的做法就是访问外部请求都要经过httpClient需要专门写一个方法,来发送http请求,这个就不说了,网上一搜全都是现成的方法。springboot实现外部http请求是通过FeignClient来请求......