当前位置:数据库 > Oracle >>

[Oracle]关于Oracle几种锁管理的汇总

答案:ORACLE里锁有以下几种模式:

   0:none

   1:null 空

   2:Row-S 行共享(RS):共享表锁,sub share

   3:Row-X 行独占(RX):用于行的修改,sub exclusive

   4:Share 共享锁(S):阻止其他DML操作,share

   5:S/Row-X 共享行独占(SRX):阻止其他事务操作,share/sub exclusive

   6:exclusive 独占(X):独立访问使用,exclusive

  数字越大锁级别越高, 影响的操作越多。

  1级锁有:Select,有时会在v$locked_object出现。

   2级锁有:Select for update,Lock For Update,Lock Row Share

   select for update当对话使用for update子串打开一个游标时,所有返回集中的数据行都将处于行级(Row-X)独占式锁定,其他对象只能查询这些数据行,不能进行update、delete或select for update操作。

   3级锁有:Insert, Update, Delete, Lock Row Exclusive

   没有commit之前插入同样的一条记录会没有反应, 因为后一个3的锁会一直等待上一个3的锁, 我们必须释放掉上一个才能继续工作。

   4级锁有:Create Index, Lock Share

   locked_mode为2,3,4不影响DML(insert,delete,update,select)操作, 但DDL(alter,drop等)操作会提示ora-00054错误。

   00054, 00000, "resource busy and acquire with NOWAIT specified"

   // *Cause: Resource interested is busy.

   // *Action: Retry if necessary.

   5级锁有:Lock Share Row Exclusive

   具体来讲有主外键约束时update / delete ... ; 可能会产生4,5的锁。

   6级锁有:Alter table, Drop table, Drop Index, Truncate table, Lock Exclusive

  以DBA角色, 查看当前数据库里锁的情况可以用如下SQL语句:

  


  
  bordercolorlight = "black" bordercolordark = "#FFFFFF" align="center">

  

  

  

  


  
col owner for a12

  col object_name for a16

  select b.owner,b.object_name,l.session_id,l.locked_mode

  from v$locked_object l, dba_objects b

  where b.object_id=l.object_id

  select t2.username,t2.sid,t2.serial#,t2.logon_time

  from v$locked_object t1,v$session t2

  where t1.session_id=t2.sid order by t2.logon_time


  


  


   如果有长期出现的一列,可能是没有释放的锁。我们可以用下面SQL语句杀掉长期没有释放非正常的锁:

  alter system kill session "sid,serial#";

  如果出现了锁的问题, 某个DML操作可能等待很久没有反应。

  当你采用的是直接连接数据库的方式,也不要用OS系统命令 $kill process_num 或者 $kill -9 process_num来终止用户连接,因为一个用户进程可能产生一个以上的锁, 杀OS进程并不能彻底清除锁的问题。

  (e129)


  本文来自:http://doc.linuxpk.com/79605.html
发表您的高见!

上一个:[Oracle]ERP系统北京康宁光缆应用案例
下一个:[Oracle]DataGuard数据库灾难防护

更多Oracle疑问解答:
运行exp备份oracle数据库提示oracle-12154错误
有没有,生产Oracle Rman 备份脚本的工具啊!
初学orcle,希望有大大帮忙解说一下详细步骤,从登录oracle到创建表的过程
oracle语句问题:一张user表,三个字段,id,name,time,插入记录比如:张三2007,李四2008,张三2011
如何写一个ORACLE触发器同步两个表中的数据?
oracle 如何查看一个服务器上有多少个数据库.
oracle 创建包的时候错误 求解
oracle 重复列的问题
oracle 中如何查处2星期前的数据
请教oracle数据库安装中的问题
请问谁能提供给我标准的oracle ERP的数据库表结构并详细说明各表主要的作用?
安装oracle遇到的问题 invalid entry CRC (expected 0x3e12e795 but got 0x9db0e9fd)
我的是ORACLE 10G,在RMAN中如何按指定的时间恢复数据文件啊?
oracle为什么没有自动增长列
oracle快捷键都有哪些啊?
Oracle
MySQL
Access
SQLServer
DB2
Excel
SQLite
SYBASE
Postgres
如果你遇到数据库难题:
请访问www.zzzyk.com 试试
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,