返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >Oracle锁表解决方法的详细记录
  • 755
分享到

Oracle锁表解决方法的详细记录

2024-04-02 19:04:59 755人浏览 薄情痞子
摘要

目录前言解决方法如下:总结前言 锁表或锁超时相信大家都不陌生,经常发生在DML语句中,产生的原因就是数据库的独占式封锁机制,当执行DML语句时对表或行数据进行锁住,直到事务提交或回滚

前言

表或锁超时相信大家都不陌生,经常发生在DML语句中,产生的原因就是数据库的独占式封锁机制,当执行DML语句时对表或行数据进行锁住,直到事务提交或回滚或者强制结束当前会话。

对于我们的应用系统而言锁表大概率会发生在sql执行慢并且没有超时的地方(一条SQL由于某种原因(Spoon工具做数据抽取与推送)一直执行不成功并且一直不释放资源)因此写出高效率SQL也尤为重要!还有另外情况也会发生锁表,就是高并发场景,高并发会带来的问题就是spring事务会造成数据库事务未提交产生死锁(当前事务等待其他事务释放锁资源)!从而抛出异常java.sql.SQLException: Lock wait timeout exceeded;。

那么如何解决锁表或锁超时呢?临时性解决方案就是找出锁资源竞争的表或语句,直接结束当前会话或sesstion,强制释放锁资源。例如

解决方法如下:

1、session1修改某条数据但是不提交事务,session2查询未提交事务的那条记录

2、session2尝试修改

我们可以看到修改未提交事务的记录会处于一直等待状态,直到对方释放锁资源或强制关闭session1。这里也说明了oracle做到了行级锁!

这里只是简单的模拟了出现锁表情况,可以一眼看出就是session1导致的锁表。实际开发中遇到这种情况一般都是使用SQL直接查出锁资源竞争的表或语句然后进行资源的强制释放!!

3、session3查询竞争资源的表或语句,强制释放资源

-- 查询未提交事务的session信息,注意执行以下SQL,用户需要有DBA权限才行
SELECT
    L.SESSION_ID,
    S.SERIAL#,
    L.LOCKED_MODE AS 锁模式,
    L.ORACLE_USERNAME AS 所有者,
    L.OS_USER_NAME AS 登录系统用户名,
    S.MacHINE AS 系统名,
    S.TERMINAL AS 终端用户名,
    O.OBJECT_NAME AS 被锁表对象名,
    S.LOGoN_TIME AS 登录数据库时间
FROM V$LOCKED_OBJECT L
    INNER JOIN ALL_OBJECTS O ON O.OBJECT_ID = L.OBJECT_ID
    INNER JOIN V$SESSION S ON S.SID = L.SESSION_ID
WHERE 1 = 1

查询结果如下

对我们强制释放资源有用的只有前面两个字段,例如

-- 强制 结束/kill 锁表会话语法
ALTER SYSTEM KILL SESSION 'SESSION_ID, SERIAL#';

-- 强制杀死session1,让session2可以修改id=5的那条记录
ALTER SYSTEM KILL SESSION '34, 111';

强制杀死session1后,注意观察session2的执行情况!我们会发现session2的等待会立即终止并执行!相信小伙伴们都有一个疑惑,session_id有29和34,如何确定他们属于session1还是session2,保证杀死的是session1让session2成功执行DML语句?

其实也很简单,这里的判断方式就是session1执行更新但不提交事务,可先用以上SQL查询未提交事务的session信息,此时查到的就是session1的信息。

总结

到此这篇关于Oracle锁表解决的文章就介绍到这了,更多相关Oracle锁表解决内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Oracle锁表解决方法的详细记录

本文链接: https://lsjlt.com/news/150491.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Oracle锁表解决方法的详细记录
    目录前言解决方法如下:总结前言 锁表或锁超时相信大家都不陌生,经常发生在DML语句中,产生的原因就是数据库的独占式封锁机制,当执行DML语句时对表或行数据进行锁住,直到事务提交或回滚...
    99+
    2024-04-02
  • MySQL insert死锁问题解决详细记录
    目录Insert死锁问题剖析前置知识构造死锁原因故死锁产生的原因MySQL 5.7 的死锁前提示例原因解决方案总结Insert死锁问题剖析 线上有个批量的insert … on duplicate key ...
    99+
    2024-04-02
  • MySQL insert死锁问题解决详细记录
    目录Insert死锁问题剖析前置知识构造死锁原因故死锁产生的原因MySQL 5.7 的死锁前提示例原因解决方案总结Insert死锁问题剖析 线上有个批量的insert &hellip...
    99+
    2022-11-13
    mysql insert死锁 mysql死锁排查及解决 MySQL死锁
  • oracle表被锁定的完美解决方法
    解决办法: ora-00031:session marked for kill处理oracle中杀不掉的锁一些ORACLE中的进程被杀掉后,状态被置为”killed”,但是锁定的资源很长时间不释放,有时实在...
    99+
    2024-04-02
  • Oracle锁表问题排查方法详解
    Oracle锁表问题排查方法详解 在使用Oracle数据库时,经常会遇到数据库表被锁住的情况,这会导致其他用户无法访问该表,从而影响系统的正常运行。本文将详细介绍Oracle锁表问题的...
    99+
    2024-03-10
    oracle 排查 锁表 数据丢失
  • mysql8.0忘记密码的详细解决方法
    目录一.问题:二:解决1.关闭mysql服务2.使用cd指令切换到mysql的bin目录3.打开一个新的cmd窗口,4.使用名为mysql的数据库,将对应user表的密码置空5. 关闭以步骤2mysqld --conso...
    99+
    2022-06-22
    MySQL8.0忘记密码 怎么重置mysql的密码 忘记mysql密码怎么找回
  • vue页面锁屏的完美解决方法记录
    目录vue实现页面锁屏完美解决1.禁止浏览器返回按钮2.书写锁屏页面和相关路由3.在router.beforeEach()路由首首位加上以下代码4.实现退出锁屏重新登录总结vue实现...
    99+
    2024-04-02
  • Oracle锁表与解锁的方案
    --ORACLE表被锁原因:具体操作某一个FORM界面,或者后台数据库操作某一个表时发现一直出于"假死"状态, --可能是该表被某一用户锁定,导致其他用户无法继续操作 --查询被锁的表 select b.owner, b...
    99+
    2018-01-12
    Oracle锁表与解锁的方案
  • oracle数据库锁表,什么SQL引起了锁表?ORACLE解锁的方法
    --查询数据库锁表记录 select sess.sid, sess.serial#, lo.oracle_username, lo.os_user_name, ao.obj...
    99+
    2019-07-09
    oracle数据库锁表 什么SQL引起了锁表?ORACLE解锁的方法
  • mysql锁表解锁的方法
    这篇文章主要介绍了mysql锁表解锁的方法,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获。下面让小编带着大家一起了解一下。什么是MySQL锁表?为了给高并发情况下的mysql进行...
    99+
    2024-04-02
  • mysql表被锁了的解决方法
    小编给大家分享一下mysql表被锁了的解决方法,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨吧!mysql表被锁了的解决办法如下:1、暴力解决方式重启MYSQL(重启解决问题利器,手动滑稽)2、查...
    99+
    2024-04-02
  • 基于docker部署Oracle 19c的详细记录
    目录一. 拉取Oracle 19c镜像二. 查看镜像三. 创建Oracle 19c镜像的容器3.1创建目录3.2 创建实例3.3 查看日志四、 修改密码五、连接数据库5.1测试方案一...
    99+
    2024-04-02
  • 详解Python连接oracle的问题记录与解决
    目录技术框架开发步骤一、安装cx_oracle二、编写数据库操作类三、输入订单号,执行查询四、格式化打印五、打印效果问题记录后期优化昨日晚平台升级,我们成功送BUG上线,今天系统问题又多了起来,大多数时候的运维问题需要根...
    99+
    2023-04-19
    Python连接oracle Python oracle
  • Oracle中表被锁的原因及解决方法有哪些?
    标题:Oracle中表被锁的原因及解决方法 在Oracle数据库中,表被锁是数据库操作中常见的问题之一。表锁定可能会导致数据库性能下降和应用程序无法正常运行。本文将介绍Oracle中表...
    99+
    2024-03-11
    编程 oracle 解决方法 表锁 sql语句 并发访问
  • Oracle锁表异常解决方案分享
    Oracle锁表异常解决方案分享 在使用Oracle数据库过程中,偶尔会遇到因为表被锁导致的异常情况,表现为无法正常执行SQL语句或者长时间等待的情况。这时候需要及时解决锁表问题,以保...
    99+
    2024-03-10
    解决方案 oracle 锁表 sql语句 异常解决
  • oracle如何查看被锁的表以及解锁方法
    这篇文章给大家分享的是有关oracle如何查看被锁的表以及解锁方法的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。--以下几个为相关表SELECT * FROM v$loc...
    99+
    2024-04-02
  • oracle中解决锁表的命令
    oracle 锁表问题可以通过以下命令解决:查看已锁定的表:select * from v$locked_objects;释放表锁:alter system kill sess...
    99+
    2024-05-09
    oracle
  • Python3笔记:列表方法详解
    user = [] user = list() # 将字符串转成列表 >>> list('abcde') ['a', 'b', 'c', 'd', 'e'] # 将元祖转成列表 >>> list(...
    99+
    2023-01-31
    详解 笔记 方法
  • Win8注册表被锁定的解决方法
    这篇文章主要介绍了Win8注册表被锁定的解决方法,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。按Win+R”,打开运行,输入“gpedit.msc”,点击确定;打开了如图本地...
    99+
    2023-06-28
  • Oracle死锁监控和解决方法
    本篇内容主要讲解“Oracle死锁监控和解决方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Oracle死锁监控和解决方法”吧! 1、  发现锁对象和对应的SID//发现锁...
    99+
    2023-06-06
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作