
DML锁又可以分为,行锁、表锁、死锁
-行锁:当事务执行数据库插入、更新、删除 *** 作时,该事务自动获得 *** 作表中 *** 作行的排它锁。
-表级锁:当事务获得行锁后,此事务也将自动获得该行的表锁(共享锁),以防止其它事务进行DDL语句影响记录行的更新。事务也可以在进行过程中获得共享锁或排它锁,只有当事务显示使用LOCK TABLE语句显示的定义一个排它锁时,事务才会获得表上的排它锁,也可使用LOCK TABLE显示的定义一个表级的共享锁(LOCK TABLE具体用法请参考相关文档)。
-死锁:当两个事务需要一组有冲突的锁,而不能将事务继续下去的话,就出现死锁。
如事务1在表A行记录#3中有一排它锁,并等待事务2在表A中记录#4中排它锁的释放,而事务2在表A记录行#4中有一排它锁,并等待事务1在表A中记录#3中排它锁的释放,事务1与事务2彼此等待,因此就造成了死锁。死锁一般是因拙劣的事务设计而产生。
死锁只能使用SQL下:alter system kill session "sid,serial#";或者使用相关 *** 作系统kill进程的命令,如UNIX下kill -9 sid,或者使用其它工具杀掉死锁进程。
+DDL锁又可以分为:排它DDL锁、共享DDL锁、分析锁
-排它DDL锁:创建、修改、删除一个数据库对象的DDL语句获得 *** 作对象的 排它锁。如使用alter table语句时,为了维护数据的完成性、一致性、合法性,该事务获得一排它DDL锁。
-共享DDL锁:需在数据库对象之间建立相互依赖关系的DDL语句通常需共享获得DDL锁。
如创建一个包,该包中的过程与函数引用了不同的数据库表,当编译此包时,该事务就获得了引用表的共享DDL锁。
-分析锁:ORACLE使用共享池存储分析与优化过的SQL语句及PL/SQL程序,使运行相同语句的应用速度更快。一个在共享池中缓存的对象获得它所引用数据库对象的分析锁。分析锁是一种独特的DDL锁类型,ORACLE使用它追踪共享池对象及它所引用数据库对象之间的依赖关系。当一个事务修改或删除了共享池持有分析锁的数据库对象时,ORACLE使共享池中的对象作废,下次在引用这条SQL/PLSQL语句时,ORACLE重新分析编译此语句。
oracle数据库分行级锁和表级锁。用select from table-name for update完成行级锁。用delete或update完成表级锁。你锁定的资源 别人会等待你的提交语句或回退语句完成以后再继续进行。
用如下语句查询锁死的表:
select pspid,aserial#,
cobject_name,
bsession_id,
boracle_username,
bos_user_name
from v$process p, v$session a, v$locked_object b, all_objects c
where paddr = apaddr
and aprocess = bprocess
and cobject_id = bobject_id;
其中object_name就是被锁的表名,如图:
我来回答你,(虽然没分)。 oracle 11g,分为两种模式的锁。X锁(排他锁)、S锁(共享锁)。 X锁也可以叫写锁,用于对数据的修改。意思就是:我加上锁别人不能给它加X锁,我不释放锁,那么数据只能由我来修改。
oracle没有锁不能建立索引,oracle中添加索引的时候加入online
在线方式创建索引,即使用online创建索引:CREATE INDEX 索引名 ON 表名(列名) online;
在线方式创建索引,锁的是行而非表,通过临时表进行索引的创建,所以不会影响DML *** 作,创建索引的速度慢一些
非在线方式创建索引,锁表,优先创建索引,此时DML都被阻塞,所以速度快。
MySQL56版本开始支持在线创建--Online DDL
ALTER TABLE table_name ADD INDEX , indea_name ,ALGORITHM=INPLACE,LOCK=NONE
ALGORITHM指定创建或删除索引得算法,有以下几类
以上就是关于oracle数据库的表什么情况下会被锁住全部的内容,包括:oracle数据库的表什么情况下会被锁住、oracle数据库怎么锁表、查询oracle 数据库里有哪些表锁死等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)