`
lijun87
  • 浏览: 267817 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

深入浅出oracle锁原理篇

阅读更多
在现代的多用户多任务系统中,必然会出现多个用户同时访问共享的某个对象,这个对象可能是表,行,或者内存结构,为了解决多个用户并发性访问带来的数据的安全性,完整性及一致性问题,必须要有一种机制,来使对这些共享资源的并发性访问串行化,oracle中的锁就可以提供这样的功能,当事务[/B][/U]在对某个对象进行操作前,先向系统发出请求,对其加相应的锁,加锁后该事务就对该数据对象有了一定的控制权限,在该事务释放锁之前,其他的事务不能对此数据对象进行更新操作(可以做select动作,但select 利用的是undo中的前镜像数据了).Oracle锁的分类Oracle锁基本上可以分为二类a:共享锁(share locks)  也称读锁,s锁b:排它锁 (exclusive locks) 也称写锁,x锁在数据库[/B][/U]中有两种基本的锁类型:排它锁(Exclusive Locks,即X锁)和共享锁(Share Locks,即S锁)。当数据对象被加上排它锁时,其他的事务不能对它读取和修改。加了共享锁的数据对象可以被其他事务读取,但不能修改。数据库利用这两种基本的锁类型来对数据库的事务进行并发控制。
按锁保护的内容分类oracle提供多粒度封锁机制,按保护对象来分,据此又可以分为a:dml锁, data locks 数据锁,用来保护数据的完整性和一致性b:ddl锁, dictionary locks 字典锁,用来保护数据对象的结构,如table[/B][/U],index的定义c:内部锁和闩 internal locks and latchs 用来保护数据库内部结构,如sga内存结构
dml锁DML锁主要包括TM锁和TX锁,其中TM锁称为表级锁,TM锁的种类有S,X,SR,SX,SRX五种,TX锁称为事务锁或行级锁。当Oracle执行delete,update,insert,select for update  DML语句时,oracle首先自动在所要操作的表上申请TM类型的锁。当TM锁获得后,再自动申请TX类型的锁,并将实际锁定的数据行的锁标志位(lb 即lock[/B][/U] bytes)进行置位。在记录被某一会话锁定后,其他需要访问被锁定对象的会话会按先进先出的方式等待锁的释放,对于select操作而言,并不需要任何锁,所以即使记录被锁定,select语句依然可以执行,实际上,在此情况下,oracle是用到undo的内容进行一致性读来实现的。
在 Oracle数据库中,当一个事务首次发起一个DML语句时就获得一个TX锁,该锁保持到事务被提交或回滚。在数据行上只有X锁(排他锁),就是说TX锁只能是排他锁,在记录行上设置共享锁没有意义。当两个或多个会话在表的同一条记录上执行DML语句时,第一个会话在该条记录上加锁,其他的会话处于等待状态。当第一个会话提交后,TX锁被释放,其他会话才可以加锁。
在数据表上,oracle默认是共享锁,在执行dml语句的时候,oracle会先申请对象上的共享锁,防止其他会话在这个对象上做ddl语句,成功申请表上的共享锁后,再在受影响的记录上加排它所,防止其他会话对这些做修改动作。
这样在事务加锁前检查TX锁相容性时就不用再逐行检查锁标志,而只需检查TM锁模式的相容性即可,大大提高了系统的效率。TM锁包括了SS、SX、S、X等多种模式,在数据库中用0-6来表示。不同的SQL[/B][/U]操作产生不同类型的TM锁。如表1所示。
和锁相关的性能视图介绍v$lockSID          会话的sid,可以和v$session 关联   TYPE         区分该锁保护对象的类型,如tm,tx,rt,mr等ID1          锁表示1,详细见下说明                ID2          锁表示2,详细见下说明           LMODE        锁模式,见下面说明             REQUEST      申请的锁模式,同lmode                 CTIME        已持有或者等待锁的时间                BLOCK        是否阻塞其他会话锁申请 1:阻塞 0:不阻塞 
LMODE取值0,1,2,3,4,5,6, 数字越大锁级别越高, 影响的操作越多。1级锁:Select,有时会在v$locked_object出现。2级锁即RS锁相应的sql有:Select for update ,Lock xxx in  Row Share mode,select for update当对话使用for update子串打开一个游标时,所有返回集中的数据行都将处于行级(Row-X)独占式锁定,其他对象只能查询这些数据行,不能进行update、delete或select for update操作。3级锁即RX锁相应的sql有:Insert, Update, Delete, Lock xxx in Row Exclusive mode,没有commit之前插入同样的一条记录会没有反应, 因为后一个3的锁会一直等待上一个3的锁, 我们必须释放掉上一个才能继续工作。4级锁即S锁相应的sql有:Create Index, Lock xxx in Share mode5级锁即SRX锁相应的sql有:Lock xxx in Share Row Exclusive mode,当有主外键约束时update/delete ... ; 可能会产生4,5的锁。6级锁即X锁相应的sql有:Alter table, Drop table, Drop Index, Truncate table, Lock xxx in Exclusivemode
ID1,ID2的取值含义根据type的取值而有所不同对于TM 锁ID1表示被锁定表的object_id 可以和dba_objects视图关联取得具体表信息,ID2 值为0对于TX 锁 ID1以十进制数值表示该事务所占用的回滚段号和事务槽slot number号,其组形式: 0xRRRRSSSS,RRRR=RBS/UNDO NUMBER,SSSS=SLOT NUMBERID2 以十进制数值表示环绕wrap的次数,即事务槽被重用的次数                                             v$locked_objectXIDUSN               undo segment number ,可以和v$transaction关联    XIDSLOT              undo slot number      XIDSQN               序列号                         OBJECT_ID            被锁定对象的object_id ,   可以和dba_objects关联SESSION_ID           持有该锁的session_id,     可以和v$session关联ORACLE_USERNAME   持有该锁的oracle帐号                     OS_USER_NAME       持有该锁的操作系统帐号                      PROCESS              操作系统的进程号,可以和v$process关联      LOCKED_MODE        锁模式,含义同v$lock.lmode
Dba_locks 和v$lock 内容差不多,略
V$session 如果某个session被因为某些行被其他会话锁定而阻塞,则该视图中的下面四个字段列出了这些行所属对象的相关信息ROW_WAIT_FILE# 等待的行所在的文件号ROW_WAIT_OBJ#  等待的行所属的object_idROW_WAIT_BLOCK# 等待的行所属的blockROW_WAIT_ROW#   等待的行在blcok中的位置
手工释放锁alter system kill session 'sid,serial#';
分享到:
评论

相关推荐

    深入浅出Oracle EBS之Forms开发初级.7z

    深入浅出Oracle EBS之Forms开发初级,

    深入浅出oracle ebs之核心功能.pdf

    《深入浅出Oracle EBS之核心功能:Distribution应用模块》一文由黄建华撰写,旨在详尽解析Oracle E-Business Suite(简称Oracle EBS)中Distribution模块的核心功能与最佳技术实践。该文档创建于2005年4月12日,最新...

    深入浅出Oracle:DBA入门、进阶与诊断案例

    深入浅出Oracle:DBA入门、进阶与诊断案例深入浅出Oracle:DBA入门、进阶与诊断案例深入浅出Oracle:DBA入门、进阶与诊断案例深入浅出Oracle:DBA入门、进阶与诊断案例深入浅出Oracle:DBA入门、进阶与诊断案例

    深入浅出Oracle: DBA入门、进阶与诊断案例.pdf

    《深入浅出Oracle:DBA入门、进阶与诊断案例》是一本专为数据库管理员(DBA)设计的Oracle技术指南。这本书详细介绍了Oracle数据库管理的基础知识,中级技能以及高级故障诊断技巧,旨在帮助读者从新手到专家逐步提升...

    深入浅出Oracle

    《深入浅出Oracle》这本书是Oracle数据库管理员(DBA)学习和提升技能的重要参考资料。它涵盖了Oracle数据库的基础知识、进阶技巧以及故障诊断方法,旨在帮助读者全面理解和掌握Oracle数据库的管理与维护。以下是对该...

    深入浅出Oracle EBS之Workflow实例详解.pdf

    深入浅出Oracle EBS之Workflow实例详解.pdf 深入浅出Oracle EBS之Workflow实例详解.pdf 深入浅出Oracle EBS之Workflow实例详解.pdf

    深入浅出Oracle.rar

    "深入浅出Oracle"这个压缩包文件显然是一份关于Oracle数据库的学习资料,可能是书籍的PDF电子版,旨在帮助读者全面理解Oracle的各个方面。 Oracle数据库的核心特性包括: 1. **数据存储与管理**:Oracle采用行式...

    深入浅出Oracle之Business Events实例详解

    深入浅出Oracle之Business Events实例详解深入浅出Oracle之Business Events实例详解

    oracle教程--深入浅出oracle学习资料

    Oracle教程——深入浅出Oracle学习资料 Oracle数据库系统是全球广泛应用的关系型数据库管理系统,由甲骨文公司(Oracle Corporation)开发。本教程旨在为初学者和有经验的IT专业人士提供全面、深入的Oracle知识,...

    深入浅出 Oracle+EBS+Forms开发指南_中级.7z

    深入浅出 Oracle+EBS+Forms开发指南_中级,深入浅出 Oracle+EBS+Forms开发指南_中级

    深入浅出Oracle分析函数

    《深入浅出Oracle分析函数》是一本专注于Oracle数据库中分析函数使用的专著。Oracle分析函数是数据库查询中不可或缺的一部分,尤其对于数据分析师和数据库管理员来说,掌握这些函数能极大地提高数据处理的效率和精度...

    深入浅出Oracle:DBA入门

    本书《深入浅出Oracle:DBA入门、进阶与诊断案例》由盖国强编著,由人民邮电出版社出版,旨在为初学者提供全面的Oracle数据库管理入门知识,并为有一定经验的DBA提供进阶技巧和实际案例分析。 首先,本书开篇可能会...

    深入浅出Oracle之EBS全模块设置详例

    根据提供的文档标题、描述以及部分内容,本文将详细阐述Oracle E-Business Suite (EBS) 全模块设置的具体步骤和技术要点,特别关注财务管理(FIN)、分销(DIS)与制造(MFG)应用模块的设置过程。 ### 定义客户化应用 #...

    深入浅出Oracle之Forms开发指南

    《深入浅出Oracle之Forms开发指南》是一本专注于Oracle企业资源规划(ERP)E-BUSINESS SUITE中的核心应用技术——Forms开发的书籍。作者黄建华在2008年首次发布并更新了该文档,旨在提供Oracle Forms的详细开发指导...

Global site tag (gtag.js) - Google Analytics