Oracle锁大类

1.DML锁 (SELECT, INSERT, UPDATE, DELETE, MERGE是对数据库加的锁, 可能是行锁,也可能是表锁)

2.DDL锁 (Create, Alter时对数据库加的锁, 保护对象结构定义)

3.内部锁和闩latch

DML锁

TX锁(事物锁), 事物开始时持有这个锁,知道事物提交或回滚。

注意:Oracle锁不会对系统带来更多的开销,原因是Oralce没有一个传统的锁管理器。

通过查询V$transaction, v$session, v$lock可以得到当前事物,会话和被锁定的表。实验可以通过打开两个sqlplus 回话,然后update同一行数据,然后查看这几个dynamic view.

v$transacion 对应每个活动transction对应一行

v$session, 显示已经登录的会话

v$lock, 对于持有所有enqueue队列锁和正在等待锁的会话,都包含一条。

通过查询这几个视图,可以看到系统的状态

select username,
v$lock.sid,
trunc(id1/power(2,16)) rbs,
bitand(id1,to_number('ffff','xxxx'))+0 slot,
id2 seq,
lmode,
request
from v$lock, v$session
where v$lock.type = 'TX'
and v$lock.sid = v$session.sid
and v$session.username = USER;

例子结果

USERNAME         SID        RBS       SLOT        SEQ      LMODE    REQUEST
--------- ---------- ---------- ---------- ---------- ---------- ----------
OPS$TKYTE        703          2         26       8297          6          0

select XIDUSN, XIDSLOT, XIDSQN  from v$transaction;
 
    XIDUSN    XIDSLOT     XIDSQN
---------- ---------- ----------
         2         26       8297

对返回结果的一些说明

v$lock.LMODE=6表示是一个排他锁,REQUEST=0表示已经持有这个锁。

v$lock不是一个锁表,比如对于一个更新4行的update语句,锁定了4行,你不会在v$lock表中找到4行条目,而只有一行。

RBS, SLOT, SEQ值与v$transaction中信息匹配。

ID1, ID2做了一些处理。

INITRANS, MASTRANS

我们一开始锁oracle的锁不会带来额外开销,数据本身管理锁定和事物信息。这些锁和事物信息和数据一起存储在块中一开始一段中,叫事物表,这里说一下这个块开销。 在创建表的时候,有两个参数决定了这个事物表的大小, 他们是INITRANS, MAXTRANS

INITRANS, 这个结构的初始大小,对于索引和表,default=2

MAXTRANS, 这个结构的最大大小,default=255。

如果块上有很多行数据,那么并发修改这个块上的数据的事物数就会受到限制,多出的修改transaction就需要等待。

Oracle 6 - 锁和闩 - 锁类型的更多相关文章

  1. SQL Server里的闩锁介绍

    在今天的文章里我想谈下SQL Server使用的更高级的,轻量级的同步对象:闩锁(Latch).闩锁是SQL Server存储引擎使用轻量级同步对象,用来保护多线程访问内存内结构.文章的第1部分我会介 ...

  2. 读书摘要:第七章 闩Suan锁和自旋锁

    摘要: 1.闩锁就像是内存上的锁,随着越来越多的线程参与进来,他们争相访问同一块内存,导致堵塞.2.自旋锁就是闩锁,不同之处是如果访问的内存不可用,它将继续检查轮询一段时间.3.拴锁和自旋锁是我们无法 ...

  3. Oracle 6 - 锁和闩 - transaction的可串行化

    本文主要内容 1.transaction的可串行化 2.数据库并发带来的问题, dirty read, Nonrepeatable reads, Phantoms幻读 3.隔离级别和2中的问题 4. ...

  4. ORACLE【2】:锁机制及解锁

    1. 锁的基本知识 根据要保护的对象不同,oracle的数据锁可以分成以下几类:DML锁,(data locks)数据锁,用于保护数据的完整性:DDL锁(dictionary locks),用于保护数 ...

  5. SQL Server里的闩锁耦合(Latch Coupling)

    几年前,我写了篇关于闩锁和为什么SQL Server需要它们的文章.在今天的文章里,我想进一步谈下非缓存区闩锁(Non-Buffer Latches),还有在索引查找操作期间,SQL Server如何 ...

  6. 通过Oracle补充日志,找到锁阻塞源头的SQL

    问题背景: 有时会考虑一件事情,如果在Oracle环境下出现了锁阻塞的情况,如何定位到SQL源头(通过session.lock.transaction等视图仅能定位到会话)?或许有人会想有没有可能通过 ...

  7. Oracle数据库悲观锁与乐观锁详解

    数据的锁定分为两种方法,第一种叫做悲观锁,第二种叫做乐观锁.什么叫悲观锁呢,悲观锁顾名思义,就是对数据的冲突采取一种悲观的态度,也就是说假设数据肯定会冲突,所以在数据开始读取的时候就把数据锁定住.而乐 ...

  8. MySQL中的latch(闩锁)详解——易产生的问题以及原因分析

    Latch 什么是latch: 锁是数据库系统区别与文件系统的一个关键特性.锁机制用于管理对共享资源的并发访问.Innodb存储引擎在行级别上对表数据上锁,这固然不错.但是Innodb也会在多个地方使 ...

  9. Oracle的悲观锁和乐观锁

    为了得到最大的性能,一般数据库都有并发机制,不过带来的问题就是数据访问的冲突.为了解决这个问题,大多数数据库用的方法就是数据的锁定. 数据的锁定分为两种方法,第一种叫做悲观锁,第二种叫做乐观锁.什么叫 ...

随机推荐

  1. [windows phone开发]新生助手的开发过程与体会一

    功能需求分析: 1.  为到达学院的新生指路,给出所有路线,并给出必要提示: 2.  对学院建筑进行介绍: 3.  对学院周边环境(交通.购物.银行等)进行介绍: 4.  必要的应用设置 总体设计: ...

  2. bootstrap时间插件 火狐不显示 完美解决方法

    原文链接:http://www.phpbiji.cn/article/index/id/141/cid/4.html bootstrap时间插件火狐 bootstrap-datetimepicker火 ...

  3. netstat监控大量ESTABLISHED连接与Time_Wait连接问题(转载)

    问题描述: 在不考虑系统负载.CPU.内存等情况下,netstat监控大量ESTABLISHED连接与Time_Wait连接. # netstat -n | awk '/^tcp/ {++y[$NF] ...

  4. Win7在CMD命令行中使用管理员权限运行命令

    使用命令: runas /user:administrator 需要执行的命令 如下:

  5. 从0零开始学slatstack-(0)在centos 6.5 安装 python2.7 salt

    由于服务器环境问题,我的一个小玩意失败了,于是下决心学习下saltstack来弄个好使的自动化配置管理工具.之所以不考虑puppet等,主要原因是我不熟ruby,深入学习困难.再其次,为什么考虑2.7 ...

  6. lnmp下用phpize动态安装PHP模块/扩展(不需要重装PHP)

    安装前 安装前建议先执行 /usr/local/php/bin/php -m (此命令显示目前已经安装好的PHP模块)看一下,要安装的模块是否已安装.然后下载当前PHP版本的源码并解压. 本文以ima ...

  7. 解决Win7下运行php Composer出现SSL报错的问题

    以前都在linux环境使用php composer.今天尝试在win7下运行composer却出现SSL报错: D:\data\www\mmoyu\symapp>php -f %phprc%\c ...

  8. spring中controller

    提示:原网站已由百度转码,以便在移动设备上查看. 第七城市 (Portal 开发读书笔记)Spring Portlet MVC 测试Controller 2012-04-28 16:32:44 - - ...

  9. line-height属性使文字垂直居中原理

    原理:line-height与font-size的计算之差(在CSS中成为“行间距”)分为两半,分别加到一个文本内容的顶部和底部,这样就使得文字垂直居中了.

  10. Java 图形编程 二:布局管理器之顺序布局

    package second; import java.awt.*; import java.awt.event.WindowAdapter; import java.awt.event.Window ...