• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

EPYC

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

数据库的锁 封锁等级一. 基本概念

oracle数据库中有四种锁,一种为排他锁和共享锁,加了排他锁之后数据库无法被他人读取或者修改,加了共享锁可以被读取但是无法修改。

数据库锁可以分为几类:  DML锁用于保护数据完整性,DDL锁保护数据库对象的结构,内部锁用来保护数据库的内部结构 。

DML锁又可以分为TM锁和TX锁,其中TM锁称为表级锁,TX称为事务锁或者行级锁,此种类型的锁一般都自动产生,当数据库发生TX锁等待时,不及时处理会导致oracle数据库挂起,或者死锁的产生(ORA-60)

 

 

   举例:如何使悲观锁发挥作用(排他锁)

                   select  * from tab1 for  update

 

                   select ..for update (nowait)用来检测数据行是否被锁

 

 

 

此时其他用户在对数据库进行dml或者ddl操作时都会返回错误信息ORA -00054,oracle建议使用悲观锁,乐观锁在select并update完成的这段时间内依然可能会被修改。

 

oracle事务的封锁等级:

一级:事务T在修改数据的时候对其加x锁,在修改完以后解锁,同时可以恢复事务T。

二级:在一级协议的基础上,事务T在读取数据前就加上s锁,在读取完成后再释放,避免了脏数据。

三级:在一级协议的基础上,事务T在读取数据之前就加上s锁,在事务解释后才会释放,避免了脏数据,保证数据可恢复,同时防止了不可重复读。

 

以上为事务锁,封锁机制的基础知识,后续详细解释     锁如何实现事务的隔离控制

posted on 2021-10-19 14:13  EPYC  阅读(468)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3