美文网首页
Oracle 、MySql 数据库表被锁的原因分析

Oracle 、MySql 数据库表被锁的原因分析

作者: RookieMZL | 来源:发表于2019-05-31 22:45 被阅读0次

记录一次准备给客户预演示出现的问题

事故的背景:

当所以功能开发完成后,开发人员在本地进行了测视已经没问题了。就把所有开发的功能模块合并到 dev 分支,进行打包,发布到预演示的线上环境。当在给相关人员进行演示的时候,出现了问题。

我们使用 https 调用对方的接口发送 Json 数据,对方进行校验马上返回校验的响应结果。问题出现在我们每次发送数据都是成功的,但是对方发送回来的数据,一直不能正常插入 DB(使用的是 Oracle)

事故的真正原因:

因为有个同事在进行了 delete 后没有进行 commit 提交。导致表一直被锁住,不能被其他人使用。

但是杀死进程和本地 commit 几次后,依旧无法插入数据,提示还是 DB 被这个同事锁住。

最后查出的真正原因是,这个同事首先使用了 无线网络 进行了 DB 的操作,当时并没有 commit 提交操作。而后又插上网线继续工作,问题就出现在这里。

首先,当我们使用无线网络操作 DB 时,Oracle 会默认这是一次会话(session),当开发人员对 DB 进行操作后(没有 commit ),又切换到了有线网络状态下,而这 2 种状态下的本机 IP 是不一样的(有兴趣的朋友可以试试使用无线和有线连接状态下,同一台电脑的 IP 地址是否一样)。

Oracle 会认为第一次 session 没有关闭,会将表锁住,等待这次 session 会话的提交直到结束。

所以当同事再连接上网线,使用有线网络进行 commit 时候会提示操作失败。因为 Oracle 数据库认为这又是一次新的 session 会话。而第一次的 session 会话并没有结束,就会导致出现了 DB 一直被锁的情况。

事故的解决办法:

首先使用语句查询(只有 Admin 用户才可以)出被锁住的表和锁表的开发人员的工号。

然后杀死这个进程或者进行 DB 重启即可。

相关文章

  • Oracle 、MySql 数据库表被锁的原因分析

    记录一次准备给客户预演示出现的问题 事故的背景:当所以功能开发完成后,开发人员在本地进行了测视已经没问题了。就把所...

  • MySQL 锁表

    Linux System Environment MySQL锁表简介 MySQL锁表是禁止用户在数据库增加/删除/...

  • MS汇总

    数据库相关[MS-关于锁(乐观锁,悲观锁,行锁、表锁,共享锁,排他锁)Mysql索引优化Mysql查询优化Mysq...

  • kettle学习笔记(五)——kettle输出步骤

    一、概述 数据库表:• 表输出• 更新,删除,插入/更新• 批量加载(mysql,oracle)• 数据同步文件:...

  • MySQL 数据导入Oracle

    从mysql导一个表到Oracle 背景:业务需要从阿里云数据库导出一张费率表到Oracle数据库,每天凌晨5点更...

  • Oracle vs PostgreSQL,研发注意事项(1)-查

    Oracle数据库,查询语句不会锁表,但PostgreSQL在开启事务后,查询数据表会锁表,在试图DROP/TRU...

  • Oracle SQL调优系列之定位生产性能问题方法

    Oracle SQL调优系列之定位生产性能问题方法 1、AWR整体分析 场景:最近遇到紧急生产问题,因为数据库锁表...

  • MySQL表级锁和行级锁

    MySQL学习笔记(五):MySQL表级锁和行级锁 一:概述 相对其他数据库而言,MySQL的锁机制比较简单,其最...

  • 5、全局锁和表锁

    根据加锁范围:MySQL里面的锁可以分为:全局锁、表级锁、行级锁 全局锁: 对整个数据库实例加锁。 MySQL提供...

  • Mysql语句总结(持续更新)

    本文主要记录Mysql数据库和Oracle数据库的区别(因为小编最开始学习的是Oracle数据库)1.查询一张表中...

网友评论

      本文标题:Oracle 、MySql 数据库表被锁的原因分析

      本文链接:https://www.haomeiwen.com/subject/tcuntctx.html