ITPub博客

首页 > Linux操作系统 > Linux操作系统 > oracle lock系列一

oracle lock系列一

原创 Linux操作系统 作者:wisdomone1 时间:2013-04-09 23:36:44 0 删除 编辑

/***********v$lock官方**************/

http://docs.oracle.com/cd/E11882_01/server.112/e25513/dynviews_2027.htm#REFRN30121

oracle lock
------------------------------------------------------------------
/***************锁类型****************/
1,根据操作行为及性质的不同,lock type锁类型分为;
     共享锁shared locks
     排它锁exclusive locks
2,exclusive locks产生,和获取表或表的一条记录资源有关;
  而shared locks基于数据库某个获取资源时产生

/***********锁模式******************/ 
3,lock modes持锁的模式
4,lock mode和并发有关;持锁模式级别高一些,并发就会低一些;
  相反则更高一些;
5,lock mode由oracle动态调节其级别以保证合理的并发访问
6,lock mode分为:
    排它锁模式exclusive lock mode
    共享锁模式share lock mode
7,排它锁模式
  修改数据会产生此模式
    第一个锁定资源的事务会以此模式持有资源,其它事务不能修改此数据
8,共享锁模式
    多个用户会话可以同时持有此模式同时读取数据
    此模式防止并发访问某些用户会话申请排它锁
 
9,select * for update语句产生一个行级排它锁 和 一个行级共享表锁
10,行级排它锁防止其它事务修改此行
11,行级共享表锁防止其它事务修改表的结构
------------------------------------------------------------------------  

 

/******************锁转化************************/
12,lock conversion锁转化
13,锁转化由oracle自动完成
14,锁转化针对锁模式,即由低级的锁模式转化为高级的锁模式(模式越高,对于资源访问控制越严格)          
15,比如:一个事务先运行了select * for update;后又更新了此锁定的记录;这种情况下;
  oracle自动把之前select * for update的锁模式由行级共享表锁转化为行级排它表锁
16,高级别的锁模式不需要锁转化


/*************锁扩大****************/
锁扩大lock escalation
1,锁扩大与锁转化不是一回事
2,锁扩大会加大死锁的可能性
3,比如:事务1锁定表的一些记录,锁扩大的表锁;而事务也正在更新此表的一些记录,也进行锁扩大,此时就产生了死锁;
 都想去竞争表锁

 

/*****************锁的类型**************************/
1,根据事务操作的资源类型有:
    1,dml locks
         1,table lock锁定整个表
         2,row lock锁定选中的表记录
        
    2,ddl locks
       1,保护模式对象比如表或视图的结构定义
   
    3,system locks
         1,保护oracle内部的一些资源对象结构或者数据结构的定义
         2,比如:datafile
                latch
                mutex
                internal
         3,它是由oracle自动化控制
        
/*******************上述锁的类型:依次展开说明*****************/     
1,dml locks
         1,table lock锁定整个表
         2,row lock锁定选中的表记录 
2,dml locks
     1,自动获取2种类型的锁
         2,row lock(tx)
           table lock(tm)
          
         /*******row lock**********/ 
         1,row lock也叫tx lock,它针对表的一条记录
         2,运行insert,delete,update,merge,select for update更新一条表记录会产生row lock
         3,而且oracle同时自动会产生一个subexclusive lock on table        
        
        
        
         /******table lock **********/
         1,也叫tm lock
         2,某个事务运行insert,delete,update,merge,select for update,lock table产生table lock
         3,table lock的功能:
             1,防止其它事务并发修改相同的资源
             2,防止ddl操作并发修改资源的结构定义,比如:正在更新表或视图的一条记录时,不能进行ddl操作
            
            
        
         /******获取table lock表锁的几种模式************/
         1,row share(rs)
             1,也叫subshare table lock(ss)
             2,某事务锁住表的一些记录,准备更新
             3,它是最低级别的锁模式,提供最大范围的并发
        
         2,row exclusive table lock(rx)
           1,也叫subexclusive table lock(sx)
             2,事务已更新了表中一些记录或者select for update会获取此锁模式
             3,此锁模式允许其它事务在一个表同时执行select,insert,delete,update,lock rows
             4,此锁模式允许多事务获取sx及subshare table lock(for the same table)
        
         3,share table lock(s)
             1,此模式允许其它事务select表,注意此select不能是select for update;
             2,此模式允许多个事务获取此模式
             3,此模式不能确保一个事务修改表的数据
        
        
         4,share row exclusive table lock(srx)
           1,也叫share-subexclusive table lock(ssx)
             2,它比share table lock更严格,级别更低
             3,同一时间,基于同一个表,只能有一个事务获取此模式的锁
             4,此模式允许其它事务select表,但不能是select for update;
             5,此模式不允许其它事务修改表
            
         5,exclusive table lock(x)
           1,此模式最牛,最高级,最严格
             2,此模式不允许进行任何的dml操作
             3,此模式不允许再获取其它类型的锁


/***************ddl lock***********************************/        
1,ddl locks
       1,保护模式对象比如表或视图的结构定义   

2,ddl lock
         1,在进行ddl操作前获取ddl lock
         2,防止ddl操作期间,修改对象的结构定义
         3,ddl lock获取和释放由oracle自动控制
        
3,ddl lock的模式
         1,exclusive ddl lock
              1,防止其它会话获取ddl lock或dml lock
              2,大多情形,除了下述的share ddl lock的ddl操作,需要exclusive ddl lock,防止其它ddl破环资源结构定义
              3,比如:正在drop table时,不允许alter table add column或者alter table
        
        
         2,share ddl lock      
              1,防止其它ddl操作产生冲突
              2,却允许其它类似的ddl并发操作   
             
              3,比如:当你正在运行create procedure时,此事务则会获取要创建存储过程所引用的对象的share ddl lock;
                     而此时其它并发会话也可以获取基于此存储过程所引用对象的share ddl lock
                     但注意:其它事务不能获取基于此存储过程所引用对象的exclusive ddl lock
                    
                    
/*************breakable parse locks易碎的解析锁*******************/  
1,parse lock由模式对象引用的sql或plsql语句或代码块持有
2,持有此锁的目的,如果sql或plsql引用的对象被drop or alter,以便相关的shared sql area变更为invalidate无效
  (也就是说只有有了这个锁,共享池中shared sql area的sql or plsql一旦引用对象变化了,其share sql area才可以变为无效)
3,此锁不允许任何ddl操作

4,此锁产生于share pool共享池
5,解析sql会获取此锁(解析sql要查看sql所引用对象是否发生过变化,从而决定shared pool中的share sql area是否有否,否则变更为无效;这个期间要获取此锁)                 
6,只要针对sql的share sql area在共享池,就要持此锁,注意是针对sql的share sql area,二者不一回事


/********system locks系统锁*****************/
1,oracle自动控制
2,保护oracle内部一些资源结构和内存结构

3,latch
       1,简单而低级的序列机制
       2,协调保护多用户存取访问共享数据结构,对象,文件,共享内存结构或资源
       3,比如:latch会保护sga上面的多个对象;dbwr和lgwr后台进程要从共享池中分配内存;
        创建数据结构;为了分配内存,这些后台进程就会获取shared pool latch,
         序列化访问共享池;
         分配内存之后,其它进程可能要访问shared pool中的library cache,
         library cache主要用于解析;
         此时,这些进程就会获取library cache latch,而非整个共享池的shared pool latch
        
       4,latch不允许排队;即获取到一个latch,获取到latch的会话以排它模式持有latch;
         其它会话只能等待
       5,latch spinning何时发生呢,一个进程重复请求一个latch;
       6,latch sleeping何时发生呢,一个时程在请求latch之前会释放cpu资源
       (小结:所以latch spinning会严重占用cpu,而后者较之就好得多
      

4,mutex
       1,也叫mutual exclusion object,mutex是它的简写
       2,它是一种低级机制,防止多并发进程导致内存对象老化(挤出内存)或者被破坏     
       3,它和latch很类似
       4,但是latch一般会保护多个对象,而mutex仅保护一个对象

5,mutex的作用
       1,减少竞争的可能性
       2,因为latch保护多个对象,如果多进程并发访问这些对象;还是会产生对于latch的竞争;
        而mutex只是一个对象;产生竞争的可能就大大降低了
       3,它占用的内存比latch更少
       4,如mutex处于共享模式,允许多并发会话同时引用它
      
      
/***********internal lock内部锁**************/ 
1,和latch及mutex相比,它是一种高级,更为复杂的机制
2,它的作用很多
3,数据库使用如下几种类型的内部锁
      1,dictionary cache locks
          1,持有它的时间非常短
          2,用于读取或修改dictionary cache的条目时,持有此锁
          3,确保被解析的sql不会看到不一致的对象定义(dictionary cache存储表或数据字典定义的元结构)
          4,此锁可用共享或排它模式
          5,sql解析完成共享模式锁被释放
          6,ddl操作完成后排它模式被释放
      
      2,file and log mangement locks
        1,主要用于保护各种文件
          2,比如:保护控制文件一个时间点只能有一个进程修改它
          3,多个实例以共享模式mount database,而一个实例以排它模式mount database
          4,保护日志文件
         
      3,tablespace and undo segment locks
        1,保护表空间和undo segment
          2,比如:在rac环境下,多实例必须要达成一致基于某个表空间是否为在线或离线;
          3,undo segment被锁住,确保仅一个实例可以写入数据       
 

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/9240380/viewspace-758118/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
提供针对oracle初学者及进阶的数据库培训,欢迎大家咨询: 微信: wisdomone 微信公众号: lovedb 工作经历: 中国普天 北京科蓝 北京云和恩墨 北京神州新桥

注册时间:2008-04-04

  • 博文量
    2189
  • 访问量
    12690169