例子?
事务A 事务B
时间点C 请求排他锁A 请求排他锁B
时间点D 请求排他锁B 请求排他锁A
这是个环路等待的例子吧,结局是事务A一致等锁B的释放,而事务B一致等锁A的释放
解决的方法 是 重写代码,2个锁一起请求,而不是分开请求
数据库锁的产生原因:
数据库和 *** 作系统一样,是一个多用户使用的共享资源。当多个用户并发地存取数据 时,在数据库中就会产生多个事务同时存取同一数据的情况。若对并发 *** 作不加控制就可能会读取和存储不正确的数据,破坏数据库的一致性。加锁是实现数据库并 发控制的一个非常重要的技术。在实际应用中经常会遇到的与锁相关的异常情况,当两个事务需要一组有冲突的锁,而不能将事务继续下去的话,就会出现死锁,严 重影响应用的正常执行。
在数据库中有两种基本的锁类型:排它锁(Exclusive Locks,即X锁)和共享锁(Share Locks,即S锁)。当数据对象被加上排它锁时,其他的事务不能对它读取和修改。加了共享锁的数据对象可以被其他事务读取,但不能修改。数据库利用这两 种基本的锁类型来对数据库的事务进行并发控制。
以上就是关于在oracle数据库中一般什么情况下会产生死锁,一般又是如何解决的呢全部的内容,包括:在oracle数据库中一般什么情况下会产生死锁,一般又是如何解决的呢、数据库为什么需要锁机制有哪些锁机制、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)