0%

oracle11g 的锁

锁的概念

  • 锁是数据库用来控制共享资源并发访问的机制
  • 锁是用于保护正在修改的数据
  • 提交或者回滚事务之后,其他用户才可以更新数据

锁的优点

  • 一致性:一次只允许一个用户修改数据

  • 完整性:为所有用户提供正确的数据,如果一个用户进行了修改并保存,所做的修改反映给所有用户

  • 并行性:允许多个用户访问同一数据

    行级锁

  • 对正在被修改的行进行锁定,其他用户可以访问除被锁定的行以外的行

  • 在使用以下语句时,oracle会自动应用行级锁

    • INSERT
    • UPDATE
    • DELETE
    • SELECT … FOR UPDATE 允许用户一次锁定多条记录进行更新
  • 使用COMMIT或者ROLLBACK释放锁

  • 使用动态视图v$lock查看锁

表级锁

  • 锁定整个表,限制其他用户对表的访问
    • 共享锁 (ROW SHARE):禁止拍他锁定表
    • 行排锁(ROW EXCLUSIVE):禁止使用拍他锁和共享锁
    • 共享锁(SHARE)
      • 锁定表,仅允许其他用户查询表中数据
      • 禁止其他用户插入、更新、删除行
      • 多个用户可以同时在同一个表上应用此锁
    • 共享行拍他锁(SHARE ROW EXCLUSIVE):禁止使用共享锁及高级锁
    • 排他(EXCLUSIVE):限制最高的锁,仅允许用户查询该表的行,禁止修改和锁定表。

死锁

  • 当两个事务互相等待对方释放资源时
  • Oracle会自动检测死锁,并通过结束其中一个事务来解决死锁。