oracle共享锁和排他锁

xu176032 2014-01-23 03:16:15
这两天研究了一下oracle中的这两种锁机制,没怎么懂,求高手给解释一下:

比如select * from a for update 这样的是什么锁?

如何创建共享锁和排他锁?


PS:百度来的别往上粘了,来个高手简单的给我讲讲就行了,谢谢!
...全文
2037 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
xu176032 2014-02-18
  • 打赏
  • 举报
回复
引用 5 楼 sych888 的回复:
SQL> select * from v$mystat where rownum=1; SID STATISTIC# VALUE ---------- ---------- ---------- 134 0 1 SQL> select * from emp where empno=7788 for update; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- -------------- ---------- ---------- ---------- 7788 SCOTT ANALYST 7566 19-4月 -87 3000 20 SQL> set linesize 2000 SQL> select * from v$lock where sid=134; ADDR KADDR SID TY ID1 ID2 LMODE REQUEST CTIME BLOCK -------- -------- ---------- -- ---------- ---------- ---------- ---------- ---------- ---------- 208344BC 208344D0 134 TO 8706 1 3 0 16778 0 1FDC4584 1FDC459C 134 TM 51151 0 3 0 113 0 1FE307AC 1FE308C8 134 TX 131101 9567 6 0 16778 0 TM:表级锁 TX:行级排它锁
受教,收获很大,十分感谢!
sych888 2014-02-18
  • 打赏
  • 举报
回复
SQL> select * from v$mystat where rownum=1; SID STATISTIC# VALUE ---------- ---------- ---------- 134 0 1 SQL> select * from emp where empno=7788 for update; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- -------------- ---------- ---------- ---------- 7788 SCOTT ANALYST 7566 19-4月 -87 3000 20 SQL> set linesize 2000 SQL> select * from v$lock where sid=134; ADDR KADDR SID TY ID1 ID2 LMODE REQUEST CTIME BLOCK -------- -------- ---------- -- ---------- ---------- ---------- ---------- ---------- ---------- 208344BC 208344D0 134 TO 8706 1 3 0 16778 0 1FDC4584 1FDC459C 134 TM 51151 0 3 0 113 0 1FE307AC 1FE308C8 134 TX 131101 9567 6 0 16778 0 TM:表级锁 TX:行级排它锁
xu176032 2014-01-26
  • 打赏
  • 举报
回复
引用 3 楼 lzd_83 的回复:
1、表行锁。 2、共享锁(S锁): 如果事务T对数据A加上共享锁后,则其他事务只能对A再加共享锁,不能加排他锁。获准共享锁的事务职能读取数据,不能修改数据。 排他锁(X锁): 如果事务T对数据A加上排他锁后,则其他事务不能在对A加任何类型的封锁。获准排他锁的事务既能读取数据,也能修改数据。如果事务T对数据A加上排他锁 数据库死锁的原因:若干事务相互等待对方释放封锁,就陷入了无限期等待状态,系统进入死锁。 预防数据库死锁的方法: 1、要求一个事务必须一次性封锁所需要的所有数据(要么全成功,要么全部成功) 2、规定封锁数据的顺序,所有事务必须按照这个顺序实行封锁 解除数据库死锁的方法:允许死锁发生,然后解除它,如果发现死锁,则将其中一个代价较小的事务撤销,回滚这个事务,并释放此事务持有的封锁,使其他事务继续进行。
谢谢讲解 - - 另外请问一下:“如果事务T对数据A加上排他锁,事务T对数据A加上共享锁”这个如何加呢? 能举个例子么?什么样的操作是加排他锁,什么样的操作是加共享锁?
Rotel-刘志东 2014-01-23
  • 打赏
  • 举报
回复
1、表行锁。 2、共享锁(S锁): 如果事务T对数据A加上共享锁后,则其他事务只能对A再加共享锁,不能加排他锁。获准共享锁的事务职能读取数据,不能修改数据。 排他锁(X锁): 如果事务T对数据A加上排他锁后,则其他事务不能在对A加任何类型的封锁。获准排他锁的事务既能读取数据,也能修改数据。 数据库死锁的原因:若干事务相互等待对方释放封锁,就陷入了无限期等待状态,系统进入死锁。 预防数据库死锁的方法: 1、要求一个事务必须一次性封锁所需要的所有数据(要么全成功,要么全部成功) 2、规定封锁数据的顺序,所有事务必须按照这个顺序实行封锁 解除数据库死锁的方法:允许死锁发生,然后解除它,如果发现死锁,则将其中一个代价较小的事务撤销,回滚这个事务,并释放此事务持有的封锁,使其他事务继续进行。
xu176032 2014-01-23
  • 打赏
  • 举报
回复
引用 1 楼 z_shousi 的回复:

Oracle for update获得:
1.RS:表级行共享。
2.行级行共享更新,只允许查询不可更新。

PS:表级才有共享锁,行级无共享锁。
--个人理解,你自己理解试试。
谢谢,还有其他高手也来说说各自的理解呗
  • 打赏
  • 举报
回复

Oracle for update获得:
1.RS:表级行共享。
2.行级行共享更新,只允许查询不可更新。

PS:表级才有共享锁,行级无共享锁。
--个人理解,你自己理解试试。

3,494

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧