您好、欢迎来到现金彩票网!
当前位置:彩运网 > 封锁粒度 >

oracle数据库锁的概念

发布时间:2019-07-27 22:36 来源:未知 编辑:admin

  为了确保并发用户在存取同一数据库对象时的正确性(即无丢失修改、可重复读、不读

  “脏”数据),数据库中引入了锁机制。基本的锁类型有两种:排它锁(Exclusive locks 记

  排它锁:若事务T对数据D加X锁,则其它任何事务都不能再对D加任何类型的锁,

  直至T 释放D 上的X 锁;一般要求在修改数据前要向该数据加排它锁,所以排它锁又称为

  共享锁:若事务T对数据D加S 锁,则其它事务只能对D加 S锁,而不能加X 锁,直

  至 T 释放 D 上的 S 锁;一般要求在读取数据前要向该数据加共享锁,所以共享锁又称为读

  (5) PCM locks(并行高速缓存管理锁):用于OPS(并行服务器)中。

  本文主要讨论DML(也可称为data locks,数据锁)锁。从封锁粒度(封锁对象的大小)

  许多对Oracle不太了解的技术人员可能会以为每一个 TX锁代表一条被封锁的数据行,

  其实不然。 TX的本义是Transaction (事务),当一个事务第一次执行数据更改(Insert、 Update、

  直至该事务结束(执行COMMIT 或ROLLBACK操作)时,该锁才被释放。所以,一个TX

  在 Oracle 的每行数据上,都有一个标志位来表示该行数据是否被锁定。Oracle 不象其

  它一些 DBMS(数据库管理系统)那样,建立一个链表来维护每一行被加锁的数据,这样

  就大大减小了行级锁的维护开销,也在很大程度上避免了其它数据库系统使用行级封锁时经

  常发生的锁数量不够的情况。数据行上的锁标志一旦被置位,就表明该行数据被加 X 锁,

  表是由行组成的,当我们向某个表加锁时,一方面需要检查该锁的申请是否与原有的表

  级锁相容;另一方面,还要检查该锁是否与表中的每一行上的锁相容。比如一个事务要在一

  个表上加 S 锁,如果表中的一行已被另外的事务加了 X 锁,那么该锁的申请也应被阻塞。

  如果表中的数据很多,逐行检查锁标志的开销将很大,系统的性能将会受到影响。为了解决

  这个问题,可以在表级引入新的锁类型来表示其所属行的加锁情况,这就引出了“意向锁”

  意向锁的含义是如果对一个结点加意向锁,则说明该结点的下层结点正在被加锁;对任

  一结点加锁时,必须先对它的上层结点加意向锁。如:对表中的任一行加锁时,必须先对它

  所在的表加意向锁,然后再对该行加锁。这样一来,事务对表加锁时,就不再需要检查表中

  意向共享锁(Intent Share Lock,简称 IS 锁):如果要对一个数据库对象加S锁,首先

  另外,基本的锁类型(S、X)与意向锁类型(IS、IX)之间还可以组合出新的锁类型,

  理论上可以组合出4种,即:S+IS,S+IX,X+IS,X+IX,但稍加分析不难看出,实际上只

  有 S+IX 有新的意义,其它三种组合都没有使锁的强度得到提高(即:S+IS=S,X+IS=X,

  X+IX=X,这里的“=”指锁的强度相同)。所谓锁的强度是指对其它锁的排斥程度。

  加 SIX 锁,表示对它加 S 锁,再加 IX 锁,即 SIX=S+IX。例如:事务对某个表加 SIX 锁,

  则表示该事务要读整个表(所以要对该表加S 锁),同时会更新个别行(所以要对该表加 IX

  这样数据库对象上所加的锁类型就可能有5 种:即S、X、IS、IX、SIX。

  具有意向锁的多粒度封锁方法中任意事务 T 要对一个数据库对象加锁,必须先对它的

  上层结点加意向锁。申请封锁时应按自上而下的次序进行;释放封锁时则应按自下而上的次

  序进行;具有意向锁的多粒度封锁方法提高了系统的并发度,减少了加锁和解锁的开销。

  Oracle的 DML锁(数据锁)正是采用了上面提到的多粒度封锁方法,其行级锁虽然只

  有一种(即X锁),但其 TM锁(表级锁)类型共有5种,分别称为共享锁(S锁)、排它锁

  (X 锁)、行级共享锁(RS 锁)、行级排它锁(RX 锁)、共享行级排它锁(SRX 锁),与上面提到的S、X、IS、IX、SIX 相对应。需要注意的是,由于Oracle在行级只提供X锁,所

  以与RS锁(通过SELECT … FOR UPDATE语句获得)对应的行级锁也是X锁(但是该行

  下表为Oracle数据库TM锁的相容矩阵(Y=Yes,表示相容的请求; N=No,表示不相

  语句时,系统自动在所要操作的表上申请表级RS锁(SELECT…FOR UPDATE)或 RX锁

  (INSERT、UPDATE、DELETE),当表级锁获得后,系统再自动申请 TX 锁,并将实际锁

  定的数据行的锁标志位置位(指向该TX锁);另一方面,程序或操作人员也可以通过 LOCK

  TABLE 语句来指定获得某种类型的TM锁。下表总结了 Oracle中各 SQL语句产生 TM锁的

  DELETE),在表级获得的只是意向锁(RS或 RX),其真正的封锁粒度还是在行级;另外,

  Oracle数据库的一个显著特点是,在缺省情况下,单纯地读数据(SELECT)并不加锁, Oracle

  通过回滚段(Rollback segment)来保证用户不读“脏”数据。这些都极大地提高了系统的

  由于意向锁及数据行上锁标志位的引入,极大地减小了 Oracle 维护行级锁的开销,这些技术的应用使Oracle 能够高效地处理高度并发的事务请求。 3 Oracle 多粒度封锁机制的监控。

  Oracle锁表         周六加班,临下班时改了下数据库,保存数据时发现项目卡住了。一时以为是项目出了Bug,最后经同事排查,发现是我把项目所用数据库锁表了。What?锁表?之前只听说过这词...博文来自:u012369154的专栏

  一、并发访问带来的问题数据库是一个多用户使用的共享资源。当多个用户并发地存取数据时,在数据库中就会产生多个事务同时存取同一数据的情况。若对并发操作不加控制就可能会读取和存储不正确的数据,破坏数据库的一...博文来自:cc_0101的博客

  java多线程:锁java的多线程中的锁是干嘛的呢?在网上找了很多博客,大都是很专业的语言,让我一时间摸不着头脑。下面分三个部分来总结多线程中的锁的概念。一,基础概念:多线程在运行的时候可能会遇到这样...博文来自:Dacc123的博客

  如果遇到这样的情况第一步(别忘打开服务了,服务名OracleServiceORCL)输入数据库管理员用户名和密码用户名是SYSTEM固定的,密码应该是你安装时设置的密码第二步:解锁ALERTUSER用...博文来自:yang03_26的博客

  首先先了解一下进程和线程的关系,还有它们的区别。进程是一个正在执行的程序,是向CPU申请资源的,进程之间数据相互独立,一个进程至少有一个线程。线程是进程中的单一的顺序控制流程,也可以叫做最小控制单元,...博文来自:yuranhzw123的博客

  为了解决数据库被并发事物访问所带来的问题,数据库提供了锁机制来应对。数据库锁根据锁定的对象不同,可以分为表级锁和行级锁,表级锁锁定的对象是整张表,行级锁锁定的对象是特定的数据行;根据锁之间的关系可以分...博文来自:要争气

  非原创,引用自:五种表级排他锁的总结和归纳Bysting,on十一月6th,2010Oracle的五种表级锁很容易弄混,下面介绍这如果一个事务拥...博文来自:那海蓝蓝的博客

  修改数据库中一个表中的其中一条记录的时候,提示表被锁,以下是解决这个问题的方法:1、Oracle数据库切换为管理员用户,然后运行以下语句selectsess.sid,sess.serial#,lo.o...博文来自:weirdoLong

  一、锁的概念锁是数据库用来控制共享资源并发访问的机制。 锁用于保护正在被修改的数据 直到提交或回滚了事务之后,其他用户才可以更新数据 二、锁定的优点一致性-一次只允许一个用户修改数据 完整性-为所有用...博文来自:茅坤宝骏氹的博客

  锁:是用来保护正在被修改的数据,直到提交或者回滚事务之后,其他用户才可以更新数据。锁的优点是:一致性:一次只允许一个用户修改数据。完整性:为所有用户提供正确的数据。也就是说,当一个用户修改并且保存所做...博文来自:伴之则暖的博客

  oracle数据库被锁的原因及处理(一般是用户的密码输入次数超过限制)   查看那些用户连接到当前的数据库信息:rname,       cp...博文来自:静水流深

  在并发编程中,经常会遇到多个线程访问同一个共享资源,这时候我们要保证数据的一致性,那么就要用到了锁的概念,给资源加上锁,拿到锁所有权的人才能够进行操作共享资源,没有拿到锁的线程需要等待,等锁的所有权放...博文来自:奋斗的少年

  诚然,我们一提到并发编程,首先想到的可能应该就是synchronized,无可厚非其作用。大多数人都会称呼其为重量级锁,但是随着JAVA1.6对synchronized的优化,其变得不再那么重了。1....博文来自:的博客

  线程锁的基本概念与简单封装1.在多线程环境中,当我们需要保持线程同步时,通常通过锁来实现。互斥锁的使用过程中,主要有第一:线程锁的初始化,pthread_mutex_init第二:线程锁的释放,pth...博文来自:一个人的旅行的博客

  乐观锁乐观锁大多是基于数据版本记录机制实现,一般是给数据库表增加一个version字段。读取数据时,将此版本号一同读出,之后更新时,对此版本号加一。此时将提交数据的版本数据与数...博文来自:灰灰是菇凉

  Lock接口出现的背景:synchronized关键字存在着一定的缺陷:1、阻塞式:当某一个线程获取锁时,并执行该代码块,其他线程只能够一直等待,等待取锁的线、效率底:一但线程执行slee...博文来自:seesun2012的专栏

  事务1.说明一组SQL,一个逻辑工作单位,执行时整体修改或者整体回退。2.事务相关概念1)事务的提交和回滚:COMMIT/ROLLBACK2)事务的开始和结束开始事务:连接到数据...博文来自:dhklsl的专栏

  今天在服务器上创建新数据库时,由于某原因导致创建完后的sys、system等管理员用户被锁了,无法登陆,现记录解决办法:1.运行——cmd——sqlplus/nologsqlgt;conn/...博文来自:MR.J的博客

  什么是分布式锁?在回答这个问题之前,我们先回答一下什么是锁。普通的锁,即在单机多线程环境下,当多个线程需要访问同一个变量或代码片段时,被访问的变量或代码片段叫做临界区域,我们需要控制线程一个一个的顺序...博文来自:Pure Pleasure

  表数据的操作(DML):   插入:   修改:   删除:   合并:大数据操作的时候,数据仓库   插入:使用values只能插入一行数据   插入空值:      1)不写      2)插入...博文来自:你只不过是看起来很努力罢了

  最近部署项目,启动之后有一个账户一直被锁。数据库账户被锁一般是连接用户密码错误次数超过限制,被锁死。查找原因:1.查看连接配置的用户名密码是否有误。这个如果有误,改一下配置就好了。2.查看是否因为自己...博文来自:q105054的博客

  同步锁介绍对于非static方法,同步锁就是this。对于static方法,使用当前方法所在类的字节码对象(A.class)。同步代码块:语法synchronized(同步锁){需要同步操作的代码}同...博文来自:simple的博客

  ORACLE六大锁模式       今天我要说的是Oracle共享锁,首先我们用了解共享锁,说白了就是你的表被加上共享锁的时候你只能执行select * ...博文来自:的博客

  ORACLEEBS操作某一个FORM界面,或者后台数据库操作某一个表时发现一直出于假死状态,可能是该表被某一用户锁定,导致其他用户无法继续操作--锁表查询SQLselectobject_name,...博文来自:记忆

  在项目应用中,在执行某些操作时不希望别人对表进行操作,这时会用到oracle中的锁表命令。下明是我写的小测试实例,帮组大家实现java中控制oracle锁表操作。首先创建连接数据库的方法,在提示部分打...博文来自:iteye_12724的博客

  一、进程与线)在传统的操作系统中,程序并不能独立运行,作为资源分配和独立运行的基本单位都是进程。在未配置OS的系统中,程序的执行方式是顺序执行,即必须在一个程序执行完后,才允许另一个程序执...博文来自:徐刘根的博客

  简介直接使用最大权限的数据库用户执行第一条查询sql,然后根据查询到的数据,填写第二条解锁数据的对应字段进行解锁。注:执行sql的用户权限必须足够大才行。 锁表--锁表查询: selectb.sid,...博文来自:的博客

  (1)概念:   数据库是一个多用户使用的共享资源。当多个用户并发地存取数据时,在数据库中就会产生多个事务同时存取同一数据的情况。若对并发操作不加控制就可能会读取和存储不正确的数据,破坏数据库的一致性...博文来自:zdplife的专栏

  可重入锁就是一个类的A、B两个方法,A、B都有获得统一把锁,当A方法调用时,获得锁,在A方法的锁还没有被释放时,调用B方法时,B方法也获得该锁。这种情景,可以是不同的线程分别调用这个两个方法。也可是同...博文来自:u013452335的博客

  1、事务  (1)ACID:原子性,一致性(事务执行前后满足约束条件,例如转账前后总钱数不变),隔离性,持久性  几种不一致现象:丢失修改(readuncommitted即可避免,因为加了写锁)、脏读...博文来自:weixin_39420024的博客

  Java中的线程是基于操作系统的原生线程模型来实现的,因此在调度上是取决于操作系统层面。    线程和进程间的区别是在      进程是系统进行资源分配和调度的一个独立单位.    线程则是进程的...博文来自:coding to peak

  根据保护对象的不同,Oracle数据库锁可分为:1)DMLlock(datalocks,数据锁):用于保护数据的完整性。2)DDLlock(dictionarylocks,字典锁):用于保护数据库对象...博文来自:花无涯的博客

  oracle数据库用户名密码忘记、用户被锁定的解决方法点击开始菜单,输入cmd打开DOS窗口.输入:sqlplus/nolog回车。输入:conn/assysdba回车,返回“已连接”。输入:“alt...博文来自:zxjdC的博客

http://funnyland.net/fengsuolidu/675.html
锟斤拷锟斤拷锟斤拷QQ微锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷微锟斤拷
关于我们|联系我们|版权声明|网站地图|
Copyright © 2002-2019 现金彩票 版权所有