oracle中的锁机制

数据库操作语句的分类

DDL:数据库模式定义语言,关键字:create
DML:数据操纵语言,关键字:Insert、delete、update
DCL:数据库控制语言 ,关键字:grant、remove
DQL:数据库查询语言,关键字:select

oracle中的锁机制。

概念:数据库是多用户同时使用的资源 多个线程访问的情况下 需要根据分析试剂情况进行加锁。

悲观锁 乐观锁只是概念。
悲观锁即为独占锁,A线程操作a表a1数据,其他线程需等待A的事务提交后才能操作a1数据。

第一步:通过管理员权限用户查询被锁表信息
如果怀疑表被锁了,或者事务未被正常关闭,在Oracle数据库中我们可以通过以下语句进行查询获取相关信息:

select t2.username,
    ​       t2.sid,
    ​       t2.serial#,
    ​       t3.object_name,
    ​       t2.OSUSER,
    ​       t2.MACHINE,
    ​       t2.PROGRAM,
    ​       t2.LOGON_TIME,
    ​       t2.COMMAND,
    ​       t2.LOCKWAIT,
    ​       t2.SADDR,
    ​       t2.PADDR,
    ​       t2.TADDR,
    ​       t2.SQL_ADDRESS,
    ​       t1.LOCKED_MODE
      from v$locked_object t1, v$session t2, dba_objects t3
     where t1.session_id = t2.sid
       and t1.object_id = t3.object_id
     order by t2.logon_time;

eg: 表锁和行锁的例子

表锁:

线程1select * from user for update; 
线程2update user set name=123’ 堵塞 
update user set name=123where id = 1 堵塞

user表被锁定,其他进程无法修改表中数据,只能查询。

行锁:

线程1select * from user where id = 1 for update; 
线程2update user set name=123’ 堵塞 
update user set name=123where id = 1 堵塞 
update user set name=123where id = 2 正常 
user表中id=1数据被锁定,其他进程无法修改user该条数据。

锁的模式
v$locked_object中的LOCKED_MODE字段表示锁的模式,oracle中锁的模式有如下几种:

0:none 
1:null 空 
2:Row-S 行共享(RS):共享表锁,sub share 
3:Row-X 行独占(RX):用于行的修改,sub exclusive 
4:Share 共享锁(S):阻止其他DML操作,share 
5:S/Row-X 共享行独占(SRX):阻止其他事务操作,share/sub exclusive 
6:exclusive 独占(X):独立访问使用,exclusive
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值