网站首页 > 文章中心 > 其它

oracle如何造成死锁

作者:小编 更新时间:2023-09-10 10:19:54 浏览量:272人看过

oracle表在什么情况下会被锁住

在对指定表做append操作,其他再做truncate时候,会产生锁表,如下验证步骤,

①.、创建测试表,

select b.object_name, t.*

from v$locked_object t, user_objects b

where t.object_id = b.object_id

oracle经常死锁,锁定数据库的一些表,导致oracle死锁的原因一般有那些?

oracle如何造成死锁-图1

一般情况只发生锁超时,就是一个进程需要访问数据库表或者字段的时候,另外一个程序正在执行带锁的访问(比如修改数据),那么这个进程就会等待,当等了很久锁还没有解除的话就会锁超时,报告一个系统错误,拒绝执行相应的SQL操作.发生死锁的情况比较少,比如一个进程需要访问两个资源(数据库表或者字段),当获取一个资源的时候进程就对它执行锁定,然后等待下一个资源空闲,这时候如果另外一个进程也需要两个资源,而已经获得并锁定了第二个资源,那么就会死锁,因为当前进程锁定第一个资源等待第二个资源,而另外一个进程锁定了第二个资源等待第一个资源,两个进程都永远得不到满足.

erp100.com

ORACLE死锁多?

oracle如何造成死锁-图2

在oracle数据库中一般什么情况下会产生死锁,一般又是如何解决的呢?

例子?

事务A 事务B

时间点C 请求排他锁A 请求排他锁B

时间点D 请求排他锁B 请求排他锁A

这是个环路等待的例子吧,结局是事务A一致等锁B的释放,而事务B一致等锁A的释放

oracle数据库的表什么情况下会被锁住

DML锁又可以分为,行锁、表锁、死锁

-行锁:当事务执行数据库插入、更新、删除操作时,该事务自动获得操作表中操作行的排它锁.

-表级锁:当事务获得行锁后,此事务也将自动获得该行的表锁(共享锁),以防止其它事务进行DDL语句影响记录行的更新.事务也可以在进行过程中获得共享锁或排它锁,只有当事务显示使用LOCK TABLE语句显示的定义一个排它锁时,事务才会获得表上的排它锁,也可使用LOCK TABLE显示的定义一个表级的共享锁(LOCK TABLE具体用法请参考相关文档).

-死锁:当两个事务需要一组有冲突的锁,而不能将事务继续下去的话,就出现死锁.

+DDL锁又可以分为:排它DDL锁、共享DDL锁、分析锁

-排它DDL锁:创建、修改、删除一个数据库对象的DDL语句获得操作对象的 排它锁.如使用alter table语句时,为了维护数据的完成性、一致性、合法性,该事务获得一排它DDL锁.

-共享DDL锁:需在数据库对象之间建立相互依赖关系的DDL语句通常需共享获得DDL锁.

如创建一个包,该包中的过程与函数引用了不同的数据库表,当编译此包时,该事务就获得了引用表的共享DDL锁.

-分析锁:ORACLE使用共享池存储分析与优化过的SQL语句及PL/SQL程序,使运行相同语句的应用速度更快.一个在共享池中缓存的对象获得它所引用数据库对象的分析锁.分析锁是一种独特的DDL锁类型,ORACLE使用它追踪共享池对象及它所引用数据库对象之间的依赖关系.当一个事务修改或删除了共享池持有分析锁的数据库对象时,ORACLE使共享池中的对象作废,下次在引用这条SQL/PLSQL语句时,ORACLE重新分析编译此语句.

oracle怎么查看表死锁住的原因

①可能在Oracle中可以有计时器,在频繁操作数据库,update,insert,delete语句,在jobs中能查看到(如图)

【注释】:此处更新数据量都比较大,比如说update的数据库条数可能在1000条以上,

导致其他操作在等待(update跟其他操作都是同一张表)

【注释】:在SqlServer数据库里面有一个隐式事务,关闭时候,每次修改插入都需要手动提交,不然就会导致死锁

版权声明:倡导尊重与保护知识产权。未经许可,任何人不得复制、转载、或以其他方式使用本站《原创》内容,违者将追究其法律责任。本站文章内容,部分图片来源于网络,如有侵权,请联系我们修改或者删除处理。

编辑推荐

热门文章