Oracle所有锁的分配和管理都是数据库管理系统自动完成的,不需要用户进行干预。

v$lock表说明

字段

描述

ADDR Address of lock state object
KADDR Address of lock
SID 会话的sid,可以和v$session 关联
TYPE 所获得的或等待的锁类型,取值如下:
①Tx --事务
②TM --表锁或DML
③MR --介质恢复
④ST --磁盘空间事务
ID1 根据TYPE不同而有所不同
对于TM 锁
ID1表示被锁定表的object_id 可以和dba_objects视图关联取得具体表信息
对于TX 锁

ID1以十进制数值表示该事务所占用的回滚段号和事务槽slot number号,其组形式:
0xRRRRSSSS,RRRR=RBS/UNDO NUMBER,SSSS=SLOT NUMBER

ID2 根据TYPE不同而有所不同
对于TM 锁
ID2 值为0
对于TX 锁
ID2 以十进制数值表示环绕wrap的次数,即事务槽被重用的次数
LMODE
  • 0:无
  • 1:空
  • 2:行共享(XS)
  • 3:行独占(RX)
  • 4:共享(S)
  • 5:共享行独占(SRX)
  • 6:独占(X)
REQUEST 大于0时,表示当前会话被阻塞,其它会话占有改锁的模式
TIME
  • 已持有或者等待锁的时间
BLOCK
  • 是否阻塞其他会话锁申请 1:阻塞 0:不阻塞

若LMODE含有一个不是0或1的数值,则表明进程已经获得一个锁。若REQUEST列含有一个不是0或者1的数值,则表明进程正在等待一个锁,若LMODE列含有的数值全部是0,则表明进程正在等待一个锁。

监控锁

查看所信息

SELECT B.SID,C.USERNAME,C.TERMINAL,B.ID2,B.TYPE,B.LMODE,B.REQUEST
FROM
DBA_OBJECTS A,V$LOCK B,V$SESSION C
WHERE A.OBJECT_ID(+)=B.ID1
AND B.SID=C.SID
AND C.USERNAME IS NOT NULL
ORDER BY B.SID,B.ID2

以下是在SQL*Plus中运行结果

set echo off:显示start启动的脚本中的每个sql命令,缺省为on

set pagesize 60:输出每页行数,缺省为24,为了避免分页,可设定为0。

column SID format 999 heading "SessionID":格式化SID列数字显示并且列名为SessionID

column USERNAME format A8:字段长度格式化为8 (Trunc为截取的意思)

format的格式元素

元素符号 说明 例子
An 为varchar类型的列的列内容设置宽度,如果内容超过指定的宽度,则内容自动换行 A10
9 设置number列的现实格式 999999
$ 浮动的货币符号 $99
L 本地的货币符号 L99
. 小数点位置 9999.9
, 千位分隔符 9,999

锁的分类

描述 加锁的方法
行共享锁RS 对数据表定义行共享锁后,如果事务A获得,那么A事务可以进行并发查询、插入、删除及加锁,但不能以排他的方式存取该数据表 lock table xx in row share mode
行排他锁RX 对数据表定义了行排他锁后,如果被事务A获得,那么A事务对数据表中的行数据有排他权限,其他事物可以对统一数据表进行增删改查及加锁,但是不能使用以下3种方式加锁:
①行共享锁
②共享行排他锁
③行排他锁
lock table xx in row exclusive mode
共享锁S 对数据表定义共享锁后,如果事务被A获得,其他事务可以执行并发查询和加共享锁但不能修改表,也不能使用以下3种方式加锁:
①排他锁
②共享行排他锁
③行排他锁
lock table xx in share mode
共享行拍他锁SRX 对数据表定义共享行拍他锁后,如果事务被A获得,其他事务可以执行并发查询和对其他数据行加锁,但不能修改表,也不能使用以下4种方式加锁:
①排他锁
②共享行排他锁
③行排他锁
④共享锁
lock table xx in share row exclusive mode
排他锁 排他锁是最严格的锁。如果事务被A获得,A可以执行对数据库的读写操作,其他事务可以执行查询,但是不能插入和修改、删除操作 lock table xx in exclusive mode

锁表案例

打开2个SQL*Plus窗口,此处我把这两个窗口的名称叫做P1,P2,分别连接到同一个用户;

在数据库中有表TMP005,结构与数据如下:

TY
A
B
C

1.先在P1窗口删除值为A的记录

2.先在P2窗口删除值为B的记录

3.然后回到P1删除值为B的记录

4.接着回到P2删除值为A的记录

从上面2图我们可以初步发现,死锁已经形成了,接下来就是解锁

解锁操作:https://www.cnblogs.com/OliverQin/p/9593239.html

【Oracle】锁的更多相关文章

  1. oracle 锁的介绍 (转)

    本文转自:http://blog.csdn.net/gyb2013/article/details/6929697 一.什么是锁: Oracle的锁机制是一种轻量级的锁定机制,不是通过构建锁列表来进行 ...

  2. 【锁】Oracle锁系列

    [锁]Oracle锁系列 1  BLOG文档结构图 2  前言部分 2.1  导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识,~O(∩_∩)O~: ...

  3. oracle锁表问题解决方法

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp52 Oracle数据库操作中,我们有时会用到锁表查询以及解锁和kill进程 ...

  4. Oracle 锁机制探究

    以前虽然在网上看到很多关于Oracle锁机制的描述,但总感觉哪里有缺陷不适合自己,因此花了点时间参考官网以及Tom Tyke的<Oracle 9i/10g/11g编程艺术>一书整理了一下O ...

  5. oracle锁表

    一.锁表的处理 Oracle锁表比较简单,查询锁表的session杀掉就可以了. 1.以下几个为相关表 SELECT * FROM V$LOCK; SELECT * FROM V$SQLAREA; S ...

  6. oracle锁---原理篇

    在现代的多用户多任务系统中,必然会出现多个用户同时访问共享的某个对象,这个对象可能是表,行,或者内存结构,为了解决多个用户并发性访问带来的数据的安全性,完整性及一致性问题,必须要有一种机制,来使对这些 ...

  7. Oracle锁表查询和解锁方法

    数据库操作语句的分类 DDL:数据库模式定义语言,关键字:create DML:数据操纵语言,关键字:Insert.delete.update DCL:数据库控制语言 ,关键字:grant.remov ...

  8. oracle锁表查询

    ORACLE EBS操作某一个FORM界面,或者后台数据库操作某一个表时发现一直出于"假死"状态,可能是该表被某一用户锁定,导致其他用户无法继续操作 复制代码代码如下: --锁表查 ...

  9. Oracle 锁问题处理

    Oracle 锁问题处理 锁等待问题是一个常见的问题 查看持有锁的对象 查看事务正在执行的语句,与应用确认是否能够kill kill 对应的session

  10. Oracle 锁机制

    本文参考自:ORACLE锁机制 1.oracle是一个多用户使用的共享资源,当多个用户并发的操作同一数据行时,那么在oracle数据库中就会存在多个事务操作统一数据行的操作,如果不对并发操作进行控制, ...

随机推荐

  1. MFC小程序------01 代码管理器

    1.代码入库: 2.代码查找: 3.查看全部代码: 4.程序设置: 自己学习MFC写的一个小程序,当中还有很多功能还待完好,比方数据库的导入功能还没有写,但导出功能是能够用的,查找算法也不是非常好,还 ...

  2. [Node.js]NET模块

    摘要 net模块提供了一些用于底层的网络通信的小工具,包含了创建服务器和客户端的方法.可以使用该模块模拟请求等操作. net模块 引入net模块 var net=require("net&q ...

  3. HDU5087 Revenge of LIS II (LIS变形)

    题目链接:pid=5087">http://acm.hdu.edu.cn/showproblem.php?pid=5087 题意: 求第二长的最长递增序列的长度 分析: 用step[i ...

  4. Ext ComboBox 动态查询

    Ext中的combobox有属性typeAhead:true 可以实现模糊匹配,但是是从开始匹配的,如果需要自定的的匹配,则需要监听beforequery方法,实现自己的匹配查询方法: var gfx ...

  5. cocos编译Android版本号问题总结

    今天编译cocos2d-x项目到Android平台遇到编译不通过的问题,编译错误提示是一堆乱码. 主要原因有: 1.文件编码格式错误 或 换行符格式错误,改动方法为,在VS2012里面选择 文件-&g ...

  6. Mysql 查询注意和运行shell命令

    Mysql 查询注意 1. 在mysql查询的时候须要注意在表的前面加上数据库的前缀,不然就是默认是当前的数据库(当多个库查询的时候,可能会出现反复的查同样的表多次) 2. \! ls –al ,my ...

  7. 第九章 JVM调优推荐

    说明:本文主要参考自<分布式Java应用:基础与实践> 1.JVM的调优主要是内存的调优,主要调两个方面: 各个代的大小 垃圾收集器选择 2.各个代的大小 常用的调节参数 -Xmx -Xm ...

  8. 《Small Memory Software:Patterns For System With Limited Memory》读书笔记

    原文地址:http://blog.csdn.net/jinzhuojun/article/details/13297447 虽然摩尔定律让我们的计算机硬件得以以指数速度升级,但反摩尔定律又不断消减这些 ...

  9. SQL查询今天、昨天、7天内、30天【转】

    SQL查询今天.昨天.7天内.30天 今天的所有数据:select * from 表名 where DateDiff(dd,datetime类型字段,getdate())=0 昨天的所有数据:sele ...

  10. LoadTestAgentResultsLateException in VS2010

    遇到报错, 首先得先仔细读读人家给的出错信息. 而不是先怀疑是自己什么地方弄错了, 胡乱修改. 比如说, 遇到下面的报错: LoadTestAgentResultsLateException    R ...