oracle数据库事务transaction锁lock模式思考之一
发表于:2025-02-01 作者:千家信息网编辑
千家信息网最后更新 2025年02月01日,前言数据库事务是oracle非常基础又极为重要的概念。之前已经介绍过相关的一些概念,相关文章见下:oracle产生事务transaction几种方式或方法 oracle事务隔离级别transacti
千家信息网最后更新 2025年02月01日oracle数据库事务transaction锁lock模式思考之一前言
前言
数据库事务是oracle非常基础又极为重要的概念。之前已经介绍过相关的一些概念,相关文章见下:
oracle产生事务transaction几种方式或方法
oracle事务隔离级别transaction isolation level初识
产生数据库事务时,必然会在数据库事务运行期间产生各种各样的锁。与锁相关的动态性能视图为v$lock,里面有个列lmode,即持锁模式或叫锁模式,其具体含义及取值
锁模式lmode可以有7种不同的取值,每个值到底是什么意思,具体含义见下
锁模式测试实践
创建测试表并插入记录
SQL> create table t_lockmode(a int,b int);Table created.SQL> insert into t_lockmode select 1,1 from dual;1 row created.SQL> commit;Commit complete.
row share
这种锁模式 允许 多个会话并发访问被锁定的表,但是不允许 其它会话以 exclusive排它模式锁定整个表这种锁模式也是锁模式 share update的同义词这种锁模式仍然存在是为了兼容 oracle旧版本--未加锁前的测试会话的持锁信息(可见数据库一直会持有各种锁,下述的锁是系统锁,而非用户锁)SQL> select addr,sid,type,lmode,request,block from v$lock where sid=73;ADDR SID TY LMODE REQUEST BLOCK---------------- ---------- -- ---------- ---------- ----------000000008D2498B8 73 AE 4 0 0000000008D249AE8 73 TO 3 0 0--测试会话加 row share锁模式SQL> lock table t_lockmode in row share mode;Table(s) Locked.--加锁模式 row share后的持锁信息SQL> /ADDR SID TY LMODE REQUEST BLOCK---------------- ---------- -- ---------- ---------- ----------000000008D2498B8 73 AE 4 0 0000000008D249AE8 73 TO 3 0 000007FE54C209CD8 73 TM 2 0 0 --lmode=2---其它会话可以row share锁模式并发访问表SQL> select sid from v$mystat where rownum=1; SID---------- 28SQL> lock table t_lockmode in row share mode;Table(s) Locked.SQL> rollback;Rollback complete.--其它会话可以 row exclusive锁模式 并发访问表SQL> lock table t_lockmode in row exclusive mode;Table(s) Locked.SQL> rollback;Rollback complete.---其它会话可以share锁模式并发访问表SQL> lock table t_lockmode in share mode;Table(s) Locked.SQL> rollback;Rollback complete.----其它会话可以 share row exclusive锁模式并发访问表SQL> lock table t_lockmode in share row exclusive mode;Table(s) Locked.SQL> rollback;Rollback complete.----其它会话不能以 exclusive锁模式并发访问表--卡住SQL> lock table t_lockmode in exclusive mode;SQL> /ADDR SID TY LMODE REQUEST BLOCK---------------- ---------- -- ---------- ---------- ----------000000008D2498B8 73 AE 4 0 0000000008D249AE8 73 TO 3 0 000007FE54C2042E0 73 TM 2 0 1
row exclusive
这种锁模式 同于row share,但是不允许其它会话以 share锁模式访问这种锁模式 在执行DML操作(update,insert,delete)会自动获取这种锁模式测试会话以row exclusive锁模式持有表SQL> lock table t_lockmode in row exclusive mode;Table(s) Locked.SQL> select addr,sid,type,lmode,request,block from v$lock where sid=73;ADDR SID TY LMODE REQUEST BLOCK---------------- ---------- -- ---------- ---------- ----------000000008D2498B8 73 AE 4 0 0000000008D249AE8 73 TO 3 0 000007FE54C2042E0 73 TM 3 0 0 --lmode=3--其它会话可以row share锁模式 并发访问表SQL> lock table t_lockmode in row share mode;Table(s) Locked.SQL> rollback;Rollback complete.--其它会话可以 row exclusive锁模式 并发访问表SQL> lock table t_lockmode in row exclusive mode;Table(s) Locked.SQL> rollback;Rollback complete.--其它会话 不能以share锁模式 并发访问表--卡住SQL> lock table t_lockmode in share mode;^Clock table t_lockmode in share mode *ERROR at line 1:ORA-01013: user requested cancel of current operation--其它会话 不能以share row exclusive锁模式 并发访问表SQL> lock table t_lockmode in share row exclusive mode;^Clock table t_lockmode in share row exclusive mode*ERROR at line 1:ORA-01013: user requested cancel of current operation--其它会话 不能以exclusive锁模式 并发访问表SQL> lock table t_lockmode in exclusive mode;^Clock table t_lockmode in exclusive mode *ERROR at line 1:ORA-01013: user requested cancel of current operation
share
这种锁模式 允许 多个会话并发查询,但是不允许 对于锁定表的update操作测试会话以share锁模式持有表SQL> lock table t_lockmode in share mode;Table(s) Locked.SQL> select addr,sid,type,lmode,request,block from v$lock where sid=73;ADDR SID TY LMODE REQUEST BLOCK---------------- ---------- -- ---------- ---------- ----------000000008D2498B8 73 AE 4 0 0000000008D249AE8 73 TO 3 0 000007FE54C209CD8 73 TM 4 0 0 --lmode=4--其它会话可以row share锁模式 并发访问表SQL> lock table t_lockmode in row share mode;Table(s) Locked.SQL> rollback;Rollback complete.--其它会话不能以 row exclusive锁模式 并发访问表SQL> lock table t_lockmode in row exclusive mode;^Clock table t_lockmode in row exclusive mode*ERROR at line 1:ORA-01013: user requested cancel of current operation--其它会话可以 share锁模式 并发访问表SQL> lock table t_lockmode in share mode;Table(s) Locked.SQL> rollback;Rollback complete.---其它会话 不允许以 share row exclusive锁模式 并发访问表SQL> lock table t_lockmode in share row exclusive mode;^Clock table t_lockmode in share row exclusive mode*ERROR at line 1:ORA-01013: user requested cancel of current operation---其它会话 不允许以 exclusive锁模式 并发访问表SQL> lock table t_lockmode in exclusive mode;^C lock table t_lockmode in exclusive mode*ERROR at line 1:ORA-01013: user requested cancel of current operation
share row exclusive
这种锁模式 用于查看整个表,允许 其它会话查看表的数据,但是不允许其它会话 以share锁模式获取表 ,也不允许 其它会话update被锁定表这种锁模式 允许 对于锁定表的查询,但不允许 对于锁定表的其它任何操作测试会话以 share row exclusive锁模式持有表SQL> lock table t_lockmode in share row exclusive mode;Table(s) Locked.SQL> /ADDR SID TY LMODE REQUEST BLOCK---------------- ---------- -- ---------- ---------- ----------000000008D2498B8 73 AE 4 0 0000000008D249AE8 73 TO 3 0 000007FE54C209CD8 73 TM 5 0 0--其它会话 允许 以row share锁模式 并发访问表SQL> lock table t_lockmode in row share mode;Table(s) Locked.SQL> rollback;Rollback complete.--其它会话 不允许 以row exclusive锁模式 并发访问表SQL> lock table t_lockmode in row exclusive mode;^Clock table t_lockmode in row exclusive mode*ERROR at line 1:ORA-01013: user requested cancel of current operation---其它会话 不允许 以share锁模式 并发访问表SQL> lock table t_lockmode in share mode;^Clock table t_lockmode in share mode*ERROR at line 1:ORA-01013: user requested cancel of current operation---其它会话 不允许 以share row exclusive锁模式 并发访问表SQL> lock table t_lockmode in share row exclusive mode;^Clock table t_lockmode in share row exclusive mode*ERROR at line 1:ORA-01013: user requested cancel of current operation---其它会话 不允许以 exclusive锁模式 并发访问表SQL> lock table t_lockmode in exclusive mode;^Clock table t_lockmode in exclusive mode*ERROR at line 1:ORA-01013: user requested cancel of current operation
exclusive
这种锁模式 允许 对于锁定表的查询,但不允许 对于锁定表的其它任何操作--测试会话以 exclusive锁模式持有表SQL> lock table t_lockmode in exclusive mode;Table(s) Locked.SQL> /ADDR SID TY LMODE REQUEST BLOCK---------------- ---------- -- ---------- ---------- ----------000000008D2498B8 73 AE 4 0 0000000008D249AE8 73 TO 3 0 000007FE54C2042E0 73 TM 6 0 0 --lmode=6--其它会话 不允许以 row share锁模式 并发访问表SQL> lock table t_lockmode in row share mode;^Clock table t_lockmode in row share mode*ERROR at line 1:ORA-01013: user requested cancel of current operation---其它会话不允许 以row exclusive锁模式 并发访问表SQL> lock table t_lockmode in row exclusive mode;^Clock table t_lockmode in row exclusive mode*ERROR at line 1:ORA-01013: user requested cancel of current operation---其它会话不允许以 share锁模式 并发访问表SQL> lock table t_lockmode in share mode;^Clock table t_lockmode in share mode*ERROR at line 1:ORA-01013: user requested cancel of current operation---其它会话不允许 以share row exclusive锁模式 并发访问表SQL> lock table t_lockmode in share row exclusive mode;^Clock table t_lockmode in share row exclusive mode*ERROR at line 1:ORA-01013: user requested cancel of current operation--其它会话不允许 以exclusive锁模式 并发访问表SQL> lock table t_lockmode in exclusive mode;^Clock table t_lockmode in exclusive mode*ERROR at line 1:ORA-01013: user requested cancel of current operation
锁模式之间的的兼容性图
小结
exclusive锁模式最牛逼,它是唯我独尊,独对排它访问,它一占用表锁资源,其它会话只能等待
row share(share update)锁模式相对而言最温和,它基本和所有的锁模式可以并存,只是不允许exclusive锁模式
share row exclusive锁模式虽然没有exclusive锁模式这么牛逼,它可以排第二种严厉锁模式,它只能兼容row share(share update)锁模式
row exclusive及share锁模式排位在share row exclusive之后,它可以兼容3种锁模式,不兼容余下2种锁模式
培训课件
(收费20元)
联系方式
模式
测试
事务
数据
数据库
查询
信息
含义
多个
方式
概念
不同
温和
重要
唯我独尊
之间
兼容性
前言
动态
只是
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
近年来数据库技术发展趋势图
至晟互联网科技
查询数据库方式
删除一个数据库的指令
接入海康存储服务器需要哪些要求
数据库 getdate
软件开发平台实现路径论文
ai服务器市占率
网络安全保护管理制度
数据库的函数怎么复制
步步网络技术
360视频软件开发
d开头的邮件服务器
action对魔忍服务器错误
软件开发需要有审美吗
网络安全绘画作品图片一等奖
济南职业学院网络技术主要学什么
c操作sqlite数据库
服务器磁盘配额问题
域ou 文件服务器
天府杯网络安全大赛前三
网络安全法针对等保
95年后信息网络安全是
第一章网络安全
jsp访问数据库运行空白
bash 服务器
德森科技 互联网
软件开发未来发展前景
日照网络安全宣传
吕梁软件开发服务价格