`
gaojingsong
  • 浏览: 1197132 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

Oracle数据库之V$LOCK

阅读更多

SQL> create table t(name number(5));

Table created.

一、创建表,插入记录时候不执行Commit操作场景如下:

SQL> insert into t values(1);

1 row created.

 

SQL> select * from v$lock;

ADDR     KADDR           SID TY        ID1        ID2      LMODE    REQUEST      CTIME      BLOCK

-------- -------- ---------- -- ---------- ---------- ---------- ---------- ---------- ----------

41BB9830 41BB9844        165 XR          4          0          1          0        571          0

41BB988C 41BB98A0        165 CF          0          0          2          0        563          0

41BB98E8 41BB98FC        167 PW          1          0          3          0        552          0

41BB9944 41BB9958        165 RS         25          1          2          0        560          0

41BB99FC 41BB9A10        166 RT          1          0          6          0        560          0

41BB9B10 41BB9B24        164 TS          3          1          3          0        548          0

41BB9B6C 41BB9B80        167 MR          1          0          4          0        554          0

41BB9BC8 41BB9BDC        167 MR          2          0          4          0        554          0

41BB9C24 41BB9C38        167 MR          3          0          4          0        554          0

41BB9C80 41BB9C94        167 MR          4          0          4          0        554          0

41BB9CDC 41BB9CF0        167 MR        201          0          4          0        554          0

ADDR     KADDR           SID TY        ID1        ID2      LMODE    REQUEST      CTIME      BLOCK

-------- -------- ---------- -- ---------- ---------- ---------- ---------- ---------- ----------

405C3F90 405C3FA8        143 TM      51153          0          3          0          6          0

40624F00 4062501C        143 TX     458753        264          6          0          6          0

 

13 rows selected.

SQL> commit;

二、执行for update查询时候

SQL> select * from t for update;

      NAME

----------

 

 

SQL> select * from v$lock;

 

ADDR     KADDR           SID TY        ID1        ID2      LMODE    REQUEST      CTIME      BLOCK

-------- -------- ---------- -- ---------- ---------- ---------- ---------- ---------- ----------

41BB9830 41BB9844        165 XR          4          0          1          0        634          0

41BB988C 41BB98A0        165 CF          0          0          2          0        626          0

41BB98E8 41BB98FC        167 PW          1          0          3          0        615          0

41BB9944 41BB9958        165 RS         25          1          2          0        623          0

41BB99FC 41BB9A10        166 RT          1          0          6          0        623          0

41BB9B10 41BB9B24        164 TS          3          1          3          0        611          0

41BB9B6C 41BB9B80        167 MR          1          0          4          0        617          0

41BB9BC8 41BB9BDC        167 MR          2          0          4          0        617          0

41BB9C24 41BB9C38        167 MR          3          0          4          0        617          0

41BB9C80 41BB9C94        167 MR          4          0          4          0        617          0

41BB9CDC 41BB9CF0        167 MR        201          0          4          0        617          0

 

ADDR     KADDR           SID TY        ID1        ID2      LMODE    REQUEST      CTIME      BLOCK

-------- -------- ---------- -- ---------- ---------- ---------- ---------- ---------- ----------

405C3F90 405C3FA8        143 TM      51153          0          3          0          3          0

40624F00 4062501C        143 TX     327703        214          6          0          3          0

 

13 rows selected.

 

 

 

V$LOCK中的常用列

l         SID:表示持有锁的会话信息。

l         TYPE:表示锁的类型。值包括TMTX等。

l         LMODE:表示会话等待的锁模式的信息。用数字06表示,和表1相对应。

l         REQUEST:表示session请求的锁模式的信息。

l         ID1,ID2:表示锁的对象标识。

 

1.关于V$lock表和相关视图的说明
Column Datatype Description
ADDR RAW(4 | 8) Address of lock state object
KADDR RAW(4 | 8) Address of lock
SID NUMBER Identifier for session holding or acquiring the lock
TYPE VARCHAR2(2) Type of user or system lock
The locks on the user types are obtained by user applications. Any process that is blocking others is likely to be holding one of these locks. The user type locks are:
TM - DML enqueue 
TX - Transaction enqueue
UL - User supplied
--我们主要关注TX和TM两种类型的锁
--UL锁用户自己定义的,一般很少会定义,基本不用关注
--其它均为系统锁,会很快自动释放,不用关注
ID1 NUMBER Lock identifier #1 (depends on type)
ID2 NUMBER Lock identifier #2 (depends on type)
---当lock type 为TM时,id1为DML-locked object的object_id
---当lock type 为TX时,id1为usn+slot,而id2为seq。
--当lock type为其它时,不用关注
LMODE NUMBER Lock mode in which the session holds the lock:
0 - none
1 - null (NULL)
2 - row-S (SS)
3 - row-X (SX)
4 - share (S)
5 - S/Row-X (SSX)
6 - exclusive (X)
oracle官网--大于0时表示当前会话以某种模式占有该锁,等于0时表示当前会话正在等待该锁资源,即表示该会话被阻塞。
--往往在发生TX锁时,伴随着TM锁,比如一个sid=9会话拥有一个TM锁,一般会拥有一个或几个TX锁,但他们的id1和id2是不同的,请注意
REQUEST NUMBER Lock mode in which the process requests the lock:
0 - none
1 - null (NULL)
2 - row-S (SS)
3 - row-X (SX)
4 - share (S)
5 - S/Row-X (SSX)
6 - exclusive (X)
--大于0时,表示当前会话被阻塞,其它会话占有改锁的模式

 

1
3
分享到:
评论

相关推荐

    ORACLE关于锁和V$LOCK的分析.docx

    通过分析 V$LOCK 视图,可以了解 Oracle 数据库的锁机制是如何工作的。 V$LOCK 视图的结构包括以下几个列: * SID:持有锁的会话 SID,通常与 V$SESSION 关联。 * TYPE:锁的类型,其中 TM 表示表锁或 DML 锁,TX ...

    oraclev$sessionv$session_wait用途详解

    `v$session`视图提供了关于当前所有会话(包括用户会话和后台进程)的信息,是Oracle数据库中最常用的动态性能视图之一。它包含了如会话状态、会话等待信息、资源限制、SQL执行历史等重要数据,通过查询该视图,管理...

    oracle 动态性能(V$)视图

    Oracle数据库中的动态性能(V$)视图是数据库管理员和开发人员获取实时数据库状态信息的重要工具。这些视图提供了丰富的信息,涵盖了从SQL执行情况、系统资源使用到数据库等待事件等各个方面,极大地帮助了性能调优...

    oracle_v$session_v$session_wait用途详解

    Oracle 数据库提供了大量的动态性能视图(Dynamic Performance Views),其中 `V$SESSION` 和 `V$SESSION_WAIT` 是两个非常重要的视图,它们能够帮助数据库管理员深入了解当前会话的状态以及等待事件的信息。...

    怎样快速查出Oracle 数据库中的锁等待

    Oracle 数据库锁等待问题解决方案 Oracle 数据库系统中,为了保证数据的一致性,在对数据库中的数据进行操作时,系统会进行对数据相应的锁定。这些锁定中有"只读锁"、"排它锁"、"共享排它锁"等多种类型,每种类型...

    oracle 数据库常用数据字典梳理.docx

    在 Oracle 数据库中,动态视图的名称都以 V_$ 开头,以便与静态视图区分。每个动态视图都有一个同义词,例如 V_$DATAFILE 的同义词是 V$DATAFILE。可以通过查询 V$FIXED_TABLE 来显示所有动态视图。 在数据库管理中...

    Oracle数据库死锁查询语句

    Oracle数据库死锁是数据库系统中常见的问题,它发生在两个或多个事务在执行过程中,因争夺资源而造成的一种相互等待的现象。当这种情况发生时,如果没有外力干预,这些事务都将无法继续执行,形成一种僵局。了解如何...

    oracle 数据库常用命令大全

    - 使用`v$session`、`v$lock`和`v$sqltext`视图查询锁定信息,确定被锁用户和锁住用户的SQL语句。 - 使用`ALTER SYSTEM KILL SESSION`命令结束导致锁死的会话。 6. **查询优化器**: - Oracle提供CBO(Cost-...

    oracle 数据源

    在给定的 SQL 语句中,使用了多个 Oracle 数据库视图,包括 V$LOCK、SYS.DBA_OBJECTS 和 V$SESSION。这些视图提供了当前数据库中的锁信息、对象信息和会话信息。 substr(v$lock.sid,1,4) "SID" 子句用于获取当前...

    较实用的ORACLE数据库死锁查杀

    ### ORACLE数据库死锁查杀方法详解 #### 一、引言 在Oracle数据库系统中,当两个或多个事务在等待对方释放资源时,就会出现死锁现象。死锁不仅会降低系统的整体性能,还可能导致某些重要事务长时间无法完成,严重...

    oracle v$中文目录

    Oracle的`V$`动态性能视图是数据库管理系统中用于监控和诊断的关键...这些`V$`视图构成了Oracle数据库性能管理的核心工具,通过查询这些视图,DBA可以深入了解数据库的运行状况,进行性能调优、问题诊断和故障排除。

    Oracle数据库性能优化实务闩锁及闩锁优化.ppt

    Oracle数据库性能优化实务闩锁及闩锁优化 Oracle数据库性能优化实务闩锁及闩锁优化是指在Oracle数据库中对性能的优化,以提高数据库的执行效率和稳定性。闩锁是一种机制,用于保护Oracle数据库的核心内存结构,防止...

    oracle数据库解决死锁

    Oracle数据库解决死锁 Oracle数据库解决死锁是指在Oracle数据库中出现的死锁问题,通过使用PL/SQL语句手动解决死锁问题。死锁是当多个事务在等待其他事务释放资源时,导致系统无法继续执行的现象。 在Oracle...

    Oracle数据库日常维护手册.pdf

    ### Oracle数据库日常维护手册知识点概览 #### 一、检查数据库基本状况 ##### 1.1 检查Oracle实例状态 - **SQL命令**: 使用`SELECT instance_name, host_name, startup_time, status, database_status FROM v$...

    怎样快速查出Oracle_数据库中的锁等待

    "快速查出Oracle数据库中的锁等待" Oracle数据库中的锁等待是一种常见的问题,它会影响到系统的性能和可用性。锁等待的出现是由于系统对数据的一致性和安全性的保护机制,系统在对数据库中的数据进行操作时,会对...

    Oracle数据库维护手册.docx

    * 锁的监测方式:V$LOCK 视图、Oracle 企业管理器(Enterprise Manager) * 锁的处理方式:ALTER SESSION 命令、KILL SESSION 命令等 十二、SQL 语句执行技巧 ------------------------- SQL 语句执行是 Oracle ...

    vcenter6.0采用oracle11g独立数据库

    为了实现这一点,我们需要在现有的一台服务器上安装Oracle数据库,并创建一个专门用于vCenter的数据表空间和用户。此外,vCenter Server本身也将部署在另一台独立的服务器上。 #### 二、准备工作 - **vCenter 6.0...

Global site tag (gtag.js) - Google Analytics