0:none 
  1:null 空 
  2:Row-S 行共享(RS):共享表锁 
  3:Row-X 行专用(RX):用于行的修改 
  4:Share 共享锁(S):阻止其他DML操作 
  5:S/Row-X 共享行专用(SRX):阻止其他事务操作 
  6:exclusive 专用(X):独立访问使用 
   
  数字越大锁级别越高, 影响的操作越多。 
  一般的查询语句如select ... from ... ;是小于2的锁, 有时会在v$locked_object出现。 
   
  select ... from ... for update; 是2的锁。 
   
  当对话使用for update子串打开一个游标时, 
  所有返回集中的数据行都将处于行级(Row-X)独占式锁定, 
  其他对象只能查询这些数据行,不能进行update、delete或select...for update操作。 
   
  insert / update / delete ... ; 是3的锁。 
   
  没有commit之前插入同样的一条记录会没有反应, 
  因为后一个3的锁会一直等待上一个3的锁, 我们必须释放掉上一个才能继续工作。 
   
  创建索引的时候也会产生3,4级别的锁。 
   
  locked_mode为2,3,4不影响DML(insert,delete,update,select)操作, 
  但DDL(alter,drop等)操作会提示ora-00054错误。 
   
  有主外键约束时 update / delete ... ; 可能会产生4,5的锁。 
   
  DDL语句时是6的锁。 
   
  以DBA角色, 查看当前数据库里锁的情况可以用如下SQL语句:

  select object_id,session_id,locked_mode from v$locked_object;

  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进程并不能彻底清除锁的问题。 
   
  记得在数据库级别用alter system kill session 'sid,serial#';杀掉不正常的锁。

ORACLE里锁的几种模式的更多相关文章

  1. ORACLE里锁有以下几种模式,v$locked_object,locked_mode【转】

    ORACLE里锁有以下几种模式:0:none1:null 空2:Row-S 行共享(RS):共享表锁,sub share 3:Row-X 行独占(RX):用于行的修改,sub exclusive 4: ...

  2. ORACLE里锁有以下几种模式,v$locked_object,locked_mode

    ORACLE里锁有以下几种模式: 0:none 1:null 空 2:Row-S 行共享(RS):共享表锁,sub share  3:Row-X 行独占(RX):用于行的修改,sub exclusiv ...

  3. 【Oracle】锁表处理 SQL 错误: ORA-00054: 资源正忙, 但指定以 NOWAIT 方式获取资源, 或者超时失效

    问题描述有时候ORACLE数据的某些表由于频繁操作,而且比较大,会导致锁表(死锁). 问题分析(1)锁的分析ORACLE里锁有以下几种模式:0:none1:null 空2:Row-S 行共享(RS): ...

  4. ORACLE中常见的几种锁

    ORACLE中常见的几种锁: 0:none 1:null 空 2:Row-S 行共享(RS):共享表锁,sub share 3:Row-X 行独占(RX):用于行的修改,sub exclusive 4 ...

  5. Oracle DG 三种模式(转)

    DG有下面三种模式– Maximum protection– Maximum availability– Maximum performance 在Maximum protection下, 可以保证从 ...

  6. Oracle DG 三种模式

    DG有下面三种模式– Maximum protection– Maximum availability– Maximum performance 在Maximum protection下, 可以保证从 ...

  7. 04 关于oracle的锁的级别以及介绍

    关于oracle的锁的级别以及介绍 oracle造成锁表的情况: 一.查看锁的对象视图:select object_id,session_id,locked_mode from v$locked_ob ...

  8. oracle 事务 锁机制

    原文地址:http://www.cnblogs.com/quanweiru/archive/2013/05/24/3097367.html 本课内容属于Oracle高级课程范畴,内容略微偏向理论性,但 ...

  9. 从浅到深掌握Oracle的锁

      1.分别模拟insert,update和delete造成阻塞的示例,并对v$lock中的相应的信息进行说明,给 出SQL演示. Insert示例 会话:SQL> select * from ...

随机推荐

  1. jquery中命名冲突问题

    例如用jq代替$符号 var jq = $.noConflict()

  2. 关于spring和extjs对接的过程简述

    <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http:// ...

  3. js 转化为几天前,几小时前,几分钟前...

    转换标准时间为时间戳: function getDateTimeStamp(dateStr){ return Date.parse(dateStr.replace(/-/gi,"/" ...

  4. 深入了解React组件重新渲染的条件和生命周期

    React组件rerender的真正条件 当前组件的State中的属性改变时且当前组件的shouldcomponentupdate返回true,那么当前组件会rerender 组件的props中的任一 ...

  5. Codeforces 991E. Bus Number (DFS+排列组合)

    解题思路 将每个数字出现的次数存在一个数组num[]中(与顺序无关). 将出现过的数字i从1到num[i]遍历.(i from 0 to 9) 得到要使用的数字次数数组a[]. 对于每一种a使用排列组 ...

  6. SQL基本语句:1.模式 3.索引

    每次很长时间不用sql语句之后,都需要把基础的捡一捡,索性做个笔记,以后可以长看

  7. php--方便好用的函数

    在写代码的时候经常会遇见各种各样的问题,感觉需要写函数解决,其实php中已经给出指定函数了.这些函数就需要我们日常去了解记忆. 1.获取指点年份中某月的天数 cal_days_in_month() & ...

  8. ZBrush中Flatten展平笔刷介绍

    本文我们来介绍ZBrush®中的Flatten展平笔刷,Flatten笔刷能增加粗糙的平面在模型表面,利用它能够制作出完全的平面. Flatten展平笔刷 Flatten(展平):Flatten笔刷可 ...

  9. Hibernate---criteria的具体使用列子

    方法 说明 Restrictions.eq = Restrictions.allEq 利用Map来进行多个等于的限制 Restrictions.gt > Restrictions.ge > ...

  10. luogo p3379 【模板】最近公共祖先(LCA)

    [模板]最近公共祖先(LCA) 题意 给一个树,然后多次询问(a,b)的LCA 模板(主要参考一些大佬的模板) #include<bits/stdc++.h> //自己的2点:树的邻接链表 ...