ORACLE 中的lock 机制
来源:互联网 发布:正规淘宝兼职在哪里找 编辑:程序博客网 时间:2024/04/29 17:37
为了进行LOCK的探究,我建立了一个测试表 test ,结构和测试数据如下:
SQL> select * from test;
ID NAME
---------- ----------
6 yoxi
2 robinson
2 tttt
3 david
4 jason
5 lucy
1 test
已选择7行。
row share(行共享)如果对某个表执行了row share锁定,那么,其他的SESSION就不能针对该表执行排他(exclusive)锁定,但是可以执行其他任意锁定。也就是说某个session对该表执行了row share锁定,那么其他session除了drop 命令不能执行,其他dml都可执行。
session 1中:
SQL> lock table test in row share mode;
表已锁定。
session 2中:
SQL> lock table test in row share mode;
表已锁定。
SQL> commit;
提交完成。
SQL> lock table test in row exclusive mode;
表已锁定。
SQL> commit;
提交完成。
SQL> lock table test in share mode;
表已锁定。
SQL> commit;
提交完成
SQL> lock table test in exclusive mode nowait;
lock table test in exclusive mode nowait
*
第 1 行出现错误:
ORA-00054: 资源正忙, 但指定以 NOWAIT 方式获取资源
SQL> update test set id=10;
已更新7行。
SQL> rollback;
回退已完成。
SQL> drop table test;
drop table test
*
第 1 行出现错误:
ORA-00054: 资源正忙, 但指定以 NOWAIT 方式获取资源 //其实drop table 命令会对表进行exclusive 锁定
row exclusive(行排他) 当执行insert,update,delete就会获得一个行排他锁,这个锁具有row share的所有特征,如果一个session获得了一个row exclusive 锁,那么另外的session 就不能对该表进行exclusive锁定,也不能对该表进行share锁定,可以对该表进行dml操作,但是不能drop;
session 1中
SQL> lock table test in row exclusive mode;
表已锁定。
session 2中:
SQL> lock table test in row share mode;
表已锁定。
SQL> commit;
提交完成。
SQL> lock table test in row exclusive mode;
表已锁定。
SQL> commit;
提交完成。
SQL> lock table test in share mode nowait;
lock table test in share mode nowait
*
第 1 行出现错误:
ORA-00054: 资源正忙, 但指定以 NOWAIT 方式获取资源
SQL> lock table test in exclusive mode nowait;
lock table test in exclusive mode nowait
*
第 1 行出现错误:
ORA-00054: 资源正忙, 但指定以 NOWAIT 方式获取资源
share(共享锁) 当一个session对某个表进行了share锁定,那么其他的session就不能以exclusive ,row exclusive 方式锁定该表,也就是说,如果不能row exclusive的话,就不能进行insert,update ,delete 操作,不能获得exclusive锁定就不能进行drop操作。
session 1中
SQL> lock table test in share mode;
表已锁定。
session 2中
SQL> lock table test in row share mode;
表已锁定。
SQL> lock table test in row exclusive mode nowait;
lock table test in row exclusive mode nowait
*
第 1 行出现错误:
ORA-00054: 资源正忙, 但指定以 NOWAIT 方式获取资源
SQL> lock table test in share mode;
表已锁定。
SQL> commit;
提交完成。
SQL> lock table test in exclusive mode nowait;
lock table test in exclusive mode nowait
*
第 1 行出现错误:
ORA-00054: 资源正忙, 但指定以 NOWAIT 方式获取资源
exclusive(排它锁)当执行drop命令,就会产生一个排它锁。顾名思义,只要某个session 对某个表进行了exclusive 锁定,那么其他session就不能对该表进行任何锁定。
session 1中
SQL> lock table test in exclusive mode;
表已锁定。
session 2中
SQL> lock table test in row share mode nowait;
lock table test in row share mode nowait
*
第 1 行出现错误:
ORA-00054: 资源正忙, 但指定以 NOWAIT 方式获取资源
其他锁定就不用测试了,因为 row share都不能获得 其他锁定就更不能获得了
share row exclusive(共享行排他)如果某个session获得了一个share row exclusive锁定,那么其他session就只能获得对该表的row share锁定,也就是说其他session不能对该表进行 insert ,update,delete,drop 操作.row share 锁定 除了防止drop 一无是处 ....
session 1中
SQL> lock table test in share row exclusive mode;
表已锁定。
session 2中
SQL> lock table test in row share mode nowait;
表已锁定。
SQL> commit;
提交完成。
SQL> lock table test in row exclusive mode nowait;
lock table test in row exclusive mode nowait
*
第 1 行出现错误:
ORA-00054: 资源正忙, 但指定以 NOWAIT 方式获取资源
SQL> lock table test in share mode nowait;
lock table test in share mode nowait
*
第 1 行出现错误:
ORA-00054: 资源正忙, 但指定以 NOWAIT 方式获取资源
SQL> lock table test in exclusive mode nowait;
lock table test in exclusive mode nowait
*
第 1 行出现错误:
ORA-00054: 资源正忙, 但指定以 NOWAIT 方式获取资源
总结一下:
1.如果一个table 被一个session锁定,无论什么锁定,另外的session就不能获得对于该表exclusive的锁定,也就是说不能删除该表,其实很容易相同,别人在用那个表,你去把表给删除了,肯定是不允许的.
2.如果能够对某个表进行row exclusive 锁定,那么肯定可以执行dml操作
3.可以这样理解share锁,顾名思义,共享锁是用来共享的,既然是共享,所以其他用户只能查看,不能更改。
4.可以这样理解exclusive锁,顾名思义,排它锁就是独享的,其他用户只能查看,不能修改。
注意 :上面通过lock 命令的lock 只能获得 TM(表) lock
而通过 update ,delete ,insert 产生的lock 有两种,一种是TM lock,一种是TX lock, tx lock 是事务锁的意思
select........... for update 也会得到一个TX lock 以及一个 row exclusive lock
- ORACLE 中的lock 机制
- ORACLE 中的lock 机制
- Oracle中的锁(LOCK)机制
- Oracle中的锁(LOCK)机制
- oracle中的lock modes
- Oracle lock 锁机制 总结
- ORACLE中的锁(LOCK)
- oracle中的Latch和Lock
- oracle中的Latch和Lock
- Oracle 锁机制(Lock mechanism)
- ORACLE中的锁(oracle lock mode)
- Oracle中的死锁Dead Lock(一)
- Oracle中的死锁Dead Lock(二)
- lock机制
- oracle中的锁机制
- oracle中的锁机制
- 你有多了解Oracle Enqueue lock队列锁机制?
- Oracle Lock
- windows api一日一练(dbghelp sdk)-004-FindExecutableImage,FindExecutableImageEx
- 社区服务已经超越电子邮件
- 开始学习wince移植部分知识-关于wince编译
- 手脱Armadillo 3.78 - 4.xx -> Silicon Realms Toolworks(穿山甲)
- symbian Retrieve General phone information using Shared Data API
- ORACLE 中的lock 机制
- 获取Linux/Unix文件系统信息
- 外国旅游网站经营模式
- 都说我像孙俪,真的像吗?素颜生活照,求达人鉴定!!
- 如何打造大学生“亮剑团队”?
- 爆破入门
- NTFSDOC 译文 第二章: NTFS属性(1)
- 一位硕士毕业生三个月求职经历与经验的结晶
- PowerPoint 2007 与 PowerPoint Viewer 2007 的命令行开关