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中的进程被杀掉后,状态被置为"killed",但是锁定的资源很长时间不释放,有时实在没办法,只好重启数据库.现在提供一种方法解决这种问题,那就是在ORACLE中杀不掉的,在OS一级再杀.
数据库事务及隔离级别
隔离级别:脏读、幻读、一致读、不可重复读、更新丢失
①脏读(Dirty Reads):一个事务开始读取了某行数据但是另外一个事务已经更新了此数据但没有能够及时提交.这是相当危险很可能所有操作都被回滚
锁:在所有的DBMS(数据库管理系统)中,锁是实现事务的关键,锁可以保证事务的完整性和并发性.与现实生活中锁一样,它可以使某些数据的拥有者,在某段时间内不能使用某些数据或数据结构.当然锁还分级别的.
锁分为行级锁和表锁.
行级锁:主要是在执行操作过程中,锁定指定的行.
主要的锁行语句有:insert ,update,delete ,及select ....for update.
表锁:指在运行操作指令过程中,由用户指定锁定某张表.lock table XXX in mode share;
共享锁,排他锁,共享排它,行共享,行排他.
锁模式包括?
共享锁:(读取)操作创建的锁.其他用户可以并发读取数据,但任何事物都不能获取数据上的排它锁,直到已释放所有共享锁.
排他锁(X锁):对数据A加上排他锁后,则其他事务不能再对A加任任何类型的封锁.获准排他锁的事务既能读数据,又能修改数据.
更新锁:更新 (U) 锁可以防止通常形式的死锁.如果两个事务获得了资源上的共享模式锁,然后试图同时更新数据,则两个事务需都要转换共享锁为排它 (X) 锁,并且每个事务都等待另一个事务释放共享模式锁,所以呢发生死锁.
若要避免这种潜 在的死锁问题,请使用更新 (U) 锁.一次只有一个事务可以获得资源的更新 (U) 锁.如果事务修改资源,则更新 (U) 锁转换为排它 (X) 锁.否则,锁转换为共享锁.
锁的粒度主要有以下几种类型:
行锁: 粒度最小,并发性最高
表锁:粒度大,并发性低
数据库锁:控制整个数据库操作
乐观锁:乐观锁假设认为数据一般情况下不会造成冲突,所以在数据进行提交更新的时候,才会正式对数据的冲突与否进行检测,如果发现冲突了,则让返回用户错误的信息,让用户决定如何去做.一般的实现乐观锁的方式就是记录数据版本.
悲观锁:每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会block直到它拿到锁.传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁,读锁,写锁等,都是在做操作之前先上锁.
数据库管理系统(DBMS)中,并发控制的任务是:确保在多个事务同时存取同一数据时,不破坏事务的隔离性和统一性以及数据库的统一性.
悲观锁:假定会发生并发冲突,屏蔽一切可能违反数据完整性的操作
乐观锁:假设不会发生并发冲突,只在提交操作时检查是否违反数据完整性.
悲观锁:一段执行逻辑加上悲观锁,不同线程同时执行时,只能有一个线程执行,其他的线程在入口处等待,直到锁被释放.
乐观锁:一段执行逻辑加上乐观锁,不同线程同时执行时,可以同时进入执行,在最后更新数据的时候要检查这些数据是否被其他线程修改了(版本和执行初是否相同),没有修改则进行更新,否则放弃本次操作.
①.、在做Oracle监听程序测试时,发现帐户已经被锁定.
以上就是土嘎嘎小编为大家整理的oracle表怎么会锁相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!