Oracle中的锁

锁是一种机制,多个事务同时访问一个数据库对象时,该机制可以实现对并发的控制

按照用户系统锁可以分为自动锁和显示锁。

自动锁(系统上锁):DML锁、DDL锁、systemlocks锁

显示锁:用户为数据库对象设定的锁

按照锁的级别可以分为。

排他锁(exclusive lock, X锁):事务设置排他锁后,事务单独获得资源,在此事务提交之前,其他事务不能获取同一资源

和共享锁(share lock,S锁):多个事务可以同时访问同一资源,可以为事务提供高并发性,容易造成死锁和数据更新丢失。

按照操作分为。
1.DML锁(data locks,数据锁):用于控制事务并发中的数据操作,保护数据完整性。

2.DDL锁:DDL是保护表结构定义的。

DML锁又可分为

TM锁(表级锁)

TX锁(事务锁或行级锁)

TM锁

SQL语句:

select * from v$lock where lmode>=0 and type in ('TM','TX');可以查看锁

锁的模式表示如下:

sql例句:

手工锁表:

lock table trwtcTest1 in row share mode nowait;                --1

lock table trwtcTest1 in share update mode nowait;             --2

lock table trwtcTest1 in row exclusive mode nowait;            --3

lock table trwtcTest1 in share mode nowait;                    --4

lock table trwtcTest1 in share row exclusive mode nowait;      --5

lock table trwtcTest1 in exclusive mode nowait;                --6

 

手工解锁:

rollback/commit

DDL锁:DDL是系统自动加锁,从而保护这些对象不会被其他会话所修改。

例如,我执行一个DDL操作ALTERTABLE T,表T上就会加一个排他DDL锁,以防止其他会话得到这个表的DDL锁和TM锁。在DDL语句执行期间会一直持有DDL锁,一旦操作执行就立即释放DDL锁。

有3种类型的DDL锁:

1.排他DDL锁(Exclusive DDL lock):这会防止其他会话得到它们自己的DDL锁或TM(DML)锁。这说明,在DDL操作期间你可以查询一个表,但是无法以任何方式修改这个表。

2.共享DDL锁(Share DDL lock):这些锁会保护所引用对象的结构,使之不会被其他会话修改,但是允许修改数据。

3.可中断解析锁(Breakable parse locks):这些锁允许一个对象(如共享池中缓存的一个查询计划)向另外某个对象注册其依赖性。

锁的粒度

行级锁(TX),表级锁(TM), 数据库级锁:

锁的工作性质:

只有被修改时,行才会被锁定。

当一条语句修改了一条记录,只有这条记录上被锁定,在Oracle数据库中不存在锁升级。

当某行被修改时,它将阻塞别人对它的修改。

当一个事务修改一行时,将在这个行上加上行锁(TX),用于阻止其它事务对相同行的修改。

读永远不会阻止写。

读不会阻塞写,但有唯一的一个例外,就是select ...for update。

写永远不会阻塞读。

当一行被修改后,Oracle通过回滚段提供给数据的一致性读

最新文章

  1. JQuery之$.ajaxPOST数据
  2. 如何查看Maven项目中的jar包依赖树情况
  3. Python GIL 多线程机制 (C source code)
  4. html中charset和content-language的区别
  5. Realtek 8168 安装 VMware ESXi 提示没有驱动
  6. SpringMVC——注解的使用与结果跳转方式
  7. 我的VSTO之路:序
  8. 关闭 MsMpEng.exe
  9. Spark-RDD/DataFrame/DateSet
  10. firefox 28.0
  11. Media Player Classic - HC 源代码分析 4:核心类 (CMainFrame)(3)
  12. git 版本回滚
  13. MSM8909的触摸屏驱动导致的熄屏后重新亮屏速度慢的原因!【转】
  14. React知识杂烩(持续更新)
  15. Django之ORM
  16. 第一次java程序设计作业
  17. vue-08-axios-get-post-跨域
  18. bootstrap 在线设计工具layout IT
  19. Linux基础知识之用户和用户组以及 Linux 权限管理
  20. TCP/IP协议三次握手与四次握手

热门文章

  1. gitlab改变服务器ip
  2. UIKit: Apps for Every Size and Shape
  3. 多线程:多读少写锁(Readers–writer lock)
  4. Python爬虫之关于登录那些事
  5. vue-cli新建vue项目安装axios后在IE下报错
  6. .gitignore中添加的某个忽略文件并不生效
  7. JS: 数组扁平化
  8. 杭电OJ第11页2010-2019道题(C语言)
  9. 程序使用suid应注意的策略
  10. 解决iptables nat sctp协议无效的问题