zoukankan      html  css  js  c++  java
  • Oracle 6

    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就需要等待。

  • 相关阅读:
    手写web框架之加载配置项目
    JAVA中注解的实现原理
    使用Mock 测试 controller层
    如何写resultful接口
    RSA加密、解密、签名、验签的原理及方法
    AES256位加密
    聊聊分布式事务,再说说解决方案
    分布式锁简单入门以及三种实现方式介绍
    redis总结(面试中容易遇到的)
    字符串匹配的KMP算法
  • 原文地址:https://www.cnblogs.com/xzpp/p/3411264.html
Copyright © 2011-2022 走看看