总结事故的背景:
当所以功能开发完成后,开发人员在本地进行了测视已经没问题了。就把所有开发的功能模块合并到
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 数据库表被锁的原因分析全部内容,希望文章能够帮你解决Oracle 、MySql 数据库表被锁的原因分析所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)