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

  • 相关阅读:
    CSS overflow 隐藏属性
    CSS visibility 隐藏属性
    多线程中的detach
    多线程中join的解释(转)
    lib 和 dll 的区别、生成以及使用详解:(包括变量,函数,类导出3种情形)(转)
    堆和栈的区别
    ZMQ相关
    不同类型的指针加减(就是向前或向后移动)[转]
    memset函数及其用法,C语言memset函数详解
    zmq中的router和dealer
  • 原文地址:https://www.cnblogs.com/xzpp/p/3411264.html
Copyright © 2020-2023  润新知