问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
你好,欢迎来到懂视!登录注册
当前位置: 首页 - 正文

oracle 锁定机制是什么?

发布网友 发布时间:2022-04-27 00:40

我来回答

2个回答

懂视网 时间:2022-05-02 16:42

在现代的多用户多任务系统中,必然会出现多个用户同时访问共享的某个对象,这个对象可能是表,行,或者内存结构,为了解决多个用户并发性访问带来的数据的安全性,完整性及一致性问题,必须要有一种机制,来使对这些共享资源的并发性访问串行化,oracle中的锁就可以提供这样的功能,当事务在对某个对象进行操作前,先向系统发出请求,对其加相应的锁,加锁后该事务就对该数据对象有了一定的控制权限,在该事务释放锁之前,其他的事务不能对此数据对象进行更新操作(可以做select动作,但select 利用的是undo中的前镜像数据了).
Oracle锁的分类
Oracle锁基本上可以分为二类
a:共享锁(share locks)? 也称读锁,s锁
b:排它锁 (exclusive locks) 也称写锁,x锁
在数据库中有两种基本的锁类型:排它锁(Exclusive Locks,即X锁)和共享锁(Share Locks,即S锁)。当数据对象被加上排它锁时,其他的事务不能对它读取和修改。加了共享锁的数据对象可以被其他事务读取,但不能修改。数据库利用这两种基本的锁类型来对数据库的事务进行并发控制。?
按锁保护的内容分类
oracle提供多粒度封锁机制,按保护对象来分,据此又可以分为
a:dml锁, data locks 数据锁,用来保护数据的完整性和一致性
b:ddl锁, dictionary locks 字典锁,用来保护数据对象的结构,如table,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 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操作产生不同类型的TM锁。如表1所示。
和锁相关的性能视图介绍
v$lock
SID????????? 会话的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 mode
5级锁即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 Exclusive
mode
ID1,ID2的取值含义根据type的取值而有所不同
对于TM 锁
ID1表示被锁定表的object_id 可以和dba_objects视图关联取得具体表信息,ID2 值为0
对于TX 锁
?ID1以十进制数值表示该事务所占用的回滚段号和事务槽slot number号,其组形式:
?0xRRRRSSSS,RRRR=RBS/UNDO NUMBER,SSSS=SLOT NUMBER
ID2 以十进制数值表示环绕wrap的次数,即事务槽被重用的次数
?????????????????????????????????????????????
v$locked_object
XIDUSN?????????????? 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_id
ROW_WAIT_BLOCK# 等待的行所属的block
ROW_WAIT_ROW#?? 等待的行在blcok中的位置
手工释放锁
alter system kill session ‘sid,serial#‘;

?


select from v$lock;
select
from v$locked_objecit;
select * from v$session;
alter system kill session ‘sid,serial$‘

锁表进程 的几种方法
1首先要查看被锁的信息。
查询语句为select from v$locked_object;
可以查到以下字段可以查看到一些锁表者的操作信息?
SESSION_ID :我们需要在v$session表中查看的 sid 值
ORACLE_USERNAME :锁表者使用的oracle账号 ?
OS_USER_NAME:锁表这操作系统的用户名称
2、通过上面三点我们可以锁定到部分锁表者。
如果无法确定可以再查看select
from v$session t where sid = ‘572‘这里的sid就是我们上面v$locked_object表中查到的SESSION_ID 可以查到很多相关字段,我们只查看我们需要处理事务的几个字段
sid ,SERIAL# 这两个字段是用来杀进程的字段。
PROGRAM 可以查看到使用者使用的工具
PREV_HASH_VALUE可以通过这个字段在查看出哪个sql语句执行的锁表
3、通过select * from v$sql where hash_value =‘PREV_HASH_VALUE’可以查看到相关锁表语句。
4、确定可以去掉的不影响其他业务的语句可以杀掉的话可以执行
ALTER system KILL session ‘2281,27935‘;这里的这两个数字分别是sid ,SERIAL# 。
5、正常情况下到这一步就可以完成相关解锁的操作,如果提示无法操作可以查看
select pro.spid from v$session ses,v$process pro where ses.sid=1335 and ses.paddr=pro.addr;?
这里sid就是上面1的 SESSION_ID 。
查出 spid 后再在Linux中查看 相关进程
ps -ef|grep? spid
sid是上面的sid然后可以杀掉这个进程
KILL -9 ‘刚才查出的SPID‘
================首先查找阻塞的用户====================

SELECT /+ rule / s.username,
decode(l.type,‘TM‘,‘TABLE LOCK‘,
‘TX‘,‘ROW LOCK‘,
NULL) LOCK_LEVEL,
o.owner,o.object_name,o.object_type,
s.sid,s.serial#,s.terminal,s.machine,s.program,s.osuser
FROM v$session s,v$lock l,dba_objects o
WHERE l.sid = s.sid
AND l.id1 = o.object_id(+)
AND s.username is NOT Null

--==========kill 掉那个进程==============================
alter system kill session ‘sid,serial#‘;

--==========如果还没释放,杀掉对应的OS进程===============
kill -s 15 pid
--==========清除缓存=====================================
alter system set events = ‘immediate trace name flush_cach

oracle锁的机制

标签:外键   语句   rss   位置   data   linux   dia   ddr   执行   

热心网友 时间:2022-05-02 13:50

大数据量并发处理时,为了解决数据不准确的问题而采取的机制 例如:一条数据,有一个进程更新其中的数据,而另外一个进程则要求删除它 这时就看谁先开始进行操作,操作的时候将数据锁定不允许其他也需要锁定的进程执行操作
声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:11247931@qq.com
锦州的住房公积金应该怎么才能提取的啊? 锦州不知公积金可以提取吗,具体地点是哪 冷静期过一个月以后还生效吗 签订的离婚协议书能无效吗 30天冷静期之间离婚协议书签有效吗? 那么屋里20度给宝宝盖什么 幼儿园20度室温盖多少被子 求黑塔利亚米英同人游戏Pain&Gain 黑塔利亚米英pain&gain怎么存档 求APH米英同人游戏<pain&gain> 海量数据库解决方案的作者简介 tcl电视l32f2350b怎么投屏当地视频 TCL电视V8−MS88101−LF1V066+怎么投屏 白糖期货是什么意思?我想做白糖期货,对这个不太懂,哪位可以帮我解释下,谢谢好心人了。 目前白糖期货主力合约是哪个 怎么查看对方微信是否是本人微信 白糖期货合作需要什么条件 请问目前白糖期货主力合约是哪个?什么时候会换月? 淘宝关注店铺消失了 自己的淘宝店分享会到哪里显示? 白糖期货合约的交割品是什么? 用手机如何把我的淘宝店铺分享给朋友 白糖期货合约一手多少吨 淘宝的帐单可以删除吗 白糖期货是每天结算的吗?还是可以几个月内结算? 那那些月份合约是什么意思 微信怎么看是不是对方好友? 淘宝如何删除相关交易信息? 微信怎么看是不是被对方删了 淘宝分享好店怎么分享 问下各位,怎么把淘宝的账单记录删除...(不是隐藏) iphone怎么传视频到电脑上 Oracle中的共享锁和行共享锁有什么区别啊? oracle锁 oracle数据库的锁机制,与锁问题的处理? oracle 数据库 为什么锁表 平时使用oracle时,为什么会锁表 怎么在电脑上看iphone的文件 关于Oracle数据库锁的问题,表锁,行锁,共享和排他的问题,跪求大神解答... oracle中的页锁是什么 小狗和妈妈一起怎么画? oracle锁表问题 oracle数据库访问中要控制加锁怎样实现 关于oracle锁,buffer,session机制的一个问题 oracle 行级锁和数据块的关系? 小狗的简笔画的图案有哪些 Oracle数据库中为什么一到月初执行过程就会锁表 简单又漂亮小狗怎么画,可爱的小狗简笔画教程 我和我的家人,妈妈,哥哥,奶奶,爸爸,我还有小狗,怎么画? 怎样画一只简笔画的小狗 狗妈妈带三个狗宝宝的看图写话
  • 焦点

最新推荐

猜你喜欢

热门推荐