扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
当事务锁住某些数据时,其它事务必须排队等待,ORACLE在SGA中分配的Reource
在东丽等地区,都构建了全面的区域性战略布局,加强发展的系统性、市场前瞻性、产品创新能力,以专注、极致的服务理念,为客户提供成都网站设计、成都网站建设 网站设计制作按需策划,公司网站建设,企业网站建设,成都品牌网站建设,成都全网营销,外贸网站建设,东丽网站建设费用合理。
Structure、Lock
Structure数据结构通过Enqueue算法实现。
Resource
Structure有三个与并发控制有关的成员:Owner,Waiter,Converter。它们其实是指向Lock
Structure链表的指针。分别表示已经获取资料访问权的进程、等待进程、锁转换等待进程。资源由ID1,ID2标识,在上图中
TM表示资源类型,256表示dba_objects中的objectid
Lock
Structure用于记录访问共享资源的数据结构,它记录了锁模式、进程ID等信息
。当一个进程访问共享资源时,必须要去锁定该资源,所以它先要从内存中申请一个Lock
Structure,
然后根据封锁是否成功
加入不同的链表。
ORACLE里锁有以下几种模式:
0:none
1:null 空
2:Row-S 行共享(RS):共享表锁,sub share
3:Row-X 行独占(RX):用于行的修改,sub exclusive
4:Share 共享锁(S):阻止其他DML操作,share
5:S/Row-X 共享行独占(SRX):阻止其他事务操作,share/sub exclusive
6:exclusive 独占(X):独立访问使用,exclusive
一般是自动实现的,譬如你用DDL语句,那个表肯定就是表锁定了,DML不能使这个表不能插入,只能用手工锁定这个表来实现。lock table table_name in exclusive mode NOWAIT
在对指定表做append操作,其他再做truncate时候,会产生锁表,如下验证步骤,
1、创建测试表,
create table test_lock(id number, value varchar2(200));
2、执行append语句;并且不做提交,insert /*+append*/ into test_lock values(1,1);
3、再次执行清表语句,truncate table test_lock;报锁表错误,
4、查看锁表语句,发现被锁表,
select b.object_name, t.*
from v$locked_object t, user_objects b
where t.object_id = b.object_id
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流