oracle数据库事务transaction锁lock模式思考之一
发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,前言数据库事务是oracle非常基础又极为重要的概念。之前已经介绍过相关的一些概念,相关文章见下:oracle产生事务transaction几种方式或方法 oracle事务隔离级别transacti
千家信息网最后更新 2025年11月07日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安全错误
数据库的锁怎样保障安全
软件开发文档背景图纯色
甘肃公安厅网络安全宣传周
欧姆龙dm区数据库
网络安全等级保护认证
郑州网络安全系统品牌
北京机房服务器报价
如何建数据库dblink
都中国网络安全
政法系统软件开发企业
正规软件开发厂家
众人网络技术有限公司
广州存储服务器散热器生产商
嘀嗒软件开发票
无人驾驶技术网络安全保障
福建回收通讯服务器设备
固原软件开发哪家值得信赖
数据库脱敏实战技术
数据库哪几部分组成
无锡哪里可以学习网络安全
网络安全流量清洗设备
魅影网络软件开发有限公司
正规软件开发厂家
手机的网络服务器在哪里
洛克王国服务器大全
我的世界服务器怎样快速获得钻石
sql 访问远程数据库
人文地理工作数据库
数据库url字符编码格式
优就业网络安全培训环境好不好
oracle数据库连接池怎么用