oracle数据库事务transaction锁lock模式思考之一
发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,前言数据库事务是oracle非常基础又极为重要的概念。之前已经介绍过相关的一些概念,相关文章见下:oracle产生事务transaction几种方式或方法 oracle事务隔离级别transacti
千家信息网最后更新 2026年11月02日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安全错误
数据库的锁怎样保障安全
苏州找大状互联网科技有限公司
互联网科技卖菜
菲比寻常互联网科技
科技互联网创业计划书
青海省互联网新科技
移动互联网科技股
全球顶尖互联网科技公司
互联网为啥属于高科技
赶超互联网科技 微信多开
翼展科技 首家互联网医院
互联网在线教育科技创业
烟台灵鸽互联网科技有限公司
沐思想互联网科技有限公司
信承诺互联网科技有限公司
福建互联网展示科技馆设计
福州德业互联网科技
互联网金融运营模式中的金融科技
长沙渺峰互联网科技有限公司
唐山双旺合互联网科技产业园
互联网科技大佬云集
互联网科技工作委员会副主任毛军
腾讯阿里互联网科技
中国互联网科技发展
致聘互联网科技
海南科技产业互联网平台
武汉健翔互联网络科技有限公司
互联网科技大奖都有哪些公司
迪庆互联网科技招生
互联网科技数字货币
东风日产互联网科技公司叫什么