`
terran_li2008
  • 浏览: 200188 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

oracle锁表

阅读更多

以下内容转自:http://hi.baidu.com/xixitie/blog/item/8faf81db08763362d0164e90.html

 

 

 

lock   table BO_ThreeYearInvestProgramHis    in   exclusive   mode   nowait;

一,锁

为了防止用户在同一时间并发地访问和修改资源,ORACLE使用不同类型的锁控制对数据的并发访问,以防止用户之间出现破坏性的交互操作
,oracle 为处理事务自动锁定资源。

锁在SQL语句开始它们与数据的相互作用时获得,并在事务的整个过程中有效

oracle9i使用两种锁模式:
.独占模式(排他):不允许其他任何并发会话以任何方式共享锁定的资源,修改数据时需要这种锁。
.共享模式:允许对同一块数据的并发读访问。在更改数据时,上升为独占模式



一)行级锁
insert update delete 隐式加行锁(排他)
select ... for update 显示加行锁(共享)

select ...for update 用于显示锁定将要更新的数据行,防止其他用户在更新之前操作此行
如:select * from emp where deptno=30 for update
update emp set ename='Joke' where empno=7499;

在锁释放之前,其他用户不可以对锁定的数据行进行(修改,删除)操作,查询可以

假如有其他用户要锁定同一资源:可以使用wait 子句对锁的等待时间控制
如: 在另一用户中:select * from emp where deptno=30 for update wait 2 (等待2秒
如2秒钟还未释放资源,系统将会给出提示信息



二)表级锁

共享模式(in share mode)
共享更新模式(in share update mode)
排他锁模式

锁定表的通用语法:

lock table 表名 in <share or share update or exclusive mode>;

1) 共享模式
不允许其他用户插入,更新和删除行,多个用户可以同时在同一表上设置共享锁,这样设置锁的多个用户都只能执行查询

lock table emp in share mode;

2)共享更新模式(in share update mode)
允许多个用户同时锁定表的不同行, 允许其他用户进行DML(insert update delete select)操作 , 除了已锁定的行

如: lock table emp in share update mode;
select * from emp where deptno=30 for update //锁定的行
其他用户不能delete ,update 部门30的雇员信息

其他用户可以查看锁定的行: select * from emp where deptno=30

3)排他锁模式(限制性强)
不允许其他用户插入,更新和删除行, 允许查看数据,但只有一个用户可以在表中放置排他锁

lock table emp in exclusive mode;

三) 死锁

如:USERA: lock table scott.emp in share mode;
USERB: lock table scott.emp in share mode ;

USERA: update scott.emp set ename='Smith' where empno=7369;
USERB: update scott.emp set job='CLERK' where empno=7521;
发生死锁

分享到:
评论

相关推荐

    oracle锁表查询oracle锁表查询oracle锁表查询

    oracle锁表查询oracle锁表查询oracle锁表查询oracle锁表查询

    oracle 解锁表

    oracle 解锁表,可以用此字句,对表进行解锁,但是要有相应的权限

    oracle锁表处理

    Oracle数据库操作中,我们有时会用到锁表查询以及解锁和kill进程等操作,那么这些操作是怎么实现的呢?

    oracle锁表和解锁语句示例.sql

    oracle锁表和解锁语句示例。

    Oracle锁表处理,Oracle表解锁

    数据库死锁的概念, 所谓死锁,是指两个会话,每个会话都持有另外一个会话想要的资源,因争夺资源而造成...对于锁死的会话,我们可以直接删掉该会话,等事物回滚完成,也可以找出锁死进程的spid,从服务器中删掉该进程。

    oracle锁表sql

    oracle 查看锁表sql 及如何解锁,多给点分,为了下载别的资料。大家相互学习相互进步

    Oracle的锁表与解锁

    Oracle的锁表与解锁

    Oracle锁表问题的简捷处理技巧

    在开发Oracle数据库时,我们常遇到频繁操作的Oracle数据表,会出现Oracle锁表。现在就针对这一问题,提下个人的解决Oracle锁表的技巧。

    oracle锁表解决

    ORACLE解除锁表,能够让被锁的表,强制解锁。

    查看Oracle锁表

    此文档可以查看当前Oracle数据库中被锁的表和解锁命令,

    oracle锁表查询

    记载了oracle锁表查询的详细语句,亲测可用。

    oracle锁表查询具体执行sql

    oracle锁表查询具体执行sql

    锁表问题解决

    Oracle锁表常用sql语句: select sess.sid, sess.serial#, lo.oracle_username, lo.os_user_name, ao.object_name, lo.locked_mode from v$locked_object lo, dba_objects ao, v$session sess ...

    oracle 锁表查询

    先查看哪些表被锁住了 select b.username,b.sid,b.serial#,logon_time from v$locked_object a,v$session b where a.session_id = b.sid and sid in( select a.SESSION_ID from v$locked_object a,dba_objects b ...

    oracle锁表及解锁

    orale检查锁表,以及对表进行解锁的方式说明

    oracle锁表后,如何解锁

    如果你在用oracle数据中某个表时,突然不用了,有可能是某人把你的表给锁住了,现在说说在不知道谁锁的情况下,如何去解锁…… 文档中有详细说明……

    oracle查询锁表和解锁byxiaoheng

    oracle查询锁表和解锁。oracle在操作的过程中经常会遇到锁表的情况,一般能够用kill命令消除。

    oracle锁表该如何解决

    查询锁表语句: select object_name,machine,s.sid,s.serial# from v$locked_object l,dba_objects o ,v$session s where l.object_id = o.object_id and l.session_id=s.sid; 杀掉查到的进程: alter system ...

Global site tag (gtag.js) - Google Analytics